X OR in BPM process

Can someone specify when should we go for Xor, Complex join types in BPM process. If possible, kindly share some sample scenario with detail explanation. I have gone through documentation but still unclear.

Thanking you.

Thanks Dinesh for your reply. I’m sorry, I’m still not clear. I would like to know when one should opt XOR join and complex join.


Hi Anil,

an XOR-Join only has two Inputs, from which only one is met and the other is not met.

A complex Join can have any number of inputs with much more complex conditions on combinations of the inputs.



To be clear, an exclusive gateway means only one path is followed.

So, the divergent gateway (or split point) can have several outgoing paths but the conditions associated with them MUST guarantee that ONE path CAN be followed.

The convergent gateway (the join point) MUST unite all the divergent paths again.

If you CANNOT guarantee that only one path is chosen, you MUST use an inclusive gateway (or other).

In BPMN there is no such thing as an β€œXOR” gateway: it is either exclusive (empty diamond shape or with an β€œX” inside), inclusive (diamond with an β€œO” inside) or parallel (an β€œ+” inside).

The standard defines four more gateway types, which are a little harder to explain and not implemented in many platforms.

Some links to delve further:

Best regards,

Thanks Holger and Gerado for your response.

Gerado, Thanks for sharing good notes on gateways. I’m referring this specifically on join types.



Remember that you cannot disassociate split and join gateway types: for every split (or divergent) gateway there MUST be a MATCHING join (or convergent) gateway.

Gateways are the way the process engines synchronize flows; if they misaligned there is a risk for the process instance to enter an inconsistent state!

Also remember that even if no gateways are visible, divergent and convergent flows from and to tasks or events have an implicit exclusive (split or join) gateway.

For more information:

Best regards,

1 Like

Thanks Gerardo for your information.

This is not true IMO. An XOR-Join can have an arbitrary number of inputs. And an XOR-Fork can have an arbitrary number of outputs.

This is not true IMO. You can model your processes as you like, there is no demand to join all the paths you previously created with a fork. The other question is that I’d recommend to do so since then the models become more comprehensible and structured. But, technically, this is not necessary.