WfMC Sample Workflow

Use Case

The WfMC sample workflow is a sales order processing scenario. The XYZE Products Company receives orders from cash and credit accounts: cash accounts pay by credit card and credit accounts are invoiced. A suite of three co-operating workflows manages the process of receiving orders, arranging payment by credit card or invoice, and order fulfillment. The business rules and process flows are as follows: N.B. The OBE version of this workflow process differs slightly from the original WfMC version, which contains several errors, omissions and inconsistencies. The OBE version is fully functional and is also event-triggerable.

Interfaces

Order Document Schema

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="Order">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Items">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Item" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="itemNumber" type="xsd:integer" use="required"/>
<xsd:attribute name="itemQty" type="xsd:integer" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="accountNumber" type="xsd:integer" use="required"/>
<!--
Adrian Price: This is the wrong data type for a financial
transaction. Should use xsd:decimal to prevent inaccuracies.
-->
<xsd:attribute name="totalAmount" type="xsd:float" use="required"/>
<xsd:attribute name="emailAddress" type="xsd:string" use="required"/>
<xsd:attribute name="orderType" type="orderType" use="required"/>
<xsd:attribute name="cardType" type="cardType" use="required">
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="orderType">
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="PO"/>
<xsd:enumeration value="Credit"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="cardType">
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="MC-VISA"/>
<xsd:enumeration value="Discover"/>
<xsd:enumeration value="AMEX"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

Applications

Note: In the OBE version all server-side automated processing is implemented by PROCEDURES. This is because the XPDL specification is unclear about the semantic distinction between a tool which is invoked as PROCEDURE versus one which is invoked as an APPLICATION. OBE semantics assume that, being typically non-interactive, procedures are invoked server-side whereas applications, being typically interactive, are invoked client-side (and therefore require non-SYSTEM activity performers and thus have associated work items).

Procedures

transformData(IN STRING orderString, OUT Document orderDocument)
checkData(IN Document orderInfo, OUT STRING orderStatus)
checkVendor(IN INTEGER accountNumber, IN FLOAT orderAmount, OUT STRING creditStatus)
enterOrder(IN Document orderInfo, OUT INTEGER salesOrderNumber)
composeMessage(IN STRING status, IN INTEGER orderNumber)
setCreditInfo(IN INTEGER accountNumber, IN FLOAT amount, IN STRING cardType, OUT
Document creditInfo)
getCreditInfo(
IN INTEGER orderNumber, OUT Document creditInfo)
shipOrder(
IN INTEGER orderNumber, OUT STRING orderStatus)
billAccount(
IN INTEGER orderNumber)
createInvoice(
IN INTEGER orderNumber, OUT STRING documentURI)
createReceipt(IN INTEGER orderNumber, OUT STRING documentURI)
cancelOrder(
IN INTEGER orderNumber)
setOrderStatus(IN STRING creditStatus, OUT STRING orderStatus)

Credit Card Web Service

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://wfmc.org/standards/docs/xpdl_sample"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://wfmc.org/standards/docs/xpdl_sample"
xmlns:intf="http://wfmc.org/standards/docs/xpdl_sample"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema targetNamespace="http://wfmc.org/standards/docs/xpdl_sample"
xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="CreditInfo">
<sequence>
<element name="merchantNumber" nillable="true"
type="xsd:string"/>
<element name="accountNumber" nillable="true"
type="xsd:string"/>
<element name="amount" nillable="true" type="xsd:decimal"/>
<element name="cardType" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
<element name="creditInfo" type="impl:CreditInfo"/>
<element name="status" type="xsd:string"/>
</schema>
</wsdl:types>

<wsdl:message name="getCreditAuthorizationRequest">
<wsdl:part name="creditInfo" element="impl:creditInfo"/>
</wsdl:message>
<wsdl:message name="getCreditAuthorizationResponse">
<wsdl:part name="status" element="impl:status"/>
</wsdl:message>

<wsdl:message name="chargeCreditAccountRequest">
<wsdl:part name="creditInfo" element="impl:creditInfo"/>
</wsdl:message>
<wsdl:message name="chargeCreditAccountResponse">
<wsdl:part name="status" element="impl:status"/>
</wsdl:message>

