### Order Requisition Business Process

The Order Requisition business process defines the overall sequence of events that occur when someone at Avitek orders office equipment. The business process is started when an employee submits an order for office equipment. It proceeds as follows:

1. Employee submits the order for manager approval.

If the order is approved by the manager, the business process proceeds to the next step. If the order is rejected by the manager, the business process ends the ordering process.

2. The process checks the current inventory for the ordered item.

If the ordered item is available in the current inventory, the business process ends the ordering process. If the ordered item is not available in the current inventory, the business process invokes the New Order business process.

To view the Order Requisition business process in WebLogic Workshop, double-click the workflow/OrderRequisition.jpd file in the Application window.

As you step through each node description, perform the following steps:

1. Double-click the node in the business process to invoke the node builder and display details about the node.
2. Select View Code in the node builder (or by right-clicking the node), when applicable, to display the related code in the Source View window.

The following table describes each node in the Order Requisition business process.

Stepping Through the Order Requisition Business Process

Business Process Node | Description
--- | ---
| Defines the event that starts the business process: an employee submits an order for office equipment. When you specify that the business process is Invoked via a Client Request with Return option, your Start node is displayed in expanded format. You can collapse the node view by clicking on the minus sign in the upper left-hand corner. To receive the order, the Client Request node calls the clientRequest() method that is exposed by the OrderRequisitionControlWS.jws web service. The web service uses the OrderRequisitionControl process control to invoke the business process. The order is passed as an XMLObject argument and the data is transformed to a ClientRequestDocument type using the data mapping tool. The Client Response node calls the clientReturn() method to return the results to the calling process. Note: For the WebLogic Platform Tour, the OrderRequisitionControlWS.jws web service was generated separately from the business process in order to decouple to business process and portal client applications. In addition, WebLogic Workshop enables you to generate a web service from a business process: right-click the business process and choose Generate WSDL File. Then, right-click the WSDL file and choose Generate Web Service.
| Transforms the message to the appropriate format. The Control Send with Return node uses m_Ixform, an instance of the TransformsInputMessage.dtf data transformation control, to call the getWebserviceMessage() method to transform the message received from the ClientRequestDocument type to the InputDocument type.
| Transforms the message to the appropriate format. The Control Send with Return node uses m_Ixform, an instance of the TransformsInputMessage.dtf data transformation control, to call the getInput() method to transform the message received from the InputDocument type to the Input type.
| Defines the method used to return the results to the calling process. The Client Response node calls the clientReturn() method to return the results to the calling process as a String argument.
| Defines the exception handler for the Client Request node. The Perform node calls the invalidMessageHandler() method to catch and handle an exception using your custom business logic. It is recommended that you add proper exception handlers, as required by your application. In particular, they should be added to the Start nodes in your business processes.
| Updates the status of the order. The Control Send with Return node uses m_OrderTrack, an instance of the e2eOrderTrackingEJB.jcx EJB control, to call the create() method to create a new order tracking ID and update its status to indicate that the order has been received.
| Sends an asynchronous message to Rachel Burns, requesting approval of the order for a new laptop. The Control Send node uses m_Task, an instance of the ManagerTask.jcx task control, to call the createTaskByName() method to create the new task.
| Sends an asynchronous message to Rachel Burns, requesting approval of the order for a new laptop. The Control Send node uses m_Task, an instance of the ManagerTask.jcx task control, to call the assignTaskToUser() method to assign the task to Rachel Burns.
| Updates the status of the order. The Control Send node uses m_OrderTrack, an instance of the e2eOrderTrackingEJB.jcx EJB control, to call the setDescRemote() method to indicate that the task has been assigned to the manager.
| Receives the approval response from Rachel Burns. The Control Receive node uses m_Task, an instance of the ManagerTask.jcx task control, to call the onTaskCompleted() method to return the response from Rachel Burns.
| Updates the status of the order. The Control Send node uses m_OrderTrack, an instance of the e2eOrderTrackingEJB.jcx EJB control, to call the setDescRemote() method to indicate that the task has been approved by the manager.
| Branches the business process flow, based on whether or not the order is approved by the manager. If the order is approved, then the business process proceeds to the Check Inventory node. If the order is rejected, then the order process ends. The Decision node calls the isApproved() Java method to branch the business process flow accordingly.
| Checks the company inventory for the ordered item. The Control Send node uses m_AppView, an instance of the Appview1.jcx Application View control, to call the CheckInventoryAsset() method to interface with the Application View to check the company inventory. The node also uses m_Xform, an instance of the Transforms.dtf data transformation control, to call the following methods: createAssetRequest() to transform the request received into the appropriate format. isAvailable() to determine if the item is available in the company inventory.
| Branches the business process flow, based on whether or not the ordered item is available in the company inventory. If the item is available, then the business process proceeds to the UpdateAppStatusAvailability node. If the item is not available, then the business process proceeds to the Not Available node. The Decision node calls the isAvailable() Java method to branch the business process flow accordingly.
| Updates the status of the order. The Control Send node uses m_OrderTrack, an instance of the e2eOrderTrackingEJB.jcx EJB control, to call the setDescRemote() method to indicate that the order is available in the local inventory.
| Branches the business process flow, based on whether the reason the ordered item is unavailable is lack of inventory or another condition. If the item is unavailable due to lack of inventory, then the business process proceeds to the UpdateAppStatusNonAvailability node. If the item is unavailable due to another reason, then the order process ends. The Decision node calls the isNotAvailable() method to branch the business process flow accordingly.
| Updates the status of the order. The Control Send node uses m_OrderTrack, an instance of the e2eOrderTrackingEJB.jcx EJB control, to call the setDescRemote() method to indicate that the order is not available in the local inventory.
| Starts the New Order business process to request the item that is out of stock. The Control Send node uses m_OrderNew, an instance of the OrderNewItemControl.jcx process control, to call the receiveNewOrderRequest() method to start the New Order business process.
| Updates the status of the order. The Control Send node uses m_OrderTrack, an instance of the e2eOrderTrackingEJB.jcx EJB control, to call the setDescRemote() method to indicate that the Order New business process has been invoked.