第238页的http://www.omg.org/spec/BPMN/2.0.2/PDF:
如果Process被用作全局进程(一个可调用的进程) 可以从其他进程的Call Activities中调用) 多个无启动事件,然后从流传输流 parent进程到全局进程,只有全局进程之一 将触发启动事件。 Sequence的targetRef属性 传入Call Activity对象的流可以扩展为识别 适当的开始活动。
如何扩展targetRef属性? 它不一定是有效的IDREF吗? 也许他们的意思是应该使用自定义属性扩展sequenceFlow元素?
有这样的延期的例子吗? 现有的BPMN工具是否支持它?
以下是我手工编辑的BPMN代码段,用于说明问题:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">
<process id="p1" name="Process 1" isExecutable="false" processType="Private">
<sequenceFlow id="startAflow" sourceRef="start" targetRef="A"/>
<sequenceFlow id="callActivityFlow" sourceRef="A" targetRef=" !? WHAT_GOES_HERE ?! "/>
<startEvent id="start" name="Start">
<outgoing>startAflow</outgoing>
</startEvent>
<task id="A">
<incoming>startAflow</incoming>
<outgoing>callActivityFlow</outgoing>
</task>
<callActivity id="call" calledElement="p2">
<incoming>callActivityFlow</incoming>
</task>
</process>
<process id="p2" name="Process 2" isExecutable="false" processType="Private">
<sequenceFlow id="start2Aflow" sourceRef="start1" targetRef="2A"/>
<sequenceFlow id="start2Bflow" sourceRef="start2" targetRef="2B"/>
<startEvent id="start1" name="Start">
<outgoing>start2Aflow</outgoing>
</startEvent>
<task id="2A">
<incoming>start2Aflow</incoming>
</task>
<startEvent id="start2" name="Start in middle of process">
<outgoing>start2Bflow</outgoing>
</startEvent>
<task id="2B">
<incoming>start2Bflow</incoming>
</task>
</process>
</definitions>
答案 0 :(得分:5)
我们在camunda中实际讨论了这个问题 - 但决定不支持它(现状)。到目前为止,我们还没有看到真正需要这种结构。这是相当无聊的,我不认为这是最好的做法。
对于用例“将现有的proicess instancess从另一个工具迁移到camunda”,我们使用另一个构造来启动特定状态下的子流程,利用消息启动事件和调用活动的扩展 - 这似乎更容易理解,请参阅{ {3}}
干杯 贝恩德
答案 1 :(得分:1)
是的,这种情况很少见,但我们认为最好以某种方式解决这个问题。 由于BPMN首先是图形语言,因此需要使用图形元素来处理解决方案。 因此,如果您在调用进程的上下文中扩展了一个被调用的进程,那么您应该能够将一个序列流从调用进程连接到被调用进程的相应start事件 - 从而清除该进程开始的模糊性。因此,序列流的目标将包括该开始事件的IDREF。 这似乎违反了包含在其进程级别中的序列流的基本规则,但是我们通过考虑实际目标是callActivity的边界但是使用有关目标启动事件的附加信息(在被调用的进程中)进行扩展来允许此异常。 )。 我没有看到这个实现,并且在上下文中扩展被调用的进程时需要考虑表示问题。如果围绕此功能存在其他技术问题,我不会感到惊讶。也许我们可以审查实施者的问题,并在未来的BPMN版本中进行清理。