applications/order/servicedef/orderProcessXPDL.xml
<?xml version="1.0"?>
<!DOCTYPE Package PUBLIC "-//XPDL Definition//EN" "http://www.wfmc.org/standards/docs/xpdl.dtd">
<!--
This file is subject to the terms and conditions defined in the
files 'LICENSE' and 'NOTICE', which are part of this source
code package.
-->
<Package Id="org.ofbiz.order">
<PackageHeader>
<XPDLVersion>0.03</XPDLVersion>
<Vendor>OFBiz.org</Vendor>
<Created>2002-12-03 00:00:00</Created>
<Description>Demo Order Processing Workflow</Description>
<Documentation>None</Documentation>
<PriorityUnit>P</PriorityUnit>
<CostUnit>USD</CostUnit>
</PackageHeader>
<RedefinableHeader PublicationStatus="UNDER_REVISION">
<Responsibles>
<Responsible>admin</Responsible>
</Responsibles>
</RedefinableHeader>
<ConformanceClass GraphConformance="FULL_BLOCKED"/>
<Participants>
<Participant Id="admin" Name="Workflow Admin">
<ParticipantType Type="HUMAN"/>
<Description>Workflow Admin - Used for automatic activities</Description>
</Participant>
<Participant Id="BUYER" Name="Purchase Order Approval Role">
<ParticipantType Type="ROLE"/>
<Description>Reviews and approves/rejects orders</Description>
</Participant>
<Participant Id="ORDER_CLERK" Name="Sales Order Approval Role">
<ParticipantType Type="ROLE"/>
<Description>Reviews and approves/rejects orders</Description>
</Participant>
</Participants>
<WorkflowProcesses>
<WorkflowProcess Id="ProcessOrder" Name="Processes incoming orders">
<ProcessHeader DurationUnit="h">
<Created>2002-12-01 12:00:00</Created>
<Description>Order Processing Workflow</Description>
<Priority>5</Priority>
<Limit>12</Limit>
<ValidFrom>2002-12-01 12:00:00</ValidFrom>
<ValidTo>2012-12-01 12:00:00</ValidTo>
<TimeEstimation>
<WaitingTime>1</WaitingTime>
<WorkingTime>2</WorkingTime>
<Duration>3</Duration>
</TimeEstimation>
</ProcessHeader>
<RedefinableHeader PublicationStatus="UNDER_REVISION">
<Responsibles>
<Responsible>admin</Responsible>
</Responsibles>
</RedefinableHeader>
<FormalParameters>
<FormalParameter Id="orderId" Index="1" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>The order number</Description>
</FormalParameter>
</FormalParameters>
<DataFields>
<DataField Id="adminEmailList">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<InitialValue>test@scipioerp.com</InitialValue>
</DataField>
</DataFields>
<Activities>
<Activity Id="receiveOrder" Name="Receive Order">
<Description>Initial activity when order is received</Description>
<Limit>1</Limit>
<Implementation>
<Tool Id="receiveOrderInformation" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="serviceName" Value="getOrderHeaderInformation"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
</Implementation>
<Performer>admin</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Priority>1</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="Y"/>
</ExtendedAttributes>
</Activity>
<Activity Id="checkSalesOrder" Name="Check Sales Order">
<Description>Checks the status of the sales order</Description>
<Limit>1</Limit>
<Route/>
<Performer>admin</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Priority>1</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="Y"/>
</ExtendedAttributes>
</Activity>
<Activity Id="orderNotReady" Name="Order Not Ready">
<Description>The order is not ready for processing; suspend and wait for action</Description>
<Limit>72</Limit>
<Implementation>
<Tool Id="orderNotReadySuspend" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>workEffortId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="serviceName" Value="wfSuspendActivity"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
</Implementation>
<Performer>admin</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Priority>5</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="N"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
<ExtendedAttribute Name="limitAfterStart" Value="N"/>
<ExtendedAttribute Name="limitService" Value="sendProcessNotification"/>
<ExtendedAttribute Name="inheritPriority" Value="Y"/>
</ExtendedAttributes>
</Activity>
<Activity Id="approvePurchaseOrder" Name="Approve Purchase Order #${orderId}">
<Limit>12</Limit>
<Implementation>
<No/>
</Implementation>
<Performer>BUYER</Performer>
<StartMode>
<Manual/>
</StartMode>
<FinishMode>
<Manual/>
</FinishMode>
<Priority>5</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="N"/>
<ExtendedAttribute Name="limitAfterStart" Value="N"/>
<ExtendedAttribute Name="limitService" Value="sendProcessNotification"/>
<ExtendedAttribute Name="inheritPriority" Value="Y"/>
</ExtendedAttributes>
</Activity>
<Activity Id="approveSalesOrder" Name="Approve Sales Order #${orderId}">
<Limit>12</Limit>
<Implementation>
<No/>
</Implementation>
<Performer>ORDER_CLERK</Performer>
<StartMode>
<Manual/>
</StartMode>
<FinishMode>
<Manual/>
</FinishMode>
<Priority>5</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="N"/>
<ExtendedAttribute Name="limitAfterStart" Value="N"/>
<ExtendedAttribute Name="limitService" Value="sendProcessNotification"/>
<ExtendedAttribute Name="inheritPriority" Value="Y"/>
</ExtendedAttributes>
</Activity>
<Activity Id="approveOrderEvent" Name="Approve Order Event">
<Description>Activity runs after an order is approved</Description>
<Limit>1</Limit>
<Implementation>
<!-- change the order status -->
<Tool Id="approveOrderChangeOrderStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
<ActualParameter>statusId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="statusId" Value="ORDER_APPROVED"/>
<ExtendedAttribute Name="serviceName" Value="changeOrderStatus"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
<Tool Id="approveOrderChangeItemStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
<ActualParameter>statusId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="statusId" Value="ITEM_APPROVED"/>
<ExtendedAttribute Name="serviceName" Value="changeOrderItemStatus"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
<!-- email customer with the status change
<Tool Id="emailOrderStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
</ActualParameters>
</Tool> -->
</Implementation>
<Performer>admin</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Priority>1</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="N"/>
</ExtendedAttributes>
</Activity>
<Activity Id="rejectOrder" Name="Reject The Order">
<Description>Order was not appoved; reject the order</Description>
<Limit>1</Limit>
<Implementation>
<!-- change the order status -->
<Tool Id="rejectOrderChangeOrderStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
<ActualParameter>statusId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="statusId" Value="ORDER_REJECTED"/>
<ExtendedAttribute Name="serviceName" Value="changeOrderStatus"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
<Tool Id="rejectOrderChangeItemStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
<ActualParameter>statusId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="statusId" Value="ITEM_REJECTED"/>
<ExtendedAttribute Name="serviceName" Value="changeOrderItemStatus"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
<!-- email customer with the status change
<Tool Id="emailOrderStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
</ActualParameters>
</Tool> -->
</Implementation>
<Performer>admin</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Priority>5</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="N"/>
</ExtendedAttributes>
</Activity>
<Activity Id="cancelOrder" Name="Cancel The Order">
<Description>Order has been cancelled; cancel the order and abort the workflow</Description>
<Limit>1</Limit>
<Implementation>
<!-- change the order status -->
<Tool Id="cancelOrderChangeOrderStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
<ActualParameter>statusId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="statusId" Value="ORDER_CANCELLED"/>
<ExtendedAttribute Name="serviceName" Value="changeOrderStatus"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
<Tool Id="cancelOrderChangeItemStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>orderId</ActualParameter>
<ActualParameter>statusId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="statusId" Value="ITEM_CANCELLED"/>
<ExtendedAttribute Name="serviceName" Value="changeOrderItemStatus"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
<!-- email customer with the status change; handled by ECA on cancel -->
</Implementation>
<Performer>admin</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Priority>5</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="N"/>
</ExtendedAttributes>
</Activity>
<Activity Id="cancelWorkflow" Name="Cancel Workflow">
<Description>Transition Activity To Abort Workflow</Description>
<Limit>1</Limit>
<Implementation>
<Tool Id="cancelOrderCancelWorkflow" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>workEffortId</ActualParameter>
</ActualParameters>
<ExtendedAttributes>
<ExtendedAttribute Name="serviceName" Value="wfCancelWorkflow"/>
<ExtendedAttribute Name="runAsUser" Value="admin"/>
</ExtendedAttributes>
</Tool>
</Implementation>
<Performer>admin</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Priority>1</Priority>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="canStart" Value="N"/>
</ExtendedAttributes>
</Activity>
</Activities>
<Transitions>
<Transition Id="trans1.0" From="receiveOrder" To="approvePurchaseOrder" Loop="NOLOOP" Name="Purchase Order">
<Condition Type="CONDITION"><![CDATA[orderTypeId.equals("PURCHASE_ORDER")]]></Condition>
</Transition>
<Transition Id="trans1.1" From="receiveOrder" To="checkSalesOrder" Loop="NOLOOP" Name="Sales Order">
<Condition Type="OTHERWISE"/>
</Transition>
<Transition Id="trans2.0" From="checkSalesOrder" To="approveSalesOrder" Loop="NOLOOP" Name="Goto Order Approve">
<Condition Type="CONDITION"><![CDATA[statusId.equals("ORDER_PROCESSING")]]></Condition>
</Transition>
<Transition Id="trans2.1" From="checkSalesOrder" To="orderNotReady" Loop="NOLOOP" Name="Wait For Order Change">
<Condition Type="CONDITION"><![CDATA[statusId.equals("ORDER_CREATED")]]></Condition>
</Transition>
<Transition Id="trans3.0" From="approvePurchaseOrder" To="cancelOrder" Loop="NOLOOP" Name="Cancel Order">
<Condition Type="CONDITION"><![CDATA[approvalCode.equals("0")]]></Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="approvalCode" Value="0"/>
</ExtendedAttributes>
</Transition>
<Transition Id="trans3.1" From="approvePurchaseOrder" To="rejectOrder" Loop="NOLOOP" Name="Reject Order">
<Condition Type="CONDITION"><![CDATA[approvalCode.equals("1")]]></Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="approvalCode" Value="1"/>
</ExtendedAttributes>
</Transition>
<Transition Id="trans3.2" From="approvePurchaseOrder" To="approveOrderEvent" Loop="NOLOOP" Name="Approve Order">
<Condition Type="CONDITION"><![CDATA[approvalCode.equals("2")]]></Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="approvalCode" Value="2"/>
</ExtendedAttributes>
</Transition>
<Transition Id="trans3.3" From="approvePurchaseOrder" To="receiveOrder" Loop="NOLOOP" Name="Invalid Response">
<Condition Type="OTHERWISE"/>
</Transition>
<Transition Id="trans4.0" From="approveSalesOrder" To="cancelOrder" Loop="NOLOOP" Name="Cancel Order">
<Condition Type="CONDITION"><![CDATA[approvalCode.equals("0")]]></Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="approvalCode" Value="0"/>
</ExtendedAttributes>
</Transition>
<Transition Id="trans4.1" From="approveSalesOrder" To="rejectOrder" Loop="NOLOOP" Name="Reject Order">
<Condition Type="CONDITION"><![CDATA[approvalCode.equals("1")]]></Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="approvalCode" Value="1"/>
</ExtendedAttributes>
</Transition>
<Transition Id="trans4.2" From="approveSalesOrder" To="approveOrderEvent" Loop="NOLOOP" Name="Approve Order">
<Condition Type="CONDITION"><![CDATA[approvalCode.equals("2")]]></Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="approvalCode" Value="2"/>
</ExtendedAttributes>
</Transition>
<Transition Id="trans4.3" From="approveSalesOrder" To="receiveOrder" Loop="NOLOOP" Name="Invalid Response">
<Condition Type="OTHERWISE"/>
</Transition>
<Transition Id="trans5.0" From="orderNotReady" To="receiveOrder" Loop="NOLOOP" Name="Order not ready for processing">
<Condition Type="OTHERWISE"/>
</Transition>
</Transitions>
<ExtendedAttributes>
<ExtendedAttribute Name="sourceReferenceField" Value="orderId"/>
</ExtendedAttributes>
</WorkflowProcess>
</WorkflowProcesses>
</Package>