<wsdl:portType name="CreditPortType">
<wsdl:operation name="getCreditAuthorization"
parameterOrder="creditInfo">
<wsdl:input name="getCreditAuthorizationRequest"
message="impl:getCreditAuthorizationRequest"/>
<wsdl:output name="getCreditAuthorizationResponse"
message="impl:getCreditAuthorizationResponse"/>
</wsdl:operation>
<wsdl:operation name="chargeCreditAccount" parameterOrder="creditInfo">
<wsdl:input name="chargeCreditAccountRequest"
message="impl:chargeCreditAccountRequest"/>
<wsdl:output name="chargeCreditAccountResponse"
message="impl:chargeCreditAccountResponse"/>
</wsdl:operation>
</wsdl:portType>

<wsdl:binding name="CreditServicePortSoapBinding"
type="impl:CreditPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="getCreditAuthorization">
<soap:operation soapAction="http://localhost:8080/obeexamples/services/CreditServicePort/GetCreditAuthorization"/>
<!--<soap:operation soapAction=""/>-->
<wsdl:input name="getCreditAuthorizationRequest">
<soap:body
namespace="http://wfmc.org/standards/docs/xpdl_sample"
use="literal"/>
</wsdl:input>
<wsdl:output name="getCreditAuthorizationResponse">
<soap:body
namespace="http://wfmc.org/standards/docs/xpdl_sample"
use="literal"/>
</wsdl:output>
</wsdl:operation>

<wsdl:operation name="chargeCreditAccount">
<soap:operation soapAction="http://localhost:8080/obeexamples/services/CreditServicePort/ChargeCreditAccount"/>
<!--<soap:operation soapAction=""/>-->
<wsdl:input name="chargeCreditAccountRequest">
<soap:body
namespace="http://wfmc.org/standards/docs/xpdl_sample"
use="literal"/>
</wsdl:input>
<wsdl:output name="chargeCreditAccountResponse">
<soap:body
namespace="http://wfmc.org/standards/docs/xpdl_sample"
use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="CreditService">
<wsdl:port binding="impl:CreditServicePortSoapBinding"
name="CreditServicePort">
<soap:address
location="http://localhost:8080/obeexamples/services/CreditService"/>
</wsdl:port>
</wsdl:service>

</wsdl:definitions>

Solution

Process Model Description

EOrder workflow diagram
EOrder Workflow - wfmc-wf-1

FillOrder workflow diagram
FillOrder Workflow - wfmc-wf-2

CreditCheck workflow diagram
CreditCheck Workflow - wfmc-wf-3

XPDL Process Model

<?xml version="1.0" encoding="UTF-8"?>
<Package Id="wfmc-sample" Name="Sample Workflow Process"
xmlns="http://www.wfmc.org/2002/XPDL1.0" xmlns:obe="http://obe.sourceforge.net/2005/OBE1.0"
 xmlns:xpdl="http://www.wfmc.org/2002/XPDL1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xyz="http://www.xyzeorder.com/workflow"
 xsi:schemaLocation="http://www.wfmc.org/2002/XPDL1.0 http://wfmc.org/standards/docs/TC-1025_schema_10_xpdl.xsd">
<PackageHeader>
<XPDLVersion>1.0</XPDLVersion>
<Vendor>XYZ, Inc</Vendor>
<Created>6/18/2002 5:27:17 PM</Created>
</PackageHeader>
<ConformanceClass GraphConformance="NON_BLOCKED"/>
<Script Type="text/x-xpath"/>
<TypeDeclarations>
<TypeDeclaration Id="Text" Name="Long Java String">
<ExternalReference location="java:java.lang.String"/>
</TypeDeclaration>
<TypeDeclaration Id="CardType" Name="CardType">
<ExternalReference
  location="http://wfmc.org/standards/docs/xpdl_sample/orderschema.xsd"
xref="cardType"/>
</TypeDeclaration>
<TypeDeclaration Id="Order" Name="Order">
<ExternalReference
location="http://wfmc.org/standards/docs/xpdl_sample/orderschema.xsd"
xref="Order"/>
</TypeDeclaration>
<TypeDeclaration Id="CreditInfo" Name="CreditInfo">
<!--<ExternalReference
location="http://wfmc.org/standards/docs/xpdl_sample/creditService.wsdl"
  namespace="http://wfmc.org/standards/docs/xpdl_sample" xref="CreditInfo"/>-->
