并行网关和专用网关组合

时间:2017-10-08 01:52:08

标签: jbpm activiti bpmn bpm bpms

我试图建模一个并行运行两个检查的流程,并且当两个检查都成功时,流程会继续。否则(如果其中任何一个失败),该过程应该终止,而不等待其他人的结果。以下图表是否正确?

BPMN diagram

另外,如果在任何检查失败后我想要一个流程,那么推荐的建模方法是什么?

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

1 个答案:

答案 0 :(得分:1)

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

现在提出您的其他问题:此外,如果在任何检查失败之后我想要一个流程,那么推荐的建模方法是什么?

我假设你想要在第一次检查失败时触发特定的流程。 如果你想通过使用' basic'仅需要元素,您需要实现一些低级逻辑,例如每次失败检查时增加的计数器和根据此计数器的值管理流程的网关:

enter image description here

但是,我建议您不要使用此类解决方案来管理并发性。在上面的示例中,至少在理论上可能两个增加拒绝计数器活动都是在之前执行任一令牌到达拒绝计数器== 1?网关。

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

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

enter image description here

就像这样,你让BPMN(分别是:Activiti)在并发性方面做得很重,你可以专注于业务逻辑方面。

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