AnsweredAssumed Answered

Using Error Events as general shortcutting solution

Question asked by ekolesnikov on Jun 18, 2014
Latest reply on Jul 2, 2014 by bardioc
Hi guys,

Been a while since I last visited forums.

We have quite interesting approval process - the "manager" does not just approves or rejects, but also have an option to "escalate" the request (business case being "I have no objections, but I'm not comfortable authorising this on my own") to one or two nominated approvers.
In addition to that, if both approvers are nominated, the approvals have to go through in particular order (A -> B, not the other way around).

At the end of the whole thing, the "Your request has been approved" or "Your request has been rejected" email generation routine is triggered by the Service task.

My problem is - there are way too many references to process completion and it kind of messes up the whole BPMN diagram.

I.e. the "rejected" path is triggered when a "manager" rejects, when approver "A" rejects, or when approver "B" rejects. The "Approved" path is triggered when a "manager" approves, or approves and escalates to "A" or "B" alone and they approve, or to both "A" and "B" together and they both approve. Additionally, after "A" approves, there is another decision making path testing if "B" approval is also required.

Just imagine how messed up the whole thing is when drawn straight away. So my idea was to simplify the diagram by externalising "Approved" and "Rejected" paths from the main process and calling them when needed.

My issue here is that the only appropriate throw-catch solution that only operates within the scope of the current execution is an Error events and event sub-processes.

Frankly, using "Error" events to follow the "successful" path does not look appropriate at all - I'd say the "Signal" event is the right one, but the problem is that it triggers ALL process definitions out there which is definitely not something I desire.

Here goes the question - is it even a proper use case for the "Error" event? If not, is there anything more appropriate for my case?

Many thanks in advance.