<ExternalReference
location="http://localhost:8080/obeexamples/services/CreditServicePort?wsdl"
namespace="http://wfmc.org/standards/docs/xpdl_sample" xref="CreditInfo"/>
</TypeDeclaration>
<TypeDeclaration Id="OrderStatus" Name="OrderStatus">
<SchemaType>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="Status">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="ValidData"/>
<xsd:enumeration value="InvalidData"/>
<xsd:enumeration value="Accept"/>
<xsd:enumeration value="BadCredit"/>
<xsd:enumeration value="OverLimit"/>
<xsd:enumeration value="BadDataFormat"/>
</xsd:restriction>
</xsd:simpleType>
<!--
<xsd:element name="Status">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="ValidData"/>
<xsd:enumeration value="InvalidData"/>
<xsd:enumeration value="Accept"/>
<xsd:enumeration value="BadCredit"/>
<xsd:enumeration value="OverLimit"/>
<xsd:enumeration value="BadDataFormat"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
-->
</xsd:schema>
</SchemaType>
</TypeDeclaration>
</TypeDeclarations>
<Participants>
<Participant Id="DBConnection">
<ParticipantType Type="SYSTEM"/>
<Description>Reference to Database Resource</Description>
</Participant>
</Participants>
<Applications>
<Application Id="setCreditInfo">
<Description>Creates and initializes a CreditInfo object.</Description>
<FormalParameters>
<FormalParameter Id="accountNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
<FormalParameter Id="amount" Mode="IN">
<DataType>
<BasicType Type="FLOAT"/>
</DataType>
</FormalParameter>
<FormalParameter Id="cardType" Mode="IN">
<DataType>
<DeclaredType Id="CardType"/>
</DataType>
</FormalParameter>
<FormalParameter Id="creditInfo" Mode="OUT">
<DataType>
<DeclaredType Id="CreditInfo"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="obe.email">
<FormalParameters>
<FormalParameter Id="subject" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
<FormalParameter Id="body" Mode="IN">
<DataType>
<DeclaredType Id="Text"/>
</DataType>
</FormalParameter>
<FormalParameter Id="att" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
<FormalParameter Id="to" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
<FormalParameter Id="cc" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
<FormalParameter Id="bcc" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="obe.velocity">
<FormalParameters>
<FormalParameter Id="template" Mode="IN">
<DataType>
<DeclaredType Id="Text"/>
</DataType>
</FormalParameter>
<FormalParameter Id="resolve" Mode="IN">
<DataType>
<BasicType Type="BOOLEAN"/>
</DataType>
</FormalParameter>
<FormalParameter Id="result" Mode="OUT">
<DataType>
<DeclaredType Id="Text"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
</Applications>
<WorkflowProcesses>
<WorkflowProcess AccessLevel="PUBLIC" Id="wfmc-wf-1" Name="EOrder">
<ProcessHeader/>
<FormalParameters>
<FormalParameter Id="orderString" Mode="IN">
<DataType>
<DeclaredType Id="Text"/>
</DataType>
</FormalParameter>
<FormalParameter Id="returnMessage" Mode="OUT">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
</FormalParameters>
<DataFields>
<DataField Id="orderNumber" IsArray="FALSE">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
<InitialValue>0</InitialValue>
<Length>0</Length>
</DataField>
<DataField Id="body" IsArray="FALSE">
<DataType>
<DeclaredType Id="Text"/>
</DataType>
</DataField>
<DataField Id="status" IsArray="FALSE">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
</DataField>
<DataField Id="orderInfo" IsArray="FALSE">
<DataType>
<DeclaredType Id="Order"/>
</DataType>
</DataField>
</DataFields>
<Applications>
<Application Id="transformData">
<FormalParameters>
<FormalParameter Id="orderString" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
<FormalParameter Id="orderInfo" Mode="OUT">
<DataType>
<DeclaredType Id="Order"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="checkData">
<FormalParameters>
<FormalParameter Id="orderInfo" Mode="IN">
<DataType>
<DeclaredType Id="Order"/>
</DataType>
</FormalParameter>
<FormalParameter Id="status" Mode="OUT">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="checkVendor">
<FormalParameters>
<FormalParameter Id="accountNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
<FormalParameter Id="amount" Mode="IN">
<DataType>
<BasicType Type="FLOAT"/>
</DataType>
</FormalParameter>
<FormalParameter Id="status" Mode="OUT">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="enterOrder">
<FormalParameters>
<FormalParameter Id="orderInfo" Mode="IN">
<DataType>
<DeclaredType Id="Order"/>
</DataType>
</FormalParameter>
<FormalParameter Id="orderNumber" Mode="OUT">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="composeMessage">
<FormalParameters>
<FormalParameter Id="status" Mode="IN">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
</FormalParameter>
<FormalParameter Id="orderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
</Applications>
<Activities>
<Activity Id="1" Name="Check Data">
<Implementation>
<Tool Id="checkData" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderInfo</ActualParameter>
<ActualParameter>status</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<TransitionRestrictions>
<TransitionRestriction>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="22"/>
<TransitionRef Id="23"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="271"/>
<ExtendedAttribute Name="YOffset" Value="100"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="183" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="183" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="5">
<Route/>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="61"/>
<ExtendedAttribute Name="YOffset" Value="100"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="35" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="35" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="6">
<Route/>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="991"/>
<ExtendedAttribute Name="YOffset" Value="115"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="755" ypos="315"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="755" y="315"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="8" Name="EMail Confirmation">
<Implementation>
<Tool Id="obe.velocity" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>
'Your order number ${orderNumber} is being processed. Thank-you for ordering from XYZE Products, Inc.'
</ActualParameter>
<ActualParameter>false()</ActualParameter>
<ActualParameter>body</ActualParameter>
</ActualParameters>
</Tool>
<Tool Id="obe.email" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>concat('XYZE Products Order Number ', $orderNumber)</ActualParameter>
<ActualParameter>$body</ActualParameter>
<ActualParameter/>
<ActualParameter>$orderInfo/Order/@emailAddress/text()</ActualParameter>
<ActualParameter/>
<ActualParameter/>
</ActualParameters>
</Tool>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="721"/>
<ExtendedAttribute Name="YOffset" Value="130"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="657" ypos="312"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="657" y="312"/>
</ExtendedAttribute>
<ExtendedAttribute Name="SystemActivity" Value="Email"/>
<ExtendedAttribute Name="Email">
<xyz:Email subject="Order %%orderNumber" to="%%orderInfo.emailAddress">
<xyz:MessageText>
Order number %%orderNumber is being processed. Thank-you for ordering from XYZE Products, Inc.
</xyz:MessageText>
</xyz:Email>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="9">
<Route/>
<TransitionRestrictions>
<TransitionRestriction>
<Split Type="AND">
<TransitionRefs>
<TransitionRef Id="1"/>
<TransitionRef Id="38"/>
<TransitionRef Id="2"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="601"/>
<ExtendedAttribute Name="YOffset" Value="55"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="572" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="572" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="10" Name="Check Credit Subprocess">
<Implementation>
<SubFlow Execution="SYNCHR" Id="wfmc-wf-3">
<ActualParameters>
<ActualParameter>$orderInfo/Order/@accountNumber/text()</ActualParameter>
<ActualParameter>$orderInfo/Order/@totalAmount/text()</ActualParameter>
<ActualParameter>$orderInfo/Order/@cardType/text()</ActualParameter>
<ActualParameter>status</ActualParameter>
</ActualParameters>
</SubFlow>
</Implementation>
<TransitionRestrictions>
<TransitionRestriction>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="26"/>
<TransitionRef Id="31"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="491"/>
<ExtendedAttribute Name="YOffset" Value="90"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="381" ypos="535"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="381" y="535"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="11" Name="Fill Order Subprocess">
<Implementation>
<SubFlow Execution="ASYNCHR" Id="wfmc-wf-2">
<ActualParameters>
<ActualParameter>$orderNumber</ActualParameter>
<ActualParameter>$orderInfo/Order/@orderType/text()</ActualParameter>
<ActualParameter>$orderInfo/Order/@emailAddress/text()</ActualParameter>
</ActualParameters>
</SubFlow>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="721"/>
<ExtendedAttribute Name="YOffset" Value="20"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="653" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="653" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="12" Name="Check Order Type">
<Route/>
<TransitionRestrictions>
<TransitionRestriction>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="24"/>
<TransitionRef Id="25"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="391"/>
<ExtendedAttribute Name="YOffset" Value="95"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="293" ypos="460"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="293" y="460"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="17" Name="Transform Data">
<Implementation>
<Tool Id="transformData" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderString</ActualParameter>
<ActualParameter>orderInfo</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<TransitionRestrictions>
<TransitionRestriction>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="40"/>
<TransitionRef Id="21"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="161"/>
<ExtendedAttribute Name="YOffset" Value="100"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="102" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="102" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="32" Name="Enter Order">
<Implementation>
<Tool Id="enterOrder" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderInfo</ActualParameter>
<ActualParameter>orderNumber</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="561"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="510" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="510" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="33">
<Route/>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="AND"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="851"/>
<ExtendedAttribute Name="YOffset" Value="75"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="725" ypos="391"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="725" y="391"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="39" Name="Compose Rejection Message">
<Implementation>
<Tool Id="composeMessage" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$status</ActualParameter>
<ActualParameter>-1</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="611"/>
<ExtendedAttribute Name="YOffset" Value="185"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="655" ypos="245"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="655" y="245"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="41" Name="Check Vendor Account">
<Implementation>
<Tool Id="checkVendor" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderInfo/Order/@accountNumber/text()</ActualParameter>
<ActualParameter>$orderInfo/Order/@totalAmount/text()</ActualParameter>
<ActualParameter>status</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<TransitionRestrictions>
<TransitionRestriction>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="27"/>
<TransitionRef Id="30"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="431"/>
<ExtendedAttribute Name="YOffset" Value="55"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="381" ypos="316"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="381" y="316"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="56" Name="Compose Acceptance Message">
<Implementation>
<Tool Id="composeMessage" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$status</ActualParameter>
<ActualParameter>$orderNumber</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="721"/>
<ExtendedAttribute Name="YOffset" Value="75"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="653" ypos="462"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="653" y="462"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="58" Name="Raise Alarm">
<Implementation>
<No/>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="351"/>
<ExtendedAttribute Name="YOffset" Value="180"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="100" ypos="250"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="100" y="250"/>
</ExtendedAttribute>
<ExtendedAttribute Name="SystemActivity" Value="Alarm"/>
</ExtendedAttributes>
</Activity>
</Activities>
<Transitions>
<Transition From="9" Id="1" To="8">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="9" Id="2" To="11">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="11" Id="16" To="33">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="8" Id="17" To="33">
<Condition Type="OTHERWISE"/>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="33" Id="18" To="6">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="5" Id="20" To="17">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="17" Id="21" To="1">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="1" Id="22" To="12">
<Condition>$status = 'ValidData'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="1" Id="23" To="39">
<Condition>$status = 'InvalidData'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="12" Id="24" To="10">
<Condition>$orderInfo/Order/@orderType = 'Credit'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="12" Id="25" To="41">
<Condition>$orderInfo/Order/@orderType = 'PO'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="10" Id="26" To="32">
<Condition>$status = 'Accept'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="41" Id="27" To="32">
<Condition>$status = 'Accept'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="32" Id="28" To="9">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="39" Id="29" To="6">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="41" Id="30" To="39">
<Condition>$status = 'OverLimit'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="10" Id="31" To="39">
<Condition>$status = 'BadCredit'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="9" Id="38" To="56">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="56" Id="39" To="33">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="17" Id="40" To="58">
<Condition Type="EXCEPTION"/>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="58" Id="42" To="39">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
</Transitions>
<ExtendedAttributes>
<ExtendedAttribute Name="obe.Event">
<obe:Event Id="WfMCSalesOrderReceived">
<xpdl:ActualParameters>
<xpdl:ActualParameter>orderString</xpdl:ActualParameter>
</xpdl:ActualParameters>
</obe:Event>
</ExtendedAttribute>
<ExtendedAttribute Name="StartOfWorkflow" Value="FreeTextExpressionParticipant;5;61;20;NOROUTING"/>
<ExtendedAttribute Name="EndOfWorkflow" Value="FreeTextExpressionParticipant;6;1060;30;NOROUTING"/>
<ExtendedAttribute Name="ParticipantVisualOrder" Value="DBConnection;FreeTextExpressionParticipant;"/>
</ExtendedAttributes>
</WorkflowProcess>
<WorkflowProcess AccessLevel="PRIVATE" Id="wfmc-wf-2" Name="FillOrder">
<ProcessHeader/>
<FormalParameters>
<FormalParameter Id="orderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
<Description>Order number assigned to the order.</Description>
</FormalParameter>
<FormalParameter Id="orderType" Mode="IN">
<DataType>
<ExternalReference
location="http://wfmc.org/standards/docs/xpdl_sample/orderschema.xsd"
xref="orderType"/>
</DataType>
</FormalParameter>
<FormalParameter Id="emailAddress" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
</FormalParameters>
<DataFields>
<DataField Id="body" IsArray="FALSE">
<DataType>
<DeclaredType Id="Text"/>
</DataType>
<Description>The body of the receipt or invoice email message.</Description>
</DataField>
<DataField Id="docURI" IsArray="FALSE">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>URI of receipt or invoice.</Description>
</DataField>
<DataField Id="orderStatus" IsArray="FALSE">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
</DataField>
<DataField Id="creditInfo" IsArray="FALSE">
<DataType>
<DeclaredType Id="CreditInfo"/>
</DataType>
</DataField>
<DataField Id="creditStatus" IsArray="FALSE">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</DataField>
</DataFields>
<Participants>
<Participant Id="Shipper">
<ParticipantType Type="ROLE"/>
<Description>Order shipper</Description>
</Participant>
</Participants>
<Applications>
<Application Id="getCreditInfo">
<FormalParameters>
<FormalParameter Id="OrderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
<FormalParameter Id="CreditInfo" Mode="OUT">
<DataType>
<DeclaredType Id="CreditInfo"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="shipOrder">
<Description>This application presents a screen that presents order
information for the order identified by shipOrder. The
user may update the order with any changes such as back
order information. It returns a string indicating
whether the order is complete or on back order.</Description>
<FormalParameters>
<FormalParameter Id="OrderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
<FormalParameter Id="Status" Mode="OUT">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
<Description>The String that describes the status -- either
"Complete" or "Backorder"</Description>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="chargeCreditAccount">
<Description>Charges the credit card and prepares a receipt for a
credit order.</Description>
<ExternalReference
location="http://localhost:8080/obeexamples/services/CreditServicePort?wsdl"
namespace="http://wfmc.org/standards/docs/xpdl_sample"
xref="chargeCreditAccount"/>
</Application>
<Application Id="billAccount">
<Description>Bills the vendor account</Description>
<FormalParameters>
<FormalParameter Id="orderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="createInvoice">
<Description>Creates an invoice using the order information and stores it on a server.</Description>
<FormalParameters>
<FormalParameter Id="orderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
<FormalParameter Id="docURI" Mode="OUT">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="createReceipt">
<Description>Creates a receipt using the order information and stores it on a server.</Description>
<FormalParameters>
<FormalParameter Id="orderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
<FormalParameter Id="docURI" Mode="OUT">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="cancelOrder">
<FormalParameters>
<FormalParameter Id="orderNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
</Applications>
<Activities>
<Activity Id="21">
<Route/>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="71"/>
<ExtendedAttribute Name="YOffset" Value="90"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="62" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="62" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="22" Name="Billing">
<Implementation>
<Tool Id="billAccount" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderNumber</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="241"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="347" ypos="435"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="347" y="435"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="23" Name="Charge Credit Card">
<Implementation>
<Tool Id="chargeCreditAccount" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$creditInfo</ActualParameter>
<ActualParameter>creditStatus</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="351"/>
<ExtendedAttribute Name="YOffset" Value="125"/>
<ExtendedAttribute Name="SystemActivity" Value="WebService"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="386" ypos="338"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="386" y="338"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="30">
<Route/>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="531"/>
<ExtendedAttribute Name="YOffset" Value="10"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="613" ypos="389"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="613" y="389"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="31" Name="EMail Receipt or Invoice">
<Implementation>
<Tool Id="obe.velocity" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>
'Order number ${orderNumber} is ${orderStatus}. Your receipt or invoice can be viewed at ${docURI}. Thank-you for ordering from XYZE Products, Inc.'
</ActualParameter>
<ActualParameter>false()</ActualParameter>
<ActualParameter>body</ActualParameter>
</ActualParameters>
</Tool>
<Tool Id="obe.email" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>concat('XYZE Products Order Number ', $orderStatus)</ActualParameter>
<ActualParameter>$body</ActualParameter>
<ActualParameter>$docURI</ActualParameter>
<ActualParameter>$emailAddress</ActualParameter>
<ActualParameter/>
<ActualParameter/>
</ActualParameters>
</Tool>
</Implementation>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="511"/>
<ExtendedAttribute Name="YOffset" Value="80"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="430" ypos="385"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="430" y="385"/>
</ExtendedAttribute>
<ExtendedAttribute Name="SystemActivity" Value="Email"/>
<ExtendedAttribute Name="Email">
<xyz:Email subject="%%orderStatus" to="%%emailAddress">
<xyz:Attachments>
<xyz:Attachment>%%docURI</xyz:Attachment>
</xyz:Attachments>
<xyz:MessageText>
Order number %%orderNumber is %%orderStatus. Thank-you for ordering from XYZE Products, Inc.
</xyz:MessageText>
</xyz:Email>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="36" Name="Ship Order">
<Description>View order and enter fulfillment info</Description>
<Implementation>
<Tool Id="shipOrder" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderNumber</ActualParameter>
<ActualParameter>orderStatus</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<Deadline Execution="ASYNCHR">
<DeadlineCondition>3D</DeadlineCondition>
<ExceptionName>notifyException</ExceptionName>
</Deadline>
<Deadline Execution="SYNCHR">
<DeadlineCondition>5D</DeadlineCondition>
<ExceptionName>timeoutException</ExceptionName>
</Deadline>
<TransitionRestrictions>
<TransitionRestriction>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="11"/>
<TransitionRef Id="10"/>
<TransitionRef Id="49"/>
<TransitionRef Id="50"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="121"/>
<ExtendedAttribute Name="YOffset" Value="55"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="133" ypos="386"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="133" y="386"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="59" Name="Get Credit Info">
<Implementation>
<Tool Id="getCreditInfo" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderNumber</ActualParameter>
<ActualParameter>creditInfo</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="241"/>
<ExtendedAttribute Name="YOffset" Value="120"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="311" ypos="338"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="311" y="338"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="60" Name="Create Invoice">
<Implementation>
<Tool Id="createInvoice" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderNumber</ActualParameter>
<ActualParameter>docURI</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="351"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="460" ypos="435"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="460" y="435"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="61" Name="Create Receipt">
<Implementation>
<Tool Id="createReceipt" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderNumber</ActualParameter>
<ActualParameter>docURI</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="451"/>
<ExtendedAttribute Name="YOffset" Value="125"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="461" ypos="338"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="461" y="338"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="63" Name="Raise Alarm">
<Implementation>
<No/>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="241"/>
<ExtendedAttribute Name="YOffset" Value="45"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="83" ypos="271"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="83" y="271"/>
</ExtendedAttribute>
<ExtendedAttribute Name="SystemActivity" Value="Alarm"/>
</ExtendedAttributes>
</Activity>
<Activity Id="64" Name="Cancel Order">
<Description>View order and enter fulfillment info</Description>
<Implementation>
<Tool Id="cancelOrder" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$orderNumber</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="241"/>
<ExtendedAttribute Name="YOffset" Value="5"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="174" ypos="271"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="174" y="271"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
</Activities>
<Transitions>
<Transition From="21" Id="8" To="36">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="36" Id="10" To="22">
<Condition>$orderType = 'PO'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="36" Id="11" To="59">
<Condition>$orderType = 'Credit'</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="60" Id="13" To="31">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="61" Id="14" To="31">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="31" Id="15" To="30">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="59" Id="43" To="23">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="23" Id="44" To="61">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="22" Id="45" To="60">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="36" Id="49" To="63">
<Condition Type="EXCEPTION">notifyException</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="36" Id="50" To="64">
<Condition Type="EXCEPTION">timeoutException</Condition>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="64" Id="51" To="30">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
</Transitions>
<ExtendedAttributes>
<ExtendedAttribute Name="StartOfWorkflow" Value="FreeTextExpressionParticipant;21;51;10;NOROUTING"/>
<ExtendedAttribute Name="EndOfWorkflow" Value="FreeTextExpressionParticipant;63;360;50;NOROUTING"/>
<ExtendedAttribute Name="EndOfWorkflow" Value="FreeTextExpressionParticipant;30;660;20;NOROUTING"/>
<ExtendedAttribute Name="ParticipantVisualOrder" Value="FreeTextExpressionParticipant;DBConnection;"/>
</ExtendedAttributes>
</WorkflowProcess>
<WorkflowProcess AccessLevel="PRIVATE" Id="wfmc-wf-3" Name="CreditCheck">
<ProcessHeader/>
<FormalParameters>
<FormalParameter Id="accountNumber" Mode="IN">
<DataType>
<BasicType Type="INTEGER"/>
</DataType>
</FormalParameter>
<FormalParameter Id="amount" Mode="IN">
<DataType>
<BasicType Type="FLOAT"/>
</DataType>
</FormalParameter>
<FormalParameter Id="cardType" Mode="IN">
<DataType>
<DeclaredType Id="CardType"/>
</DataType>
</FormalParameter>
<FormalParameter Id="status" Mode="OUT">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
</FormalParameter>
</FormalParameters>
<DataFields>
<DataField Id="creditInfo" IsArray="FALSE">
<DataType>
<DeclaredType Id="CreditInfo"/>
</DataType>
</DataField>
<DataField Id="creditStatus" IsArray="FALSE">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Length>0</Length>
</DataField>
</DataFields>
<Applications>
<Application Id="getCreditAuthorization">
<Description>Gets credit authorization from a charge card web service.</Description>
<ExternalReference
location="http://localhost:8080/obeexamples/services/CreditServicePort?wsdl"
  namespace="http://wfmc.org/standards/docs/xpdl_sample"
 xref="getCreditAuthorization"/>
