并行网关和专用网关组合

问题描述:

我试图建立一个流程,其中两个检查并行运行,并且当它们都成功时流程继续。否则(如果它们中的任何一个失败)过程应该被终止,而不等待另一个的结果。下图是否正确?并行网关和专用网关组合

BPMN diagram

此外,如果之后的任何检查失败,我想有一个单一的流动,这将是推荐的方式来建模呢?

P.S.我不能在模型中使用子进程或复杂网关。如果有任何具体的建议,我将在Activiti中实施该模型。

您的过程模型是正确的,因为您正在使用终止事件如果令牌达到终止结束事件,整个过程异常终止BPMN specification, page 436; page 456 in PDF

现在你另一个问题:另外,如果之后的任何失败的检查,我想有一个单一的流动,会是什么我假设你要触发的具体处理流程第一次无论是检查失败。 如果你想通过做这个“基本”的元素而已,你需要推荐的方式来建模呢?

以实现一些低级逻辑,例如随每次失败检查而增加的计数器和一个网关anages基于此计数器的值的流程:

enter image description here

不过,我建议你不使用这种变通办法来管理并发。在上面的例子中,至少理论上可能的是,两个增加拒绝计数器活动执行之前任一令牌达到拒绝计数器== 1?网关。

相反,我建议使用Activiti实际支持的子进程(请参阅Activiti docs)。

只要其中一个检查失败或者两个检查都通过,子进程就会终止。主进程决定是否发送确认或基于子流程的结果是否处理失败(我的图假设子处理结果写入一个变量主进程可以访问):

enter image description here

像这样,您让BPMN(分别是:Activiti)在并发性方面做了大量工作,并且您可以专注于业务逻辑方面。

注意:作为处理检查结果的专用网关的替代方法,您可以使用附加的错误事件(Activiti supports error events as well)。但是,我认为您不会考虑检查技术错误,而是您的流程业务逻辑的替代路径。