根据流程设置执行的局部变量导致子流程

时间:2015-09-07 11:22:04

标签: bpmn camunda

我有一个BPMN流程,其中包含一个子流程。导致子过程的流程不同。我想知道,一旦进入子流程'执行,哪个流程导致当前执行。

为此,我认为变量可能很方便。所以我进行了一项测试,在其中我为流程的听众写了几个脚本,导致了一个过程。

execution.setVariableLocal("V", "Expecting it to be local to the sub-process' execution");

但事实证明execution指向外部/父进程,因此变量是在父范围内设置的。

那么无论如何都要从外部设置执行局部变量吗?

1 个答案:

答案 0 :(得分:4)

最简单的方法(基本上使用getVariable代替getVariableLocal):

  1. 将执行侦听器添加到感兴趣的序列流的take事件
  2. 在执行监听器中,执行

    execution.setVariableLocal("flowTaken", execution.getCurrentTransitionId());
    
  3. 通过

    在子流程中访问它
    execution.getVariable("flowTaken");
    
  4. 如果必须是子流程中的局部变量:

    1. 将执行侦听器添加到感兴趣的序列流的take事件
    2. 在执行监听器中,执行

      execution.setVariableLocal("flowTaken", execution.getCurrentTransitionId());
      
    3. 在BPMN 2.0 XML中,为子流程定义variable input mapping

      <subProcess ...>
        <extensionElements>
          <camunda:inputOutput>
            <camunda:inputParameter name="flowTakenAsSubprocessLocalVariable">${flowTaken}</camunda:inputParameter>
          </camunda:inputOutput>
        </extensionElements>
        ...
      </subProcess>