The Tasklist itself is not modeled, in order to reduce complexity.
These message flows encapsulate the manual steps which the approver needs to perform in order to complete the user task. The interaction between the user tasks in the engine and between the manual process of the approvers is modeled using message flows. These user tasks correspond to the tasks which are shown in the Tasklist of the 1st and the 2nd approver. This way, we can clearly define who is in control of which process. We use separate pools for the Process Engine, for the 1st Approver and for the 2nd Approver. Here are some examples:ġst Approver Approval requested evaluate request document and submit decision task completed Process Engine Approval requested decide on approval (1st stage) approved? request rejected (1st stage) decide on approval (2nd stage) approved? request rejected (2nd stage) request approved 2nd Approver Approval requested evaluate request document and submit decision task completed no yes yes no Explanation The use cases for this pattern are numerous. The approval decision is performed using a portal with a Tasklist.
The manual steps that are performed by the two approvers should also be modeled in the BPMN diagram. A Process Engine should ensure that both approvals are fulfilled before the request is approved. For a request (e.g., a payment) two approvals of two different people are needed. We want to model the following situation using BPMN 2.0. The downside is that this might cause delays and overhead due to the loop. The instance itself checks periodicity if it can proceed to the credit check. In this example we do not need any communication between instances. Solution with Signal EventĬreditworthiness Check Check requested check for running instances (of same customer) running instances of same customer? perform credit check wait some time credit check performed Engine Database no yes Explanation What all solutions have in common is that every new instance needs to check for concurring instances on the data level before starting the actual credit check. Let’s assume that we are running a credit check for a customer and we get a second request for the same customer at the same time. The reason could be that the total number of credit checks performed influences the result of the check. If one credit check of a customer is running, we do not want another credit check for the same customer to be performed at the same time. Let’s say we want to model a process with concurring instances. Create Bill Compute 2% discount add an extra 1% discount customer type? Bill requested Sum of order? customer type? Create bill Bill created Compute 3% discount Compute 4% discount customer type? add an extra 1% discount add an extra 1% discount 1000 – 1500 500 – 999 >2000 < 500 Type A Type A Type A ordinary ordinary ordinary