Pattern |
Rating |
Motivation |
| Sequence |
+ |
Directly supported by arcs (drawn as lines from left to right) connecting steps. |
| Parallel Split |
+ |
Supported through a step construct that has multiple outgoing arcs. |
| Synchronization |
+ |
Supported through the wait step construct. Note that the wait step has one preceding step (solid line) and possibly multiple steps it is waiting for (dashed lines). The difference between the preceding step and the steps it is waiting for becomes only visible in a loop situation. In a loop the wait step only waits for the preceding step (solid line) and no longer has to wait for the other steps. The only way to get a "normal" synchronization is a loop is to explicitly reset the step in a loop using the "SETSETSTATUS" function. |
| Exclusive Choice |
+ |
Supported through the condition construct modeling a binary decision. The decision is evaluated using a Boolean function and has only one or two outgoing arcs. |
Simple Merge |
+ |
Supported through a step construct that has multiple input arcs. Also a router can be used to model such a join. Note that Staffware only merges flows that are safe, i.e., if multiple triggers arrive at a step, only one trigger is retained. |
| Multi-Choice |
- |
Not supported. The condition construct can only model a binary decision. |
| Structured Synchronizing Merge |
- |
Not supported. The wait step synchronizes flows and all other steps get enabled after receiving the first trigger. |
| Multi-Merge |
- |
Not supported. It is not possible to trigger a step twice. Where this occurs, the second thread cancels the first twice. |
| Structured Discriminator |
- |
Not supported. |
| Arbitrary Cycles |
+ |
In general, unstructured loops are supported although there are some syntactical limitations. |
| Implicit Termination |
+ |
Directly supported. A workflow case terminates if all of its branches have terminated. A stop symbol can be used to indicate the end of each branch. |
| Multiple Instances without Synchronization |
+ |
Staffware supported static and dynamic subprocedure steps. The static subprocedure step is simply a step corresponding to a subprocess. When Staffware processes a dynamic sub-procedure step, it looks at the array field that has been defined for the sub-procedures to start. This array field may contain no data (i.e. no sub-procedures need to be started) or multiple data elements (i.e. multiple sub-procedures need to be started) concurrently |
| Multiple Instances with a Priori Design-Time Knowledge |
+ |
Supported using the dynamic subprocedure step. |
| Multiple Instances with a Priori Run-Time Knowledge |
+ |
Supported using the dynamic subprocedure step. |
| Multiple Instances without a Priori Run-Time Knowledge |
- |
Not supported. The number of instances is based on the array values at the moment the step is executed and cannot be changed later. |
| Deferred Choice |
- |
Not supported. No state support in the process model. Although there is a workaround based on a parallel split and withdraw actions, it is not safe. |
| Interleaved Parallel Routing |
- |
Not supported. There is no way to interleave steps without specifying an order. |
| Milestone |
- |
Not supported. There is no notion of state. |
| Cancel Activity |
+ |
Supported through the withdraw construct, i.e., a line entering a step from above. |
| Cancel Case |
- |
Not directly supported, steps can be called via API calls. |
| Structured Loop |
- |
Not supported. Loops can only be created in the graphical editor. |
| Recursion |
+ |
Using the dynamic subprocedure step it is possible to call any procedure. However, it is unclear whether this is inadvertant rather than intended behaviour (i.e. a backdoor). |
| Transient Trigger |
+ |
The event step construct allows external signals to trigger steps, cases and also to resume suspended steps. |
Persistent Trigger |
- |
Not supported. However, by adding a dummy step, a transient trigger can be made persistent. |
| Cancel Region |
- |
Not supported. Although steps can withdrawn (providing they have not already commenced), it is not possible to specify a region, i.e., a withdraw for each individual step is required and complications may occur in regard to routing elements (e.g., wait steps). |
| Cancel Multiple Instance Activity |
+ |
It is possible to withdraw subprocedure steps. However, in this case the sub-procedure is terminated prematurely without transferring any data back. |
| Complete Multiple Instance Activity |
- |
Not supported. |
| Blocking Discriminator |
- |
Not supported. Only the XOR-join and AND-join are possible using normal steps and wait steps respectively. |
| Cancelling Discriminator |
- |
Not supported. |
| Structured N-out-of-M Join |
- |
Not supported. |
| Blocking N-out-of-M Join |
- |
Not supported. |
| Cancelling N-out-of-M Join |
- |
Although simple versions of this pattern (e.g. 1-out-of-2 join) can constructed using withdrawn action, the solution is not safe and does not scale up well to more complex joins. |
| Generalised AND-Join |
- |
Not supported. Although join constructs require triggering on all branches, subsequent triggers received on branches before the join has completed are lost. |
| Static Partial Join for Multiple Instances |
- |
Not supported. The dynamic subprocedure is specified using an array. It is only stopped after a failure or a withdraw of the complete subprocedure. There is no way to pass on control either. |
| Cancelling Partial Join for Multiple Instances |
- |
Not supported. |
| Dynamic Partial Join for Multiple Instances |
- |
Not supported. |
| Acyclic Synchronizing Merge |
- |
Not supported. The concept of a step waiting for all preceding activities to finish when they are optional is not possible in any form. |
| General Synchronizing Merge |
- |
Not supported. |
| Critical Section |
- |
Not supported. Since Staffware always immediately schedules subsequent activities, there is no way of temporarily blocking them. Note that withdrawing a step does not solve the problem. |
| Interleaved Routing |
- |
Not supported. The only way to model this is to enumerate sequences and explicitly select paths through conditions. |
| Thread Merge |
- |
No support for user-specified thread merging. The system automatically merges distinct control threads which reach the same step in a process instance. |
| Thread Split |
- |
No support for user-specified thread merging. The system automatically merges distinct control threads which reach the same step in a process instance. |
| Explicit Termination |
- |
Not supported. A workflow case terminates when all of its branches have terminated. |