BPMN2.0 規范


1 啟動事件

每個流程總是以啟動事件作為入口,啟動事件在BPMN2.0 中以細線圓圈表示。分為三種類型

  • 空啟動事件
  • 定時啟動事件
  • 異常啟動事件
  • 消息啟動事件

啟動事件都是等待第三方觸發才可以啟動。

定時啟動事件用於定期循環流程或一次性流程。定時事件是使用 <timerEventDefinition> 描述一個定時事件

異常啟動事件:是在另外一個流程拋出異常結束事件時被觸發,異常啟動事件是“捕獲型”,異常結束事件是“拋出型”。異常結束事件對應throw,異常啟動事件是catch,並且執行catch 后獲取不同類型的異常。異常啟動事件必須要嵌套在事件子流程中。

消息啟動事件:可以通過一個消息名稱觸發,從而啟動一個流程實例。可以和消息拋出事件一塊使用,由流程自動根據消息名稱啟動對應的流程。借助這個功能在實際應用中可以為不同的業務處理結果啟動不同的流程。

 

2 結束事件,BPMN2.0 中以加粗的圓圈表示,結束事件是拋出型的。

結束事件可以分為以下3種類型

  • 空結束事件
  • 異常結束事件
  • 終止結束事件
  • 取消結束事件

空結束事件,正常結束后流程引擎就不會再執行其他操作了,沒有其他后續處理。一般用於正常結束流程。如果需要處理異常就需要異常結束事件或邊界事件處理。

異常結束事件,是有拋出結果的,他定義了需要拋出的錯誤代碼,如果找到了異常開始事件定義的異常代碼,則會觸發異常開始事件,否則按照空結束事件規則處理。

說明:異常結束事件的錯誤代碼不能為空。

終止結束事件,可以終止一個流程實例的執行,空結束事件結束的是一條輸出流,而終止結束事件結束的是整個流程實例。

取消結束事件,可以取消一個事務子流程,同時也只能在子流程中使用。取消結束事件可以和取消邊界事件結合使用針對取消操作做后續處理。

 

3 順序流,是兩個模型之間的連接者。BPMN2.0 默認順序流是並行的,多個輸出順序流會創建多條獨立、並行的執行路徑。

順序流可以分為兩種,使用sequenceFlow 表示順序流,

  • 標准順序流
  • 條件順序流

  3.1 標准順序流,使用 sourceRef 屬性指定順序流的源, 使用 targetRef 指定順序流的目的模型。

  3.2 條件順序流,在標准順序流上添加條件表達式,只有滿足條件才能通過順序流達到目標活動。在不設置條件順序流就是標准順序流,設置條件的就是條件順序流。

 

4 任務,任務分類如下

4.1 用戶任務,需要有人來參與,因為他必須人為觸發。可以設置任務名稱、優先級、到期日和任務處理人

activiti 在 BPMN2.0 基礎上進行擴展,簡化設置用戶、組的方式,而且支持運行時獲取用戶、組分配給用戶任務。還可以為用戶任務添加任務監聽,監聽選項有創建、分配、完成。擴展屬性如下

4.2 腳本任務,可以運行引擎依賴語言之外的腳本語言,例如 Groovy,javascript,juel。

4.3 java Service,不屬於BPMN2.0 規范,是activiti 擴展的專門用於java語言的 serviceTask,允許定義一個實現了指定接口的 java 類或者執行一個表達式。

4.4 web service,可以調用外部的 Web Service 資源,只需要一些必須的配置即可。支持標准的 Web Service 和 REST 風格的 Service,

4.6 郵件任務,可以通過activiti發送郵件,其中的郵件信息通過變量方式傳遞。由 activiti 擴展專門處理郵件任務。

發送郵件需要配置郵件服務器信息到流程引擎中,可以在 activiti.cfg.xml 定義的引擎屬性中設置。

4.7 Camel 任務是用來解決消息路由的框架

4.8 手動任務,他不做任何事情,僅用來定義 BPM 不能完成的任務。

4.9 接受任務,任務創建之后等待消息的到來,直到被觸發才會完成任務。僅能通過 RuntimeService 接口的 signal(),方法發送信號觸發接受任務,原理類似現成的等待和恢復。

 

5 網關,用於控制流程走向(BPMN2.0 中稱為執行令牌),可以分為4種網關

  • 排他網關
  • 並行網關
  • 包容網關
  • 事件網關

5.1 排他網關 (Exclusive gateway 也稱為 XOR gateway),流程執行到該網關時,按照輸出流的順序逐個計算,當條件的計算結果為true時,繼續執行當前網關的輸出流。

如果多條線路計算結果都是 true,則會執行第一個值為 true 的線路。如果所有網關計算結果沒有true,則引擎會拋出異常。

排他網關需要和條件順序流結合使用,default 屬性指定默認順序流,當所有的條件不滿足時會執行默認順序流。

 

5.2 並行網關(Parallel Gateway),能把單條線路任務拆分成多個路徑並行執行或將多條線路合並。

  • 拆分,並行執行所有輸出順序流,為每一條順序流創建一個並行執行線路。
  • 合並,所有從並行網關拆分並執行完成的線路均在此等候,直到所有的線路都執行完成才繼續向下執行。

5.3 包容網關(inclusivegateway),可以同時執行多條線路,也可以在網關上設置條件。

  • 拆分,計算每條線路上的表達式,當表達式計算結果為true時,創建一個並行線路並繼續執行。
  • 合並,所有從並行網關拆分並執行完成的線路均在此等候,直到所有的線路都執行完成才繼續向下執行。

5.4 事件網關(EventGateway),專門為中間捕獲事件設置的,允許設置多個輸出流指向多個不同的中間捕獲事件。當流程執行到事件網關后,流程處於等待狀態,需要等待拋出事件才能將等待狀態轉換為活動狀態。

說明:

1)事件網關的輸出流數量必須大於2個

2)輸出流類型只能是中間捕獲事件,activiti 不支持接受任務后面的事件網關

3)中間捕獲事件的輸出流只能有一個

 

6 子流程和調用活動,子流程是嵌入在主流程中,調用活動是有子流程的特性又保持通用。

說明:

子流程的限制

1)只能且僅能包含一個空啟動事件

2)至少要有一個結束事件

3)子流程中順序流不能直接設置輸出流到子流程之外的活動上,如果需要可以通過邊界事件代替。

 

6.2 調用活動和子流程的作用一致,通過創建一個調用活動模型並指定外部流程的 ID 方式作為主流程的一個子活動。

6.3 事件子流程:和子流程類似,不同的是事件子流程不能直接啟動,需要有相應事件觸發啟動。

6.4 事務子流程:處理一組必須在同一個事務中完成的活動,這些活動要么一塊完成,要么一起失敗。

 

7 邊界與中間事件,中間事件提供的特殊功能可以處理流程執行過程中拋出、捕獲的事件。有邊界事件、中間捕獲事件、中間拋出事件。

7.1 邊界事件:是綁定在活動上的“捕獲型”事件,會一直監聽所有處於運行中活動的某種事件的觸發,在捕獲到事件之后中斷活動,然后從邊界事件類型的輸出流繼續運行。

一旦觸發邊界事件,當前的活動就會被中斷,按照邊界事件之后的輸出流執行。一個活動只能綁定一個邊界事件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM