Document Approval Chain Example

Use Case

The ABC Corporation regularly receives RFQs (Request for Quotation) for custom work from prospective clients. A sales person is assigned to analyse the client's requirements and prepare a quotation document: before the tender document is submitted it requires a chain of approvals at various levels within the company. The following groups or persons are required to approve the document, in order: Each approver can either reject or approve the document, citing a reason. They each have three working days in which to approve the document – if they have not done so by then, the workflow system automatically routes the document to the next approver. If the document is rejected, the workflow system re-routes it to the previous person in the chain.

Whenever such a Proposal Document is created, the electronic document management system automatically initiates a workflow process, passing the HTTP URL of the new document and the user ID of the creator. The participants of the document approval process use the corporate standard office software to view and edit the document via WEBDAV. The workflow management system has been configured with a tool agent to launch the office software. The web browser is used to record the reviewer's decision.

Interfaces

Applications

  1. Approval Form: updateProcessAttributes(INOUT STRING attr)
  2. Web browser: browser(IN STRING url)
  3. Document launcher: obe.viewDocument(IN STRING docUri), obe.editDocument(IN STRING docUri)

Hints

Questions

  1. What happens if the timeout period spans a weekend or holiday?

Solution

Process Model Description

Document approval workflow diagram

XPDL Process Model

