Hi, I am struggling to model a requirement I have and need some help please.
The requirement goes something like this:
[1] A new request is reviewed by a list of approvers (concurrently)
[2] If any approver rejects the request then the overall request is rejected
[3] A response from each approver is required before making the overall decision (no short circuit on a “reject”)
[3] Whilst waiting for responses, additional approvers can be added
I had imagined a process like below. A process variable has a list of approvers and runs a multi-instance user task asking for the approval decision. If new approvers are added whilst the multi-instance is in flight then have a non-interupting flow that would instantiate another multi-instance review task.
Am I going in the right direction here?
What happens in the conditional intermediate catching event - how can I model that everyone has provided a response and what happens when multiple tokens are waiting on the condition once it is met - I really only want one token exiting the conditional.
This is a great question - thank for posting I gave it some thought and the model you’ve currently got has a problem around the number of tokens being produced. Because of the way the non-interuppting event loops back it means that once all the reviewers are done it’s going to send a load of tokens through the rest of the process.
So my first thought was to try to mitigate that a bit. So i came up with something similar but it tries to deal with the multi-token issue
I don’t think it’s the best solution to be honest… it still feels a little messy so ill continue to think about it.
Hey @Niall - thank you for putting some brain power into this - I like your proposal a lot. For that second exclusive gateway to be able to evaluate that question there would have to be a process scope variable that tracks the initial (and potentially growing) approver list and also captures when a response has been given from each approver?
That map could be used to answer the questions:
Have all approvers provided a response?
If [1] == true, are there any rejections?
My implementation experience with BPMN is limited but is having such a map as a process variable a good solution to track what is going in the process?