如何在 Activiti 中合并来自并行流的变量?
How to merge variables from parallel flows in Activiti?
目前我有一个子流程使用 fork/join 机制来创建并行流程。以免假设有两个流:A,B。每个流程都将复杂对象 CONTEXT 作为输入变量。此外,每个流程都会在内部进行一些计算和更新 CONTEXT。作为输出,每个流 return 更新了 CONTEXT。这里的问题是,在 Join 点中,CONTEXT 的最后一个结果覆盖了前一个。让我们假设流程 A 填充首先完成,结果为 CONTEXT_1 并且流程 B 将returnCONTEXT_2。所以最终结果将是 CONTEXT_2 并且来自流程 A 的所有更改都将丢失。
这里的问题是 - 如何合并来自两个流程的结果?
更新:
根据我的观察,从 SuperProcess 到 SubProcess 的传递变量 (CONTEXT) 被复制 (CONTEXT'),并且在 subProcess 完成后,传递变量 (CONTEXT') 的新值将取代原始 (CONTEXT)。
在下面的示例中,我的意思是所有传递的变量都具有相同的名称。
示例:
- SuperProcess P1(变量:CONTEXT)调用SubProcess P2(变量通过复制);
SubProcess P2(变量:CONTEXT')创建两个并行流(任务) A,B(变量通过copy传递);
A 任务(变量:CONTEXT_1)更新变量的值,完成执行并returns变量;
3.1。 CONTEXT_1 取代变量 CONTEXT' 所以 P2 只能看到这个新值作为此变量的名称相同;
同时 B 任务(变量:CONTEXT_2)仍在工作并经过一段时间更新变量,完成执行和 returns 变量;
4.1。 CONTEXT_2 代替变量 CONTEXT_1 所以 P2 只能看到这个新值与此变量的名称相同;
- SubProcess P2 (Variable: CONTEXT_2) 完成执行并且 returns 新的 superProcess .
结果 -> CONTEXT_1 丢失.
我的目标场景:
- SuperProcess P1(变量:CONTEXT)调用SubProcess P2(变量通过复制);
SubProcess P2(变量:CONTEXT')创建两个并行流(任务) A,B(变量通过copy传递);
A 任务(变量:CONTEXT_1)更新变量的值,完成执行并returns变量;
3.1。 CONTEXT_1和CONTEXT合并为CONTEXT_M1,换句话说,只有 CONTEXT_1 的新更改将应用于 CONTEXT.
同时 B 任务(变量:CONTEXT_2)仍在工作并经过一段时间更新变量,完成执行和 returns 变量;
4.1。 CONTEXT_2和CONTEXT_M1合并为CONTEXT_M2,换句话说,只有 CONTEXT_2 的新更改会应用到 CONTEXT_M1,因此之前的更新不会丢失;
- SubProcess P2 (Variable: CONTEXT_M2) 完成执行并且 returns 对 SuperProcess 的新验证.
结果 -> CONTEXT_M2。保存所有更改。
什么时候说合并?你到底是什么意思?
您希望出现的行为是什么?
如果您想维护这两个上下文,则使用以执行 ID 作为键的映射,但是,我怀疑这是否是您想要的。
格雷格
经过几天的调查,我们发现将变量从 SuperProcess 复制到 SubProcess 是默认行为 (link):
"You can pass process variables to the sub process and vice versa. The
data is copied into the subprocess when it is started and copied back
into the main process when it ends."
作为决定,我们以不同的名称将变量传递给 SubProcess,并在 SubProcess 完成后与源变量合并:
目前我有一个子流程使用 fork/join 机制来创建并行流程。以免假设有两个流:A,B。每个流程都将复杂对象 CONTEXT 作为输入变量。此外,每个流程都会在内部进行一些计算和更新 CONTEXT。作为输出,每个流 return 更新了 CONTEXT。这里的问题是,在 Join 点中,CONTEXT 的最后一个结果覆盖了前一个。让我们假设流程 A 填充首先完成,结果为 CONTEXT_1 并且流程 B 将returnCONTEXT_2。所以最终结果将是 CONTEXT_2 并且来自流程 A 的所有更改都将丢失。
这里的问题是 - 如何合并来自两个流程的结果?
更新: 根据我的观察,从 SuperProcess 到 SubProcess 的传递变量 (CONTEXT) 被复制 (CONTEXT'),并且在 subProcess 完成后,传递变量 (CONTEXT') 的新值将取代原始 (CONTEXT)。
在下面的示例中,我的意思是所有传递的变量都具有相同的名称。
示例:
- SuperProcess P1(变量:CONTEXT)调用SubProcess P2(变量通过复制);
SubProcess P2(变量:CONTEXT')创建两个并行流(任务) A,B(变量通过copy传递);
A 任务(变量:CONTEXT_1)更新变量的值,完成执行并returns变量;
3.1。 CONTEXT_1 取代变量 CONTEXT' 所以 P2 只能看到这个新值作为此变量的名称相同;
同时 B 任务(变量:CONTEXT_2)仍在工作并经过一段时间更新变量,完成执行和 returns 变量;
4.1。 CONTEXT_2 代替变量 CONTEXT_1 所以 P2 只能看到这个新值与此变量的名称相同;
- SubProcess P2 (Variable: CONTEXT_2) 完成执行并且 returns 新的 superProcess . 结果 -> CONTEXT_1 丢失.
我的目标场景:
- SuperProcess P1(变量:CONTEXT)调用SubProcess P2(变量通过复制);
SubProcess P2(变量:CONTEXT')创建两个并行流(任务) A,B(变量通过copy传递);
A 任务(变量:CONTEXT_1)更新变量的值,完成执行并returns变量;
3.1。 CONTEXT_1和CONTEXT合并为CONTEXT_M1,换句话说,只有 CONTEXT_1 的新更改将应用于 CONTEXT.
同时 B 任务(变量:CONTEXT_2)仍在工作并经过一段时间更新变量,完成执行和 returns 变量;
4.1。 CONTEXT_2和CONTEXT_M1合并为CONTEXT_M2,换句话说,只有 CONTEXT_2 的新更改会应用到 CONTEXT_M1,因此之前的更新不会丢失;
- SubProcess P2 (Variable: CONTEXT_M2) 完成执行并且 returns 对 SuperProcess 的新验证. 结果 -> CONTEXT_M2。保存所有更改。
什么时候说合并?你到底是什么意思? 您希望出现的行为是什么?
如果您想维护这两个上下文,则使用以执行 ID 作为键的映射,但是,我怀疑这是否是您想要的。
格雷格
经过几天的调查,我们发现将变量从 SuperProcess 复制到 SubProcess 是默认行为 (link):
"You can pass process variables to the sub process and vice versa. The data is copied into the subprocess when it is started and copied back into the main process when it ends."
作为决定,我们以不同的名称将变量传递给 SubProcess,并在 SubProcess 完成后与源变量合并: