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

Spe*_*ise 6 alfresco bpmn activiti

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

这里的问题是 - 如何合并两个流的结果? 在此处输入图片说明

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

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

例子:

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

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

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

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

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

  5. SubProcess P2 (Variable: CONTEXT_2 ) 完成执行并向 SuperProcess 返回新的 veriable。结果 -> CONTEXT_1丢失。

我的目标场景:

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

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

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

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

    4.1. CONTEXT_2CONTEXT_M1合并到CONTEXT_M2 中,也就是说,只有CONTEXT_2 的新变化才会应用到CONTEXT_M1 上,所以之前的更新不会丢失;

  5. SubProcess P2 (Variable: CONTEXT_M2 ) 完成执行并向 SuperProcess 返回新的 veriable。结果 -> CONTEXT_M2。保存所有更改。

Spe*_*ise 4

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

“您可以将流程变量传递给子流程,反之亦然。数据在子流程启动时复制到子流程中,并在子流程结束时复制回主流程中。”

作为决定,我们以不同的名称将变量传递到 SubProcess 中,并在 SubProcess 完成后与源变量合并: 在此输入图像描述