「DAY06」理解 BPMN 核心概念:子流程

Posted on September 20, 2023 • 1 min read • 113 words
Share via

子流程(Sub-Process)用在流程/子流程中,對於大複雜的場景下,透過子流程,能將內部細節隱藏,獲得整體且概要的視角或展開視角,深入了解其中具體細節。

昨天我們學習BPMN「網關」的概念,我們繼續認識BPMN,利用大概10分鐘的時間來學習BPMN中的零件「子流程」吧。

子流程(Sub-Process)用在流程/子流程中,對於大複雜的場景下,透過子流程,能將內部細節隱藏,獲得整體且概要的視角或展開視角,深入了解其中具體細節。


子流程

子流程(Sub-Process)一個內含其他活動、閘道、事件等元素的活動,本身即為一個流程,隸屬於更大流程的一部分。

若該子流程完全在父流程中定義,即可稱為嵌入式子流程。子流程主要應用有以下兩點:

  1. 分層建模:子流程可使流程模型更具層次感。許多建模工具允許摺疊子流程,隱藏其細節,僅展示高層次的端到端概觀。
  2. 事件作用域:子流程的執行可為事件創建新的範圍。子流程邊界處捕捉到的事件,僅在子流程內部有效。

我們使用子流程需遵守兩個限制:

  1. 子流程只能有一個空白開始事件,不得使用其他類型的開始事件。且子流程至少需擁有一個結束事件。
💡 BPMN 2.0規範允許在子流程中省略開始和結束事件,但目前流程引擎尚不支援此功能。
  1. 序列流不得跨越子流程邊界。

子流程和任務在活動中扮演相似的角色,因此它們的圖示也相似,主要差別在於子流程的圖示中多了一個加號(+)。子流程是流程中較為複雜或多步驟的活動,有時候也可以再細分成更小的子流程。子流程分為顯示有兩種形式:摺疊式子流程和展開式子流程。摺疊式子流程不顯示內部細節,像是一個黑盒子。

💡 使用子流程的主要原因之一在於為某個事件定義作用域。

子流程顯示型態

折疊子流程(Sub-Process(Expanded))

不顯示內部細節,像是一個黑盒子。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254XTMHl4LxAw.png

折疊子流程

(圖片來源:筆者自製,使用bpmn.io)

折疊子流程有分別為五類,「Loop」」、「Multi-Instance」、「Compensation」、「Ad-Hoc」、「Compensation and Ad-Hoc」,由於篇幅的關係不在此展開續講。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254yEamwVupfA.png

(圖片來源:Business Process Model and Notation(BPMN))P175

💡 其中「可重用的子流程」(Reusable Sub-Process)在BPMN 1.2被稱之為「活動呼叫」(Call Activity),用於呼叫預先定義的流程(外部)。

https://ithelp.ithome.com.tw/upload/images/20230920/201632546KbqsJ3glU.png

折疊流程

(圖片來源:筆者自製,使用bpmn.io)


展開子流程(Sub-Process object (expanded))

展開子流程將內部細節顯示出來,像是一個白盒子。雖然展開式子流程的圖示有多種變化,但基本上都是在一個子流程的內部包含了另一個完整的流程。

https://ithelp.ithome.com.tw/upload/images/20230920/201632548VFBmXn49m.png

展開子流程

(圖片來源:筆者自製,使用bpmn.io)

https://ithelp.ithome.com.tw/upload/images/20230920/20163254J8mmLrPzVz.png

展開流程

(圖片來源:筆者自製,使用bpmn.io)


訂購子流程範例(BPMN官方文件案例)

以官方的範例來說,著重在訂購付款及更新客戶個人付款資料的流程,筆者用更好理解的方式說明,就像我們在蝦皮上網購時點完「購物車」按完「結帳」後,進入到輸入的付款資訊和運送地址的頁面,我們這邊僅負責金流的部分。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254ShGdGnzGbw.png

(圖片來源:Business Process Model and Notation(BPMN))P178

💡 虛線長方形的是「事件子流程」(Event Sub-Process),下文會提及。

這時我們再將子流程簡化更能理解其中的作用,我們可以看到「booking」中如果順利完成就會跑「Successful Booking」這條通道,如果取消的話,會跑到「Failed Booking」,如果「Booking」出現意外,就會跳到「Handle through Customer Service」。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254SMtSBm0NFD.png

(圖片來源:Business Process Model and Notation(BPMN))P179

