「DAY06」理解 BPMN 核心概念:子流程
昨天我們學習BPMN「網關」的概念,我們繼續認識BPMN,利用大概10分鐘的時間來學習BPMN中的零件「子流程」吧。
子流程(Sub-Process)用在流程/子流程中,對於大複雜的場景下,透過子流程,能將內部細節隱藏,獲得整體且概要的視角或展開視角,深入了解其中具體細節。
子流程
子流程(Sub-Process)一個內含其他活動、閘道、事件等元素的活動,本身即為一個流程,隸屬於更大流程的一部分。
若該子流程完全在父流程中定義,即可稱為嵌入式子流程。子流程主要應用有以下兩點:
- 分層建模:子流程可使流程模型更具層次感。許多建模工具允許摺疊子流程,隱藏其細節,僅展示高層次的端到端概觀。
- 事件作用域:子流程的執行可為事件創建新的範圍。子流程邊界處捕捉到的事件,僅在子流程內部有效。
我們使用子流程需遵守兩個限制:
- 子流程只能有一個空白開始事件,不得使用其他類型的開始事件。且子流程至少需擁有一個結束事件。
- 序列流不得跨越子流程邊界。
子流程和任務在活動中扮演相似的角色,因此它們的圖示也相似,主要差別在於子流程的圖示中多了一個加號(+)。子流程是流程中較為複雜或多步驟的活動,有時候也可以再細分成更小的子流程。子流程分為顯示有兩種形式:摺疊式子流程和展開式子流程。摺疊式子流程不顯示內部細節,像是一個黑盒子。
子流程顯示型態
折疊子流程(Sub-Process(Expanded))
不顯示內部細節,像是一個黑盒子。
折疊子流程
(圖片來源:筆者自製,使用bpmn.io)
折疊子流程有分別為五類,「Loop」」、「Multi-Instance」、「Compensation」、「Ad-Hoc」、「Compensation and Ad-Hoc」,由於篇幅的關係不在此展開續講。
(圖片來源:Business Process Model and Notation(BPMN))P175
折疊流程
(圖片來源:筆者自製,使用bpmn.io)
展開子流程(Sub-Process object (expanded))
展開子流程將內部細節顯示出來,像是一個白盒子。雖然展開式子流程的圖示有多種變化,但基本上都是在一個子流程的內部包含了另一個完整的流程。
展開子流程
(圖片來源:筆者自製,使用bpmn.io)
展開流程
(圖片來源:筆者自製,使用bpmn.io)
訂購子流程範例(BPMN官方文件案例)
以官方的範例來說,著重在訂購付款及更新客戶個人付款資料的流程,筆者用更好理解的方式說明,就像我們在蝦皮上網購時點完「購物車」按完「結帳」後,進入到輸入的付款資訊和運送地址的頁面,我們這邊僅負責金流的部分。
(圖片來源:Business Process Model and Notation(BPMN))P178
這時我們再將子流程簡化更能理解其中的作用,我們可以看到「booking」中如果順利完成就會跑「Successful Booking」這條通道,如果取消的話,會跑到「Failed Booking」,如果「Booking」出現意外,就會跳到「Handle through Customer Service」。
(圖片來源:Business Process Model and Notation(BPMN))P179
我們再次將子流程簡化,不展示「Bookings」內的內容,只可以看到「成功」、「取消」、「例外」的狀況。
(圖片來源:Business Process Model and Notation(BPMN))P179
透過有效的利用子流程,將業務邏輯成功串起來並連貫在一塊,也透過折疊及展開的方式,可以切換不同的視角,來回優化業務邏輯,以及讓其他同仁更加快速了解展體邏輯架構。
活動呼叫
活動呼叫(Call Activity)是主要使用情境是當我們擁有可重複使用的流程定義,可以從其他流程中呼叫該定義的流程。 當流程執行達到活動呼叫時,會創建一個新的流程實例,用於執行該子流程,就像在常規流程中創建並行的子流程執行一樣。主流程實例會等待,直到子流程完全結束,然後才繼續執行原始流程。
下方的流程圖展示了對金流的簡單處理。舉例來說,因為「檢查」和「支付」子流程可能會被許多其他流程共用,所以我們將它們建模為活動呼叫。活動呼叫的範例如圖所示。
活動呼叫
(圖片來源:筆者自製,使用bpmn.io)
事件子流程
事件子流程(Event Sub-Process)是在事件觸發時啟動的子流程,可以在主要流程或其他子流程中加入。觸發事件子流程的事件稱為「開始事件」,因此,事件子流程不支援空白的開始事件。我們可以使用訊息事件、錯誤事件、訊號事件、定時器事件或補償事件等來觸發事件子流程。在建立承載事件子流程的範圍(流程執行或子流程)時,會建立對開始事件的訂閱,當範圍結束時,這個訂閱將被移除。
(圖片來源:Business Process Model and Notation(BPMN))P17
事件子流程可以是中斷型的,或是非中斷型的。中斷型子流程會取消當前範圍內的所有活動,而非中斷型事件子流程則會產生一個新的並行執行分支。雖然每次觸發承載中斷事件子流程的範圍時,只能執行一次中斷事件子流程,但可以類似的方式多次觸發非中斷事件子流程。
事件子流程可能沒有任何傳入或傳出的序列流,由於是在事件觸發時啟動的,傳入的序列流就變得沒有意義。當事件子流程結束時,可以是終止中斷事件子流程的目前範圍,或者終止非中斷子流程所產生的並行執行分支。
虛線長方形框線就是事件子流程。
(圖片來源:Business Process Model and Notation(BPMN))P178
事務子流程
事務子流程是一種嵌入式子流程,可以將多個活動分組成一個事務單位。事務是一個邏輯工作單元,允許將一組獨立的活動分組,使它們可以一起成功或失敗。一個事務子流程有三種可能的結果。
- 若事務未突然取消或終止,事務將成功。當事務子流程成功時,它會使用傳出序列流。稍後如果在流程中引發補償事件,可能會對成功的事務進行補償。需要注意的是,與「普通」嵌入式子流程一樣,事務子流程在成功完成後,可以使用中間引發的補償事件來執行補償。
- 若執行到取消結束事件,事務將被取消。在這種情況下,所有執行將被中止並取消。接著會將剩餘的一個執行設置為取消邊界事件,該事件會觸發補償。補償完成後,事務子流程將跟隨取消邊界事件的傳出序列流離開。
- 若拋出的錯誤事件在事務子流程的範圍內未被捕獲,事務將被終止。在這種情況下,將不會執行補償。
(圖片來源:Business Process Model and Notation(BPMN))P179
我們現在已經知道在BPMN中的事件,恭喜您對BPMN有「子流程」的運用有所了解,現在我們已經對BPMN有所掌握,那麼明天開始我們就可以一起學習怎麼運用Camunda,我們一起加油吧~~
這是我的部落格,歡迎點擊閱覽喔~~會不定期更新文章