4

来自第 238 页的http://www.omg.org/spec/BPMN/2.0.2/PDF :

如果Process作为全局Process(可以从其他Process的CallActivity调用的可调用Process)并且有多个None Start Events,那么当flow从父Process转移到全局Process时,只有一个将触发全局进程的启动事件。传入调用活动对象的序列流的 targetRef 属性可以扩展以识别适当的开始事件。

如何扩展 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>
4

2 回答 2

5

我们实际上在 camunda 中讨论了这个问题 - 但决定不支持它(现状)。到目前为止,我们还没有看到现实生活中对这种结构的真正需求。这是相当深奥的,我不认为这是最佳实践。

对于用例“将现有进程实例从另一个工具迁移到 camunda”,我们使用另一个构造来启动特定状态下的子进程,利用消息启动事件和呼叫活动的扩展 - 这似乎更容易理解,请参阅https:// network.camunda.org/whitepaper/5

干杯伯恩德

于 2015-06-10T05:52:48.760 回答
1

是的,这种情况很少见,但我们认为最好以某种方式解决它。由于 BPMN 首先是一种图形语言,因此需要使用图形元素来处理解决方案。因此,如果您在调用进程的上下文中扩展被调用进程,您应该能够将来自调用进程的序列流连接到被调用进程的适当启动事件 - 从而消除该进程启动的歧义。因此,序列流的目标将包括该开始事件的 IDREF。这似乎违反了包含在其进程级别中的序列流的基本规则,但我们允许此例外,因为考虑到实际目标是 callActivity 的边界,但扩展了有关目标启动事件的附加信息(在被调用的进程中) )。我还没有看到这个实现,并且在上下文中扩展被调用进程时需要考虑表示问题。如果围绕此功能存在其他技术问题,我不会感到惊讶。也许我们可以审查实施者的问题并在未来版本的 BPMN 中清理这些问题。

于 2015-06-10T18:31:57.083 回答