<?xml version="1.0" encoding="UTF-8"?>
<Package Id="document-approval" Name="Document Approval" xmlns="http://www.wfmc.org/2002/XPDL1.0" xmlns:xpdl="http://www.wfmc.org/2002/XPDL1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>Open Business Engine</Vendor>
<Created>2004-08-08 15:56:04</Created>
</PackageHeader>
<RedefinableHeader PublicationStatus="UNDER_TEST"/>
<ConformanceClass GraphConformance="NON_BLOCKED"/>
<Script Type="text/x-xpath" Version="1.0"/>
<TypeDeclarations>
</TypeDeclarations>
<WorkflowProcesses>
<WorkflowProcess AccessLevel="PUBLIC" Id="doc-appro" Name="Document Approval">
<ProcessHeader DurationUnit="D">
<Created>2004-08-08 15:57:34</Created>
<Description>Drives the process of approving a document.</Description>
</ProcessHeader>
<RedefinableHeader PublicationStatus="UNDER_TEST">
<Author>Adrian Price</Author>
</RedefinableHeader>
<FormalParameters>
<FormalParameter Id="docUri" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>The URI of the document under review.</Description>
</FormalParameter>
</FormalParameters>
<DataFields>
<DataField Id="peerApproved" IsArray="FALSE">
<DataType>
<BasicType Type="BOOLEAN"/>
</DataType>
</DataField>
<DataField Id="peerComments" IsArray="FALSE">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</DataField>
<DataField Id="vpSalesApproved" IsArray="FALSE">
<DataType>
<BasicType Type="BOOLEAN"/>
</DataType>
</DataField>
<DataField Id="vpSalesComments" IsArray="FALSE">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</DataField>
<DataField Id="dirCommsApproved" IsArray="FALSE">
<DataType>
<BasicType Type="BOOLEAN"/>
</DataType>
</DataField>
<DataField Id="dirCommsComments" IsArray="FALSE">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</DataField>
<DataField Id="ceoApproved" IsArray="FALSE">
<DataType>
<BasicType Type="BOOLEAN"/>
</DataType>
</DataField>
<DataField Id="ceoComments" IsArray="FALSE">
<DataType>
<BasicType Type="STRING"/>
</DataType>
</DataField>
</DataFields>
<Participants>
<Participant Id="Submittor" Name="Document Submittor">
<ParticipantType Type="ROLE"/>
<Description>This role represents the person submitting the document for approval.</Description>
</Participant>
<Participant Id="Sales" Name="Peer reviewers in Sales Dept.">
<ParticipantType Type="ORGANIZATIONAL_UNIT"/>
</Participant>
<Participant Id="VPSales" Name="Vice President of Sales">
<ParticipantType Type="ROLE"/>
</Participant>
<Participant Id="DirCom" Name="Director of Communications">
<ParticipantType Type="ROLE"/>
</Participant>
<Participant Id="CEO" Name="Chief Executive Officer">
<ParticipantType Type="ROLE"/>
</Participant>
</Participants>
<Applications>
<Application Id="browser" Name="Web Browser">
<Description>
This tool agent uses the shell file associations of the
underlying platform to invoke the appropriate editor for
the document type referred to in the supplied URL. The
URL can be that of a web application, external web site,
a file in a WebDAV document repository. Basically, any
resource that can be accessed through a URL and for
which the host browser has a protocol handler registered.
N.B. The browser also acts as a document launcher - there
is no need for the separate 'start' tool referred to in
the original exercise description.
</Description>
<FormalParameters>
<FormalParameter Id="url" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>The URL of the document or web application to open.</Description>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="obe.editDocument" Name="Document Editor">
<!-- <ExternalReference location="obe.editDocument"/>-->
<FormalParameters>
<FormalParameter Id="url" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>The URL of the document or web application to open.</Description>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="obe.viewDocument" Name="Document Viewer">
<!-- <ExternalReference location="obe.viewDocument"/>-->
<FormalParameters>
<FormalParameter Id="url" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>The URL of the document or web application to open.</Description>
</FormalParameter>
</FormalParameters>
</Application>
<Application Id="obe.updateProcessAttributes" Name="Update Process Attributes">
<Description>Displays a form to allow process variables to be updated.</Description>
<ExternalReference location="obe.updateProcessAttributes"/>
</Application>
<Application Id="obe.assignProcessAttribute">
<Description>This procedure sets a process instance attribute.</Description>
<FormalParameters>
<FormalParameter Id="attrName" Mode="OUT">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>The name of the process instance attribute.</Description>
</FormalParameter>
<FormalParameter Id="attrValue" Mode="IN">
<DataType>
<BasicType Type="STRING"/>
</DataType>
<Description>The value to assign attribute.</Description>
</FormalParameter>
</FormalParameters>
</Application>
</Applications>
<Activities>
<Activity Id="a10" Name="Route">
<Description>This route activity is present because XPDL does not permit a loopback to the start activity.</Description>
<Route/>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="Submittor"/>
<ExtendedAttribute Name="XOffset" Value="150"/>
<ExtendedAttribute Name="YOffset" Value="40"/>
</ExtendedAttributes>
</Activity>
<Activity Id="edit-doc" Name="Edit Document">
<Implementation>
<Tool Id="obe.editDocument" Type="APPLICATION">
<ActualParameters>
<ActualParameter>$docUri</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>Submittor</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="Submittor"/>
<ExtendedAttribute Name="XOffset" Value="270"/>
<ExtendedAttribute Name="YOffset" Value="40"/>
</ExtendedAttributes>
</Activity>
<Activity Id="peer-rev" Name="Peer Review">
<Limit>3D</Limit>
<Implementation>
<Tool Id="obe.viewDocument" Type="APPLICATION">
<ActualParameters>
<ActualParameter>$docUri</ActualParameter>
</ActualParameters>
</Tool>
<Tool Id="obe.updateProcessAttributes" Type="APPLICATION">
<ActualParameters>
<ActualParameter>peerApproved</ActualParameter>
<ActualParameter>peerComments</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>Sales</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Deadline Execution="SYNCHR">
<DeadlineCondition>3D</DeadlineCondition>
<ExceptionName>timeout</ExceptionName>
</Deadline>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="peer-rej"/>
<TransitionRef Id="peer-app"/>
<TransitionRef Id="peer-tmo"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="Sales"/>
<ExtendedAttribute Name="XOffset" Value="380"/>
<ExtendedAttribute Name="YOffset" Value="50"/>
<ExtendedAttribute Name="obe.ToolMode" Value="PARALLEL"/>
</ExtendedAttributes>
</Activity>
<Activity Id="a6" Name="(peer timeout)">
<Implementation>
<Tool Id="obe.assignProcessAttribute" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>peerComments</ActualParameter>
<ActualParameter>'(timed out)'</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="Sales"/>
<ExtendedAttribute Name="XOffset" Value="490"/>
<ExtendedAttribute Name="YOffset" Value="50"/>
</ExtendedAttributes>
</Activity>
<Activity Id="vp-sales-rev" Name="VP Sales Review">
<Limit>3D</Limit>
<Implementation>
<Tool Id="obe.viewDocument" Type="APPLICATION">
<ActualParameters>
<ActualParameter>$docUri</ActualParameter>
</ActualParameters>
</Tool>
<Tool Id="obe.updateProcessAttributes" Type="APPLICATION">
<ActualParameters>
<ActualParameter>vpSalesApproved</ActualParameter>
<ActualParameter>vpSalesComments</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>VPSales</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Deadline Execution="SYNCHR">
<DeadlineCondition>3D</DeadlineCondition>
<ExceptionName>timeout</ExceptionName>
</Deadline>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="vp-sales-rej"/>
<TransitionRef Id="vp-sales-app"/>
<TransitionRef Id="vp-sales-tmo"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="VPSales"/>
<ExtendedAttribute Name="XOffset" Value="490"/>
<ExtendedAttribute Name="YOffset" Value="50"/>
<ExtendedAttribute Name="obe.ToolMode" Value="PARALLEL"/>
</ExtendedAttributes>
</Activity>
<Activity Id="a7" Name="(vp sales timeout)">
<Implementation>
<Tool Id="obe.assignProcessAttribute" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>vpSalesComments</ActualParameter>
<ActualParameter>'(timed out)'</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="VPSales"/>
<ExtendedAttribute Name="XOffset" Value="620"/>
<ExtendedAttribute Name="YOffset" Value="50"/>
</ExtendedAttributes>
</Activity>
<Activity Id="dc-rev" Name="Director of Communications Review">
<Limit>3D</Limit>
<Implementation>
<Tool Id="obe.viewDocument" Type="APPLICATION">
<ActualParameters>
<ActualParameter>$docUri</ActualParameter>
</ActualParameters>
</Tool>
<Tool Id="obe.updateProcessAttributes" Type="APPLICATION">
<ActualParameters>
<ActualParameter>dirCommsApproved</ActualParameter>
<ActualParameter>dirCommsComments</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>DirCom</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<Deadline Execution="SYNCHR">
<DeadlineCondition>3D</DeadlineCondition>
<ExceptionName>timeout</ExceptionName>
</Deadline>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="dir-comm-app"/>
<TransitionRef Id="dir-comm-tmo"/>
<TransitionRef Id="dir-comm-rej"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DirCom"/>
<ExtendedAttribute Name="XOffset" Value="620"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
<ExtendedAttribute Name="obe.ToolMode" Value="PARALLEL"/>
</ExtendedAttributes>
</Activity>
<Activity Id="a8" Name="(dir comms timeout)">
<Implementation>
<Tool Id="obe.assignProcessAttribute" Type="PROCEDURE">
<ActualParameters>
<ActualParameter>dirCommsComments</ActualParameter>
<ActualParameter>'(timed out)'</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="DirCom"/>
<ExtendedAttribute Name="XOffset" Value="750"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
</ExtendedAttributes>
</Activity>
<Activity Id="ceo-rev" Name="Chief Executive Officer Review">
<Limit>3D</Limit>
<Implementation>
<Tool Id="obe.viewDocument" Type="APPLICATION">
<ActualParameters>
<ActualParameter>$docUri</ActualParameter>
</ActualParameters>
</Tool>
<Tool Id="obe.updateProcessAttributes" Type="APPLICATION">
<ActualParameters>
<ActualParameter>ceoApproved</ActualParameter>
<ActualParameter>ceoComments</ActualParameter>
</ActualParameters>
</Tool>
</Implementation>
<Performer>CEO</Performer>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<TransitionRestrictions>
<TransitionRestriction>
<Join Type="XOR"/>
<Split Type="XOR">
<TransitionRefs>
<TransitionRef Id="ceo-app"/>
<TransitionRef Id="ceo-rej"/>
</TransitionRefs>
</Split>
</TransitionRestriction>
</TransitionRestrictions>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="CEO"/>
<ExtendedAttribute Name="XOffset" Value="750"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
<ExtendedAttribute Name="obe.ToolMode" Value="PARALLEL"/>
</ExtendedAttributes>
</Activity>
<Activity Id="a11" Name="Route">
<Description>This route activity is present because XPDL does not permit a loopback from the exit activity.</Description>
<Route/>
<StartMode>
<Automatic/>
</StartMode>
<FinishMode>
<Automatic/>
</FinishMode>
<ExtendedAttributes>
<ExtendedAttribute Name="ParticipantID" Value="CEO"/>
<ExtendedAttribute Name="XOffset" Value="920"/>
<ExtendedAttribute Name="YOffset" Value="60"/>
</ExtendedAttributes>
</Activity>
</Activities>
<Transitions>
<Transition From="a10" Id="t15" Name="Transition" To="edit-doc">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="edit-doc" Id="submit" Name="Document Submitted" To="peer-rev">
<Description>The originator submits the document for peer review.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="peer-rev" Id="peer-rej" Name="Peers Rejected" To="edit-doc">
<Condition Type="OTHERWISE"/>
<Description>The Peer Reviewers have rejected the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
<ExtendedAttribute Name="BreakPoint" Value="310;220;1"/>
</ExtendedAttributes>
</Transition>
<Transition From="peer-rev" Id="peer-app" Name="Peers Approved" To="vp-sales-rev">
<Condition Type="CONDITION">$peerApproved</Condition>
<Description>The peer reviewers have approved the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="peer-rev" Id="peer-tmo" Name="Peer Review Timed Out" To="a6">
<Condition Type="EXCEPTION">timeout</Condition>
<Description>This transition is fired when the 3-day deadline expires.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="a6" Id="t11" To="vp-sales-rev">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="vp-sales-rev" Id="vp-sales-app" Name="VP Sales Approved" To="dc-rev">
<Condition Type="CONDITION">$vpSalesApproved</Condition>
<Description>The VP of Sales has approved the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="vp-sales-rev" Id="vp-sales-rej" Name="VP Sales Rejected" To="peer-rev">
<Condition Type="OTHERWISE"/>
<Description>The VP of Sales has rejected the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
<ExtendedAttribute Name="BreakPoint" Value="420;370;1"/>
</ExtendedAttributes>
</Transition>
<Transition From="vp-sales-rev" Id="vp-sales-tmo" Name="VP Sales Review Timed Out" To="a7">
<Condition Type="EXCEPTION">timeout</Condition>
<Description>This transition is fired when the 3-day deadline expires.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="a7" Id="t12" To="dc-rev">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="dc-rev" Id="dir-comm-app" Name="Director of Comms Approved" To="ceo-rev">
<Condition Type="CONDITION">$dirCommsApproved</Condition>
<Description>The Director of Communications has approved the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="dc-rev" Id="dir-comm-rej" Name="Dir Comms Rejected" To="vp-sales-rev">
<Condition Type="OTHERWISE"/>
<Description>The Director of Communications has rejected the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
<ExtendedAttribute Name="BreakPoint" Value="530;530;1"/>
</ExtendedAttributes>
</Transition>
<Transition From="dc-rev" Id="dir-comm-tmo" Name="Director of Communications Review Timed Out" To="a8">
<Condition Type="EXCEPTION">timeout</Condition>
<Description>This transition is fired when the 3-day deadline expires.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="a8" Id="t13" To="ceo-rev">
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="ceo-rev" Id="ceo-app" Name="CEO Approved" To="a11">
<Condition Type="CONDITION">$ceoApproved</Condition>
<Description>The Chief Executive Officer has approved the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
</ExtendedAttributes>
</Transition>
<Transition From="ceo-rev" Id="ceo-rej" Name="CEO Rejected" To="dc-rev">
<Condition Type="OTHERWISE"/>
<Description>The Chief Executive Officer has rejected the document.</Description>
<ExtendedAttributes>
<ExtendedAttribute Name="RoutingType" Value="NOROUTING"/>
<ExtendedAttribute Name="BreakPoint" Value="660;680;1"/>
</ExtendedAttributes>
</Transition>
</Transitions>
<ExtendedAttributes>
<!-- Workflow can be triggered by the creation of a new document via WebDAV. -->
<ExtendedAttribute Name="obe.Event">
<obe:Event Id="DocumentCreated">
<xpdl:ActualParameters>
<xpdl:ActualParameter>docUri</xpdl:ActualParameter>
</xpdl:ActualParameters>
</obe:Event>
</ExtendedAttribute>
<ExtendedAttribute Name="StartOfWorkflow" Value="Submittor;doc-appro_Act10;60;40;NOROUTING"/>
<ExtendedAttribute Name="EndOfWorkflow" Value="CEO;a11;1070;60;NOROUTING"/>
<ExtendedAttribute Name="ParticipantVisualOrder" Value="Submittor;Sales;VPSales;DirCom;CEO;"/>
</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

