Inclusive gateway in Camunda 8?

I need to use an inclusive gateway in my model but Camunda 8 doesn’t support it, is there another way to implement it?

Hello @daniperil ,

is it only about modelling? Then create your model inside a Camunda 7 diagram. There, all gateways can be modelled.

Is it about execution? Camunda 8 does currently not support the inclusive gateway. As workaround, you can use a parallel gateway followed by XOR-gateways. But depending on your process logic, there could also be an elegant alternative. If so, feel free to share your diagram with us.

I hope this helps

Jonathan

1 Like

Hi @daniperi. :wave:

If you are interested, please stay tuned to this issue(camunda/zeebe#10031). At present, the community has contributed some features, for more details, please see here: https://github.com/camunda/zeebe/pull/9747

2 Likes

The inclusive gateway is one of the most useful constructs in BPMN - not only for modelling but also for execution. Does anyone know the reason why this has not been implemented in Camunda 8 so far?

Hi @ahense, welcome to the forums! The inclusive gateway is something we are working to implement, but it is actually quite difficult to implement, as there are many more considerations for the inclusive gateway than for other BPMN symbols. You can follow the issue linked in a previous comment for updates (and feel free to help contribute to the conversation or code!): Support BPMN Converging Inclusive Gateway · Issue #10031 · camunda/zeebe · GitHub

Hi Nathan,
thank you for your prompt answer. I can understand why it’s difficult - I am having problems understanding the motivation behind the BPMN 2.0 definition of the activation of the inclusive gateway myself.

The Inclusive Gateway is definitely useful.
Many C8 users that used in C7 have modeled it with a “workaround” … Chain a concurrent gateway with an exclusive gateway, and it will work. It’s just not as clean for reading.

-- < + > --- < x > --- 'no op path' --- < x > --- < + > ----
       |         \---  [ action 1 ] ----/          | 
       ----- < x > --- 'no op path' --- < x > ------
                 \---  [ action 2 ] ----/             

Yes, you are right, this is a useful workaround in many cases. If the merging inclusive gateway is used in a structured context it’s also no problem. I guess it’s the combination of the non-local semantics with the freedom of arbitrary spaghetti workflows and unstructured circles that’s intractable.

If you replace [ action 1 ] or [ action 2 ] with a subprocess (or Call Activity), you can get very close to the arbitrary workflow “plate of spaghetti”

I think where the big complexity comes in is when there’s “unbalanced” splits (exclusive, parallel or Inclusive) that makes an Inclusive Join next to impossible to figure out. Chain two (or more) inclusive splits together, and then try to figure out how many tokens you need to wait for at the join… especially if one of those tokens hasn’t hit the last inclusive split yet…

1 Like