我們再次將子流程簡化,不展示「Bookings」內的內容,只可以看到「成功」、「取消」、「例外」的狀況。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254o1lP5DM3qF.png

(圖片來源:Business Process Model and Notation(BPMN))P179

透過有效的利用子流程,將業務邏輯成功串起來並連貫在一塊,也透過折疊及展開的方式,可以切換不同的視角,來回優化業務邏輯,以及讓其他同仁更加快速了解展體邏輯架構。


活動呼叫

活動呼叫(Call Activity)是主要使用情境是當我們擁有可重複使用的流程定義,可以從其他流程中呼叫該定義的流程。 當流程執行達到活動呼叫時,會創建一個新的流程實例,用於執行該子流程,就像在常規流程中創建並行的子流程執行一樣。主流程實例會等待,直到子流程完全結束,然後才繼續執行原始流程。

下方的流程圖展示了對金流的簡單處理。舉例來說,因為「檢查」和「支付」子流程可能會被許多其他流程共用,所以我們將它們建模為活動呼叫。活動呼叫的範例如圖所示。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254fAGgIItW9R.png

活動呼叫

(圖片來源:筆者自製,使用bpmn.io)

💡 活動呼叫(Call Activity)是指引用位於流程定義之外的外部流程。
子流程(Sub-Process)則是嵌入在原始流程定義中的一部分。

事件子流程

事件子流程(Event Sub-Process)是在事件觸發時啟動的子流程,可以在主要流程或其他子流程中加入。觸發事件子流程的事件稱為「開始事件」,因此,事件子流程不支援空白的開始事件。我們可以使用訊息事件、錯誤事件、訊號事件、定時器事件或補償事件等來觸發事件子流程。在建立承載事件子流程的範圍(流程執行或子流程)時,會建立對開始事件的訂閱,當範圍結束時,這個訂閱將被移除。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254mKCjIMlJ3Y.png

(圖片來源:Business Process Model and Notation(BPMN))P17

事件子流程可以是中斷型的,或是非中斷型的。中斷型子流程會取消當前範圍內的所有活動,而非中斷型事件子流程則會產生一個新的並行執行分支。雖然每次觸發承載中斷事件子流程的範圍時,只能執行一次中斷事件子流程,但可以類似的方式多次觸發非中斷事件子流程。

事件子流程可能沒有任何傳入或傳出的序列流,由於是在事件觸發時啟動的,傳入的序列流就變得沒有意義。當事件子流程結束時,可以是終止中斷事件子流程的目前範圍,或者終止非中斷子流程所產生的並行執行分支。

虛線長方形框線就是事件子流程。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254JHdHbMVMtB.png

(圖片來源:Business Process Model and Notation(BPMN))P178


事務子流程

事務子流程是一種嵌入式子流程,可以將多個活動分組成一個事務單位。事務是一個邏輯工作單元,允許將一組獨立的活動分組,使它們可以一起成功或失敗。一個事務子流程有三種可能的結果。

  1. 若事務未突然取消或終止,事務將成功。當事務子流程成功時,它會使用傳出序列流。稍後如果在流程中引發補償事件,可能會對成功的事務進行補償。需要注意的是,與「普通」嵌入式子流程一樣,事務子流程在成功完成後,可以使用中間引發的補償事件來執行補償。
  2. 若執行到取消結束事件,事務將被取消。在這種情況下,所有執行將被中止並取消。接著會將剩餘的一個執行設置為取消邊界事件,該事件會觸發補償。補償完成後,事務子流程將跟隨取消邊界事件的傳出序列流離開。
  3. 若拋出的錯誤事件在事務子流程的範圍內未被捕獲,事務將被終止。在這種情況下,將不會執行補償。

https://ithelp.ithome.com.tw/upload/images/20230920/20163254fkfrhWEjw1.png

(圖片來源:Business Process Model and Notation(BPMN))P179

我們現在已經知道在BPMN中的事件,恭喜您對BPMN有「子流程」的運用有所了解,現在我們已經對BPMN有所掌握,那麼明天開始我們就可以一起學習怎麼運用Camunda,我們一起加油吧~~


💡 如果有任何問題,歡迎在下方留言!! 筆者頭一回寫技術文,如果內容有誤,或者內容的呈現上有所缺陷,如果您願意,歡迎在下方留言給我呦~~

anything.best

這是我的部落格,歡迎點擊閱覽喔~~會不定期更新文章

Follow me

I work on everything coding and tweet developer memes