Cordys BOP 4平臺的子流程與嵌入子流程對比以及子流程建模技術

肖永威發表於2015-04-24

    子流程含義是在某個流程流轉過程中可以建立一個新的流程並執行,結束後可以在此返回父流程。

關於子流程

子流程

    子流程是BPMN構件,是在一個流程中的複合的活動。子流程可以分解為一系列更精細的活動。子流程通過父流程例項化。

    子流程可以設計成交易的一部分,下面列出三種可能的交易結果:

  • 成功完成(Successful completion):流程按順序執行,並且交易執行成功;
  • 取消(Cancel):交易內的活動回滾,並且補充特定活動;
  • 異常(Exception):出現異常活動不需要回滾,將從錯誤事件繼續流轉。

嵌入子流程

    嵌入子流程是BPMN組構件,用於分組屬於特定環境的活動。這有助於通過摺疊一個嵌入的子流程來隱藏活動的複雜性。它也有助於連結超時異常和補償,這是常見的嵌入子流程的所有活動。

    注:

    當超時事件附上嵌入子流程,所有未完成任務從訊息箱移除。

    如果在流程執行期間遇到“終止活動(terminate actively)”,那麼所有未完成任務從收件訊息箱中移除,並且活動置成“廢棄(Obsolete)”。這種狀態從流程例項活動檢視中可見。終止表示嵌入子流程終止,並且流程流轉從下一個活動繼續流轉(在嵌入子流程之後)。嵌入子流程圖例如下圖所示。

    

            圖1-1

子流程與嵌入子流程對比

    嵌入子流程不是一個獨立流程,沒有起始事件(Start event)和結束事件(End event),只是流程中的區域性,為了表示簡單才採用嵌入子流程方法。

    子流程是一個獨立完成的流程,可供其他正常流程呼叫,有起始事件(Start event)和結束事件(End event)


子流程建模及使用

第一步:新建流程

    在Workspace Documents中新建Business Process Model,如下圖2-1所示空白流程,包括兩個活動環節,流程命名為sub_processA。

    

                                 圖2-1

    對流程進行如下配置,效果如下圖2-2所示。

    

                                圖2-2

(1)流程掛接表單

    拖拽表單(名稱為TestForEach)到流程活動環節上,如上圖2-2所示,Activity分別命名為“子流程活動1”、“子流程活動2”。

(2)訊息配置(Message map)

    

                                    圖2-3

    建立訊息(Message)名稱為sub_msg,內包含兩個元素(Element)sub_msg_name、sub_msg_data。

(3)訊息繫結到表單

    在每個活動環節上,使用“Pre Assignments”繫結輸入訊息元素到表單中Input上,如上圖2-3所示,使用“Post Assignments”繫結表單輸入Input到訊息元素上。

(4)配置流程啟動事件(Start Event)

    此處配置是為流程接收父流程傳入引數而設定輸入訊息介面,設定Start屬性(Properties),其中Trigger Type為“Message”,Input Message設定為“bpm:sub_msg”(通過XPath表示式獲得)。

    

                                    圖2-4

(5)配置流程結束事件(End Event)

    此處配置是為流程結束時返回訊息給父流程而設定的輸出訊息介面,設定End屬性,其中End Type為“Message”,Output Message為“bpm:sub_msg”。

    注:此處的Message是在Message Map中配置過的內容。

    

                                     圖2-5

(6)釋出流程

    釋出流程,可做為其他流程的子流程來使用。

第二步:新建流程使用子流程

    本段第二步內容是講述流程使用子流程方法,以及父子關係的設定。

(1)新建流程

    新建流程做為父流程使用,準備使用前面所建的流程。在Business Process Model介面左側,切換選項頁面到Workspace,按下圖2-6所示,拖拽上面新建流程“sub_processA”到圖中。


                                        圖2-6

    拖拽到位後,所拖拽圖示變成類似活動環節,再畫上連線線即可,如下圖2-7所示。把後續活動節點命名為主流程活動2,並繫結表單。命名流程為TestSubProcess1。

   

                                       圖2-7