Since the workflow involves structured interactions with a document, you need to have an installed application that's registered for the document's file type (e.g., OpenOffice for *.sxw files, MS-Word for *.doc files). Because this workflow assumes a WebDAV store it is best executed in the OBE J2EE server, which embeds such a store (implemented by Jakarta Slide), rather than using the standalone workflow engine. Tip: OpenOffice and Microsoft Office both allow you to save and retrieve documents directly to/from a WebDAV URL. When uploading to WebDAV, OpenOffice distinguishes document creations from document updates, causing Jakarta Slide to raise create and store respectively. The $OBE_HOME/examples/config/BasicApplicationEventBroker.xml file delivered with the OBE examples captures these Slide events into the DocumentCreated and DocumentStored OBE application events respectively. The document-approval example workflow is triggered by the DocumentCreated event.

Microsoft Office, however, does not distinguish between create and update: it only ever causes store Slide events (corresponding to DocumentStored OBE events). Thus MS Word, for example, is incapable of triggering the document-approval workflow as is. If you wish to use MS Word to trigger this workflow, amend the <xpdl:ExtendedAttribute name="obe.Event"> element to react to the DocumentStored event instead. Be aware though that doing this will cause the erroneous instantiation of the workflow when an existing document is just being updated. This dilemma is under investigation: it's possible that Slide can be amended to make the create/store distinction automatically.