2014-10-21 68 views
1

我想了這個非常簡單的場景:活動:如何知道執行是否鏈接到(子)進程的實例?

  1. 流程1有兩個任務(任務A - >任務B)
  2. 過程2有一個 「呼叫活動」 塊(調用過程1)。

於是,我開始處理2.它直接進入狀態,我們有2個處決:

  1. 直接映射到進程的實例的一個2.假設:123
  2. 與「呼叫活動」關聯的人。假設:456

問題是:如何輕鬆找到進程1當前所在的任務? (它應該是任務A)。

好了,我可以用這個REST查詢做到這一點:

  1. 首先我查詢屬於進程2的所有執行:運行時/執行processInstanceId = 123

在這裏,我得到什麼?: [{ID:123},{ID:456,activityId: 「calling_subproc」}]

好,我知道456是子過程的執行,因此,下一個查詢是:

  • 運行/流程實例superProcessInstanceId = 123個& includeProcessVariables =真
  • 在這裏,我得到:[{ID:789,activityId: 「任務1」}]

    但是......,我可以那麼做是因爲我知道這是一個子流程,我設計了這個模型。但是......否則,一個程序(不知道這個事實)將如何發現它?查詢#1的響應中沒有任何內容表明456是一個子進程(這意味着我將不得不執行查詢#2 ...,而不是運行時/任務)executionId = 456 & includeProcessVariables = true,通過這種方式給我{data:[0],total:0,start:0,sort:「id」,order:「asc」,size:0})

    ----其他評論:我認爲REST服務運行時/執行應該支持「superExecutionId」參數(例如:runtime/executions?superExecutionId = 87519)...這樣給定執行ID(在調用過程中),我們可以直接導航到產生的子過程(數據庫結構已經支持):

    enter image description here

    由於提前, 拉嘎

    +0

    有一段時間,解決方法似乎是「在調用進程和所有被調用的子進程之間共享/複製一個唯一的進程變量」:http://forums.activiti.org/content/get-all -active-tasks-including-sub-process-tasks – 2014-10-22 16:23:30

    +0

    相關:它仍然沒有實現(直到版本5.16.4),但已經在JIRA中:https://jira.codehaus.org/browse/ACT-1805 ref:http://forums.activiti.org/content/getting-process-id-called-subprocess – 2014-10-22 16:27:31

    +0

    運行時/進程實例和運行時/執行的REST json需要使用字段「superProcessInstanceId」和「superExecutionId」來豐富,分別。 – 2014-10-22 16:34:19

    回答

    3

    這是我剛剛完成一個項目的問題。解決方案/解決方法非常類似於上面的評論,我們創建了一個流程變量來表示「頂級」流程實例ID。

    爲了確保我們不必爲所有被調用的過程手動設置它(即,沒有必要顯式建模變量傳遞),我們添加了一個解析處理程序來添加一個啓動監聽器,以在啓動被調用進程時自動填充變量。

    工作就像一個魅力。

    +0

    謝謝格雷格,我會嘗試一個。 – 2014-10-22 21:08:57

    相關問題