在处理BPMN模型时,我们遇到了一个与异常流有关的问题。
每当需要异常流时,我们就给它自己的结束事件。尽管BPMN建议使用网关将正常流与异常流合并。我看不到这样做有什么好处,只有一些其他的并发症。
但是,请考虑以下情况:我们有一个带有活动X和附加到边界的非中断事件的子过程。触发后,将创建一个并行令牌并将其放在异常流的分支上。运行完异常流后,结束事件将使用此令牌。
我假设这种消耗不会触发上层流程(包含该特定子过程的流程)继续,因为活动X中还剩下一个令牌。当此活动结束并执行正常流程时,该令牌就被消耗了以及子过程不包含任何令牌。这将触发上层流程继续。
在这种情况下,我认为没有必要将异常流和正常流合并的任何情况。 (除了活动x之后的活动也必须在异常流中运行,导致它们被多次执行之外)。
最佳答案
我认为这种消耗不会触发上层流程(包含该特定子流程的流程)继续,因为活动X中还剩下一个令牌。
这是一个准确的陈述;以下模型具有相同的语义(不间断的多事件触发器用作占位符):
BPMN规范中的管理部分是第10.5.3节,该节要求“在流程完成之前,必须在结束事件中使用流程内生成的所有令牌”。
在这种情况下,我认为没有必要将异常流和正常流合并的任何情况。
一种可能需要合并的情况是,必须先将两个流合并,然后才能开始该过程中的后续任务。作为一个简单的示例,采用以下模型:
在顶部模型中,Activity Y
可能会在Activity X
完成后立即开始,无论是否有Exceptional activity
实例并行运行。在底部的模型中,Activity Y
在所有Exceptional activity
实例(如果有)完成之前无法启动。如果需要第二个示例的语义,则需要将正常流和异常流合并。