如何在Activiti中合并来自并行流的变量?

时间:2017-07-31 18:53:30

标签: alfresco activiti bpmn

目前我有一个使用fork / join机制创建并行流的子进程。以免假设有两种流程: A,B 。每个流程都将复杂对象 CONTEXT 作为输入变量。此外,每个流程都会进行一些计算并更新 CONTEXT 。作为输出,每个流返回更新的 CONTEXT 。这里的问题是,在加入点, CONTEXT 的最后结果会覆盖前一个结果。让我们假设流量 A 填充首先结果 CONTEXT_1 ,流量 B 将返回 CONTEXT_2 。因此,最终结果将是 CONTEXT_2 ,并且流 A 的所有更改都将丢失。

这里的问题是 - 如何合并两个流的结果? enter image description here

更新 根据我的观察,从SuperProcess到SubProcess的传递变量(CONTEXT)被复制(CONTEXT'),在subProcess完成后,传递变量(CONTEXT')的新值将取代原始变量(CONTEXT)。

在下面的示例中,我的意思是所有传递的变量都具有相同的名称。

示例:

  1. SuperProcess P1 (变量: CONTEXT )调用SubProcess P2 (变量通过副本传递);
  2. SubProcess P2 (变量: CONTEXT')创建两个并行流(任务) A B (变量通过副本传递);

  3. A 任务(变量: CONTEXT_1 )更新变量值,完成执行并返回变量;

    3.1。 CONTEXT_1 代替变量 CONTEXT',因此 P2 只能看到此新值,因为此变量的名称相同;

  4. 同时 B 任务(变量: CONTEXT_2 )仍在工作,经过一段时间更新变量后,完成执行并返回变量;

    4.1。 CONTEXT_2 代替变量 CONTEXT_1 ,因此 P2 只能看到此新值,因为此变量的名称相同;

  5. SubProcess P2 (变量: CONTEXT_2 )完成执行并将新的veriable返回给SuperProcess。 结果 - > CONTEXT_1 失败。
  6. 我的目标场景:

    1. SuperProcess P1 (变量: CONTEXT )调用SubProcess P2 (变量通过副本传递);
    2. SubProcess P2 (变量: CONTEXT')创建两个并行流(任务) A B (变量通过副本传递);

    3. A 任务(变量: CONTEXT_1 )更新变量值,完成执行并返回变量;

      3.1。 CONTEXT_1 CONTEXT 合并到 CONTEXT_M1 ,换句话说,只有 CONTEXT_1 的新更改才会应用于 CONTEXT

    4. 同时 B 任务(变量: CONTEXT_2 )仍在工作,经过一段时间更新变量后,完成执行并返回变量;

      4.1。 CONTEXT_2 CONTEXT_M1 合并到 CONTEXT_M2 ,换句话说,只有 CONTEXT_2 的新更改才会应用于< strong> CONTEXT_M1 所以之前的更新不会丢失;

    5. SubProcess P2 (变量: CONTEXT_M2 )完成执行并将新的veriable返回给SuperProcess。 结果 - &gt;的 CONTEXT_M2 即可。保存所有更改。

2 个答案:

答案 0 :(得分:3)

经过几天的调查,我们发现将变量从SuperProcess复制到SubProcess是默认行为(link):

  

&#34;您可以将流程变量传递给子流程,反之亦然。该   数据在启动和复制时复制到子进程中   结束时进入主要过程。&#34;

作为决定,我们将变量以不同的名称传递给SubProcess,并在SubProcess完成后与源变量合并: enter image description here

答案 1 :(得分:1)

当你说合并?你到底是什么意思? 在涌现点你期望的行为是什么?

如果你想维护两个上下文然后使用一个以执行ID为关键字的地图,不过,我怀疑这是你想要的。

格雷格