(2)新建主(父)流程訊息(Message Map)

    建立訊息(Message)名稱為main_msg,內包含兩個元素(Element)main_msg_name、main_msg_data。

    

                                         圖2-8

(3)配置子流程活動環節

    子流程活動(sub_processA)屬性定義如下:

    General內容如下圖2-9所示,基本儲存預設狀態。

    

                                       圖2-9

    Message沒人如下圖2-10所示,基本保持預設值即可。

    

                                        圖2-10

(4)訊息繫結到子流程

    這裡所說的子流程就是上面拖拽進入流程中“sub_process”流程,按流程活動環節方式配置,使用“Pre Assignments”繫結輸入訊息元素到子流程中Message上,做為子流程的輸入,如上圖2-8所示,main_msg_name對應sub_msg_name、main_msg_data對應main_msg_data。使用“Post Assignments”繫結子流程結束事件訊息輸出主流程訊息元素上。

(5)配置流程啟動事件(Start Event)

    此處配置是為流程接收外部傳入引數而設定輸入訊息介面,設定Start屬性(Properties),其中Trigger Type為“Message”,Input Message設定為“bpm:main_msg”(通過XPath表示式獲得)。

(6)其他配置
    略。
(7)釋出流程

第三步、測試流程

(1)先測試子流程
(2)測試主流程
    在Debug測試主流程過程中,將會出現子流程Debug介面,在子流程Debug完成後,再回到主流程介面。

在子流程活動環節上使用For Each迴圈

第一步:新建流程

    同“子流程建模及使用”章節的第一步,在此略。

第二步:新建流程使用子流程和For Each迴圈

(1)新建流程

    新建流程命名為TestSubProcess2,其中“子流程在主流程1”是名稱為sub_processA流程。按For Each迴圈方法把子流程活動配置成For Each迴圈組構件。

    

                                         圖3-1

(2)新建主(父)流程訊息(Message Map)

    建立訊息(Message)名稱為main_msg,先建迭代元素,命名為main_elem,內包含兩個元素(Element)main_elem_name、main_elem_data。此main_msg訊息承載迭代引數到子流程。

    再建立訊息名稱為main_ret_msg,做為接收子流程返回訊息使用,接著在其內部建兩個元素(Element)main_ret_msg_name、main_ret_msg_data。

    

                                         圖3-2

(3)配置For Each屬性

    設定迭代變數Iterator Name為iterator subprocess,選擇條件值Select Condition為bpm:main_msg/bpm:main_elem。(注,此值是通過XPath選擇器獲得)

    

                                圖3-3

(4)訊息繫結到子流程

    這裡所說的子流程就是上面拖拽進入流程中“sub_process”流程,按流程活動環節方式配置,使用“Pre Assignments”繫結輸入訊息元素到子流程中Message上,做為子流程的輸入,如上圖3-2所示,main_elem_name對應sub_msg_name、main_elem_data對應main_msg_data。

    注:輸入訊息是迭代資料,所以main_elem_name實際對應XPath表示式是instance:iterator_subprocess/bpm:main_elem_name/text(),如下圖3-4所示。

    

                               圖3-4

(5)繫結子流程返回訊息到主流程

    使用“Post Assignments”繫結子流程結束事件訊息輸出主流程訊息元素上,sub_msg_name對應main_ret_msg_name、sub_msg_data對應main_ret_msg_data,如下圖3-5所示。

    
                                 圖3-5

(7)釋出流程


第三步:測試流程

    略。

    由於作者水平有限,歡迎反饋討論。

參考:

Cordys BOP 4平臺開發入門實戰演練——For Each流程建模開發 肖永威 2015.4

Cordys BOP 4平臺開發入門實戰演練——流程建模開發(BPM) 肖永威 2015.4


相關文章