Parallel gateway implementation issue

Hi Team,

I’m attaching the BPMN for reference.
ParallelGatewayDemo.bpmn (21.1 KB)

In this workflow following are my execution steps:

  1. User task 1 to User task 2, User task 3, User task 4
  2. User task 2 to user task 4, user task 3 to user task 5, user task 8 to user task 9
  3. Which takes the flow to user task 6
  4. From user task 6 the one control flow goes back to user task 2 another 2 control flow goes to the parallel gateway
  5. The control flow which goes to user task 2 comes back to user task 6 via user task 4
  6. From user task 6 now control is supposed to go to user task 7 so I set the variable goToUserTask2, goToUserTask3, goToUserTask8 as false.

The outcome of above is control goes to user task 7 however after claiming and completing user task 7 the process instance of the BPMN remains alive. This isn’t a desirable scenario. Attaching the cockpit screenshot for reference.

Request help to identify if anything is wrong with the workflow configuration.

Thank you in advance.
Bhavesh G

Judging just by the bird view of the picture: I’d recommend to redesign the process. It’s hardly comprehensible.

Or did you create it just for the studying purposes?

I think you have an indeterminate number of tokens when you hit the parallel join before Task 7.
Your process will continue being in existence until all tokens are consumed.

The join is expecting 3 tokens, and proceeds to Task 7 when it gets 3 tokens, and there’s no way for the 4th token to get consumed.

I would recommend you refactor.
Put Task 2 and Task 4 with their Exclusive Split into Call 1
Put Task 3 and Task 5 with their Exclusive Split into Call 2
Put Task 8 and Task 9 with their Exclusive Split into Call 3

Start → Task 1 → Parallel Split (3 Paths) → Call 1, Call 2 and Call 3 → Parallel Join → Task 6 → Conditional Split → Call 1, Call 2, and Call 3 → Conditional Join → Task 7 → End

That’s a start, but it doesn’t redo Task 6 each time the Calls have issues.

A better way would be to set a set of Variables ( Call1Required=true, Call2Required=true, Call3Required=true) after Task 1 before a Looping Subprocess. Loop Condition would be to loop until all 3 “required” variables are false. That loop would Start → Inclusive Split (each “required” variable gets evaluated and then goes to the appropriate call) → Inclusive Join → Task 6 → Set Variable Status → End Loop Subprocess

Thank you @fml2 , I will surely consider your input. This is not for study purposes, this is for the actual product development.

Thank you @GotnOGuts, I will implement this

@GotnOGuts I have resolved the problem with your inputs. Thank you for your timely reply.

@bhaveshGawade Please remember to mark one of the posts as the solution, so that other people searching for answers know that your issue was resolved, and how it was resolved.

1 Like