2017-07-31 63 views
3

目前我有一個使用fork/join機制來創建並行流程的子流程。免得假設有兩個流程:A,B。每個流都將輸入變量作爲複雜對象CONTEXT。此外,每個流都會進行一些計算並更新CONTEXT裏面。作爲輸出,每個流程返回更新上下文。這裏的問題是在加入點,最後結果CONTEXT覆蓋了前一個。讓我們假設流動一個填充先完成與結果CONTEXT_1和流動將返回CONTEXT_2。所以最後的結果將是CONTEXT_2和流程A的所有更改都將丟失。如何合併Activiti中並行流的變量?

這裏的問題是 - 如何合併兩個流的結果? enter image description here

UPDATE: 從我的觀察,從超過程傳遞的變量(上下文)以子流程複製(CONTEXT「)和子進程結束後,通過變量(上下文的新價值」)將於原來的(上下文)。

在下面的例子中,我的意思是所有傳遞的變量都具有相同的名稱。

實施例:

  1. 超過程P1(變量:CONTEXT)調用子流程P2(變量由副本傳遞);
  2. 子流程P2(變量:CONTEXT」)創建兩個並行流(任務)(變量由副本傳遞);

  3. 任務(變量:CONTEXT_1)變量的更新值,結束執行並返回變量;

    3.1。 CONTEXT_1代替變量CONTEXT'因此P2只能看到這個新值,因爲這個變量的名字相同;

  4. 同時任務(變量:CONTEXT_2)仍在工作並在一段時間更新變量之後,結束執行並返回變量;

    4.1。CONTEXT_2代替變量CONTEXT_1所以P2只能看到這個新值,因爲這個變量的名字相同;

  5. 子流程P2(變量:CONTEXT_2)完成執行,並返回新veriable到超過程。 結果 - >CONTEXT_1已丟失。

我的目標場景:

  1. 超過程P1(變量:CONTEXT)調用子過程P2(變量是通過複製傳遞);
  2. 子流程P2(變量:CONTEXT」)創建兩個並行流(任務)(變量由副本傳遞);

  3. 任務(變量:CONTEXT_1)變量的更新值,結束執行並返回變量;

    3.1。 CONTEXT_1CONTEXT被合併成CONTEXT_M1,換句話說,只CONTEXT_1的新的變化將被應用到CONTEXT

  4. 同時任務(變量:CONTEXT_2)仍在工作並在一段時間更新變量之後,結束執行並返回變量;

    4.1。 CONTEXT_2CONTEXT_M1合併爲CONTEXT_M2,換句話說,只有CONTEXT_2的新變化將被應用到CONTEXT_M1所以以前的更新將不會丟失;

  5. 子流程P2(變量:CONTEXT_M2)完成執行,並返回新veriable到超過程。 結果 - >CONTEXT_M2。所有更改都保存。
+1

更新後,通過保持臨時變量的加入變量。你能上傳你的bpmn.xml以便更好地理解嗎? –

回答

2

經過調查,我們想出的幾天,模仿從超過程變量子過程是默認的行爲(link):

「你可以傳遞過程變量的子流程,反之亦然 數據在啓動時被複制到子進程中,並在 複製到主進程中時結束。「

當我們決定變量傳遞到不同的姓名和子流程完成子過程後,用源變量合併: enter image description here

1

當你說合並?你究竟是什麼意思? 在出現點你期望的行爲是什麼?

如果你想維護兩個上下文,然後使用一個執行ID爲關鍵字的映射,但是,我懷疑這是你想要的。

格雷格

+0

我用兩種方案更新了我的問題。希望它能讓我的問題更清楚。 – Speise