BPMN 1.2 中的同一通道需要两个 "start"

Two "start" needed in the same lane in BPMN 1.2

我知道在 BPMN 中每个池只有一个 "start event"。在我的例子中,我有一个池,可以在捕获到消息时开始,或者因为演员决定根据自己的决定去做。

我该如何建模?我不确定我是否可以使用基于事件的异或。

也许是一个复杂的网关?

无限流程实例

如果您不介意在执行过程中可以多次使用池(例如,一次由一条消息启动,3 次由一个参与者启动),那么您可以简单地使用多个启动事件(BPMN 1.2 PDF Spec 9.3.2 第 37 页允许这样做):

单个实例

如果您只能允许一个 运行 池,您可能必须在执行开始时手动实例化它,然后决定是否使用它以及何时使用它。这是一个如何做到这一点的例子:

基于事件的网关 (Spec 9.5.2.4) 将 "decide" 如何处理您的池:

  • 如果Actor decides to start或者消息来自主池,一些动作会发生;
  • 如果进程 "sure" 不需要额外的池,则会发出信号以终止其实例。

如许多最佳实践指南中所述,不建议在池中使用多个启动事件。 BPMN 规范 1.2 也包含此注释:

9.3.2.
...
It is RECOMMENDED that
this feature be used sparingly and that 
the modeler be aware that other readers of the Diagram may have difficulty
understanding the intent of the Diagram.
...

另一方面,省略开始事件的情况的通用规则是

If the Start Event is not used, then all Flow Objects that do not have an incoming Sequence Flow SHALL be instantiated when the Process is instantiated.

我认为这对于手动流程启动的情况也足够公平。即使进程有只有消息启动事件,它也会被正确启动,因为消息启动事件是一个没有传入顺序流的公平流对象,因此它符合上述规则。

但是,如果您希望 100% 确定流程将按照您希望的方式进行,那么您可以选择基于事件的独占网关(自版本 1.1 起可用)。将它放在多个不同的开始事件之前将使进程选择其中一个开始。

可以找到进一步的解释 in this blog