在处理BPMN模型时,我们遇到了有关异常流的问题。 每当需要异常流时,我们就会给它自己的结束事件。尽管BPMN建议使用网关将正常流与异常流合并。我认为这样做没有任何优势,只有一些额外的复杂情况。 但是,请考虑我们的子进程具有活动X和附加到边界的非中断事件的情况。触发时,将创建并行令牌并将其放在异常流的分支上。运行异常流后,结束事件将使用此令牌。 我假设此消耗不会触发上层流(包含此特定子流程的流)继续,因为活动X中仍有一个令牌。当此活动结束并执行正常流时,此令牌将被消耗同样,子进程不包含任何令牌。这将触发上层流程继续。 在这种情况下,我无法想到任何需要合并异常流和正常流的情况。 (除了活动x之后的活动必须在异常流程中运行,导致它们被多次执行的情况除外)。
答案 0 :(得分:4)
我假设此消耗不会触发上层流(包含此特定子流程的流)继续,因为活动X中仍有一个令牌。
这是一个准确的陈述;以下模型具有相同的语义(非中断多事件触发器用作占位符):
BPMN规范中的管理部分是第10.5.3节,该部分要求“在流程完成之前,流程中生成的所有令牌必须由结束事件使用。”
在这种情况下,我无法想到任何需要合并异常流和正常流的情况。
可能需要合并的一种情况发生在两个流必须合并之前,该过程中的任务可以开始之前。举个简单的例子,采用以下模型:
在顶部的模型中,Activity Y
可能会在Activity X
完成后立即开始,无论是否有Exceptional activity
并行运行的实例。在底部的模型中,Activity Y
无法启动,直到Exceptional activity
的所有实例(如果有)都已完成。如果需要第二个示例的语义,则需要合并正常流和异常流。
答案 1 :(得分:1)
最后一张图不是不准确的,实际上是无效的。
根据定义,异常流量不能构成平稳流动的一部分。根据定义,无法使用IF评估异常流量。
最终图表(错误地)引入了一个网关,最终会收到两个令牌并且(错误地)触发活动Y两次。
我建议语言是错误的 - 如果在Y触发之前必须完成异常流程,作者描述了一个中断边界事件。描述该事件解决了由不良语法引入的建模问题。只生成一个令牌,并且只触发一次活动Y.