
業務流程模型與符號(BPMN)作為描述工作流程的通用語言。在此視覺標準中,事件作為推動整個流程前進的觸發點與結果。若未能清楚理解這些事件的運作方式,流程模型可能變得模糊或技術上無法執行。本指南將剖析三種主要類別:開始事件、中間事件與結束事件。
在BPMN符號中,事件以圓形表示。其內部符號決定其特定行為。它們標示流程活動的開始、發生或終止。正確掌握這些細節,可確保邏輯順利地從一個任務流轉至下一個任務。
🟢 開始事件:觸發點
開始事件啟動一個流程。它是工作流程開始執行的入口點。視覺上,開始事件是一個邊框較細的圓形。有特定類型的開始事件,決定了流程如何被觸發。
1. 無開始事件
- 符號:大圓形內有一個空心圓。
- 行為: 這是預設設定。它會等待手動干預或外部系統呼叫以啟動流程。
- 使用案例: 適合於按需啟動的流程,例如由使用者啟動的「申請批准」工作流程。
2. 消息開始事件
- 符號:圓形內有一個信封圖示。
- 行為: 當收到特定訊息時,流程開始。這表示為非同步觸發。
- 使用案例: 接收電子郵件確認或API回調,以啟動履行流程。
3. 定時開始事件
- 符號:圓形內有一個時鐘面圖示。
- 行為: 流程在特定時間或根據重複的時間表啟動。
- 使用案例: 每日報表生成、每月薪資發放或系統備份。
4. 訊號開始事件
- 符號: 圓形內有一道黃色的閃電。
- 行為: 當訊號被廣播時,流程便開始。此訊號可同時被多個流程捕獲。
- 使用案例: 觸發不同部門維護工作流程的全球系統警示。
5. 錯誤開始事件
- 符號: 圓形內的驚嘆號(通常為紅色)。
- 行為: 在標準流程中很少用作開始事件,但若流程設計為在啟動時立即從特定錯誤狀態恢復,則技術上是可行的。
必須強調的是,一個流程必須恰好有一個開始事件。擁有多个開始事件可能會導致對哪個條件啟動工作流程產生混淆。
🟡 中間事件:發生
中間事件發生在流程執行期間。它們位於開始事件與結束事件之間。這些事件可以捕獲事件(等待某種情況)或拋出事件(發送某種訊號)。視覺上,它們是邊框較粗的圓形。
1. 中間捕獲事件
這些事件會暫停流程,直到滿足特定條件為止。一旦條件達成,流程便繼續進行。
- 訊息捕獲: 等待特定訊息到達。流程會暫停,直到收到資料為止。
- 計時器捕獲: 將流程延遲一段特定時間(例如:等待3天)或直到特定日期。
- 錯誤捕獲: 等待上游任務拋出特定錯誤。這通常用於錯誤處理子流程中。
- 訊號捕獲: 等待訊號被廣播。與訊息不同,訊號是廣播的,而非發送給特定接收者。
- 連結捕獲: 連接到同一流程中的連結拋出事件。適用於長迴圈或複雜流程。
- 升級捕獲: 等待升級被拋出。這專門用於處理流程升級。
2. 中間拋出事件
這些事件在流程經過時立即觸發動作。它們不會暫停流程。
- 訊息拋出: 立即向另一參與者或系統發送訊息。
- 訊號拋出: 向所有監聽該特定訊號的流程廣播訊號。
- 升級拋出: 在流程邏輯中觸發升級。
- 連結拋出: 將控制流程傳送至圖表中其他位置的連結捕獲事件。
3. 中間邊界事件
一種特殊類型的中間事件,附著於任務或子流程的邊界上。它提供了一種在不立即中止主流程的情況下處理中斷的方式。
- 取消邊界: 若事件發生,則取消該活動。
- 計時器邊界: 若任務執行時間過長(逾時),則觸發另一條路徑。
- 訊息邊界: 允許任務繼續執行,同時也監聽訊息。
- 錯誤邊界: 捕獲在附著任務執行過程中拋出的錯誤。
理解捕獲與拋出之間的區別至關重要。捕獲是等待;拋出是行動。混淆兩者可能導致流程無限期掛起或提前執行。
🔴 結束事件:終止
結束事件表示流程的成功或失敗完成。它標示執行的最終點。與開始事件一樣,它們是圓形,但通常具有粗邊框以表示終結性。
1. 無結束事件
- 符號: 空圓圈。
- 行為: 流程僅簡單停止。不會發送任何資料,也不會發出外部通知。
- 使用案例: 一個標準工作流程,完成時無需進一步的外部確認。
2. 訊息結束事件
- 符號: 信封圖示。
- 行為: 在流程的最後一步發送訊息。
- 使用案例: 向客戶發送「訂單已完成」確認郵件。
3. 訊號結束事件
- 符號: 黃色閃電。
- 行為: 廣播訊號以終止其他相關流程或通知系統。
- 使用案例: 通知全球狀態更新,指出特定交易已完成。
4. 錯誤結束事件
- 符號: 感嘆號。
- 行為: 表示流程因錯誤狀況而結束。
- 使用案例: 記錄無法恢復的失敗交易。
5. 終止結束事件
- 符號: 粗體圓圈帶叉號(X)或粗邊框。
- 行為: 立即停止整個流程實例,取消所有活躍的平行路徑。
- 使用案例: 取消訂單,其中所有後續步驟必須立即中止。
📊 事件對比表
為直觀呈現差異,請參考以下對比。
| 功能 | 開始事件 | 中間事件 | 結束事件 |
|---|---|---|---|
| 形狀 | 圓形(細邊框) | 圓形(粗邊框) | 圓形(粗邊框) |
| 連接流程 | 僅有一個外向流程 | 一個內向,一個外向 | 僅有一個內向流程 |
| 流程數量 | 每個流程僅一個 | 每個流程可為零或多個 | 每個流程可為零或多個 |
| 時機 | 啟動流程 | 在流程中發生 | 終止流程 |
| 主要功能 | 觸發 | 等待、發送或處理 | 完成或中止 |
⚠️ 最佳實務與常見陷阱
在建模複雜流程時,遵循標準可避免歧義。以下是維持清晰度與技術完整性的關鍵指南。
1. 避免孤立事件
確保每個事件都連接到流程。若事件沒有流入或流出的序列流程,通常為建模錯誤。中間事件必須具有一個流入和一個流出連接,除非它們附著於任務邊界。
2. 区分計時器類型
不要混淆計時器開始事件與計時器中間事件。
- 計時器開始: 流程開始 因為 定時器的
- 定時器中間事件: 流程暫停 因為 定時器的
3. 使用邊界事件處理例外情況
不必建立複雜的閘門來檢查錯誤,而是將錯誤邊界事件附加到任務上。這能讓正常流程保持清晰,並在視覺上分離錯誤邏輯。
4. 命名慣例
清楚地標示您的事件。例如「訊息捕獲」應以訊息名稱標示(如「接收付款確認」)。這有助於利害關係人理解在該特定節點所需的資料。
5. 限制訊號複雜度
雖然訊號功能強大,但過度使用會使流程難以追蹤。訊號是全域的,若拋出訊號,多個流程都可能做出反應。請在輔助圖表或規格說明中記錄這些依賴關係。
6. 流程方向
務必確保流程從開始流向結束。中間事件不應產生迴圈,除非明確使用閘門設計。無限迴圈表示事件處理中存在邏輯錯誤。
🛠 實作考量
將圖表轉換為可執行程式碼,需要特別注意事件語義。
- 狀態管理:中間事件通常需要引擎維持狀態(例如等待訊息)。若太多流程同時等待,將影響效能。
- 非同步行為:訊息事件代表非同步通訊。系統必須處理訊息佇列與重試機制。
- 逾時處理:定時事件必須能抵禦時鐘變動或系統停機。若系統重啟10分鐘,1小時的定時器也不應失敗。
- 錯誤傳播:若錯誤事件未在本地處理,應向上傳播至層級結構。請確保邊界條件正確定義。
🔍 事件行為詳細分析
讓我們探討真實情境中特定事件互動的細節。
情境:訂單處理
想像一個處理客戶訂單的工作流程。此情境使用了所有三種事件類型。
- 開始: 一個 訊息開始事件 從電子商務平台接收「新訂單」資料。
- 中間:庫存檢查後,一個中間計時器事件等待24小時以確認付款。如果未收到付款,則一個中間訊息拋出事件發送提醒訊息。
- 結束:一旦付款確認,一個訊息結束事件將出貨細節發送至倉庫。
在此流程中,中間計時器事件扮演守門人的角色。如果計時器到期,流程將轉向備用路徑(提醒)。如果訊息在計時器到期前收到,流程則繼續至結束事件。
處理並行事件
如果一個流程正在等待訊息,但發生錯誤會怎麼樣?這正是事件子流程發揮作用的地方。事件子流程允許您定義一個由事件觸發的獨立路徑,與主流程無關。這在意外事件發生時維持系統穩定至關重要。
- 事件子流程觸發條件:只能是中間捕獲事件(錯誤、計時器、訊息、信號、升級)。
- 執行: 它與主流程並行執行。
- 作用範圍: 它包含在主流程中,但具有自己的內部流程。
🔗 連結事件與連接
連結事件是中間事件的一個獨特子集,用於連接圖表中物理上相距較遠的流程,或用於管理複雜的迴圈邏輯。
- 連結拋出: 作為目的地標記。
- 連結捕獲: 作為來源標記。
雖然它們能減少交叉線條的需求,但過度使用會使圖表難以閱讀。應節制使用,以保持視覺流程的直觀性。
📝 重點摘要
掌握BPMN事件的細節對於建立穩健的流程模型至關重要。開始事件定義入口,中間事件管理流程與中斷,結束事件定義出口。
- 一致性:堅持使用標準形狀。不要隨意混合細邊框和粗邊框。
- 清晰度:根據動作命名您的事件,而不是根據形狀。
- 邏輯:確保每條路徑都通向終止或有效的循環。
- 驗證:檢查每個流程實例中的每個開始和結束事件是否唯一。
透過應用這些原則,流程架構師可以建立不僅視覺上清晰,而且對執行引擎技術上穩固的模型。等待(捕獲)與行動(拋出)之間的區別,仍然是最需要內化的關鍵概念。