</Application>
<Application Id="setOrderStatus">
<Description>Converts status returned by credit check to OrderStatus.</Description>
<FormalParameters>
<FormalParameter Id="creditStatus" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</FormalParameter>
<FormalParameter Id="orderStatus" Mode="OUT">
<DataType>
<DeclaredType Id="OrderStatus"/>
</DataType>
</FormalParameter>
</FormalParameters>
</Application>
</Applications>
<Activities>
<Activity Id="48">
<Route/>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="121"/>
<ExtendedAttribute Name="YOffset" Value="55"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="61" ypos="395"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="61" y="395"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="49" Name="Set Credit Info">
<Implementation>
<Tool Id="setCreditInfo" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$accountNumber</ActualParameter>
<ActualParameter>$amount</ActualParameter>
<ActualParameter>$cardType</ActualParameter>
<ActualParameter>creditInfo</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DBConnection</Performer>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DBConnection"/>
<ExtendedAttribute Name="XOffset" Value="191"/>
<ExtendedAttribute Name="YOffset" Value="45"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="151" ypos="394"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="151" y="394"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="50" Name="Get Credit Authorization">
<Implementation>
<Tool Id="getCreditAuthorization" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$creditInfo</ActualParameter>
<ActualParameter>creditStatus</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="291"/>
<ExtendedAttribute Name="YOffset" Value="55"/>
<ExtendedAttribute Name="SystemActivity" Value="WebService"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="253" ypos="394"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="253" y="394"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="52">
<Route/>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="541"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="444" ypos="397"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="444" y="397"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
<Activity Id="62" Name="Set Order Status">
<Implementation>
<Tool Id="setOrderStatus" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>$creditStatus</ActualParameter>
<ActualParameter>status</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="FreeTextExpressionParticipant"/>
<ExtendedAttribute Name="XOffset" Value="421"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
<ExtendedAttribute Name="Coordinates">
<xyz:Coordinates xpos="361" ypos="394"/>
</ExtendedAttribute>
<ExtendedAttribute Name="obe.Bounds">
<obe:Bounds x="361" y="394"/>
</ExtendedAttribute>
</ExtendedAttributes>
</Activity>
</Activities>
<Transitions>
<Transition From="50" Id="35" To="62">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="48" Id="46" To="49">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="49" Id="47" To="50">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="62" Id="48" To="52">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
</Transitions>
<ExtendedAttributes>
<ExtendedAttribute Name="StartOfWorkflow" Value="FreeTextExpressionParticipant;48;51;50;NOROUTING"/>
<ExtendedAttribute Name="EndOfWorkflow" Value="FreeTextExpressionParticipant;52;670;60;NOROUTING"/>
<ExtendedAttribute Name="ParticipantVisualOrder" Value="DBConnection;FreeTextExpressionParticipant;"/>
</ExtendedAttributes>
</WorkflowProcess>
</WorkflowProcesses>
<ExtendedAttributes>
<ExtendedAttribute Name="MadeBy" Value="JaWE"/>
<ExtendedAttribute Name="Version" Value="1.2"/>
</ExtendedAttributes>
</Package>

Solution Files

See the solution files under $OBE_HOME/examples:

Deployment and Execution

The EOrder workflow supports both manual and triggered start.