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

Setting an execution's local variable according to the flow led to the sub-process

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

为此,我认为变量可能会派上用场。所以我进行了一个测试,其中我为 flow 的侦听器编写了几个脚本,导致 sup-process。

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

但事实证明 execution 指向 outer/parent 进程,因此变量设置在父作用域中。

那么有没有办法从外部设置一个执行局部变量呢?

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

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

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

    在子进程中访问它
    execution.getVariable("flowTaken");
    

如果必须是子进程中的局部变量:

  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>