工作流流程元素詳解:帶你分析工作流中的中間捕獲事件和觸發事件

Activiti工作流流程元素中中間捕獲事件和觸發事件

中間捕獲事件

定時中間捕獲事件

描述

圖形標記

XML內容

訊號中間捕獲事件

圖形標記

XML內容

訊息中間捕獲了事件

描述

圖形標記

XML內容

內部觸發事件

中間觸發了空事件

訊號中間觸發事件

描述

圖形標記

XML內容

補償中間觸發的事件

描述

圖形標記

XML內容

中間捕獲事件

所有中間捕獲事件都使用同樣的方式定義

中間捕獲事件的定義:

唯一標識(流程範圍內)一個結構為

XXXEventDefinition

的XML子元素(TimerEventDefinition)定義了中間捕獲事件的型別

定時中間捕獲事件

定時中間事件作為一個

監聽器

當執行到達捕獲事件節點,就會啟動一個定時器。當定時器觸發(比如,一段時間之後),流程就會沿著定時中間事件的外出節點繼續執行

圖形標記

定時器中間事件顯示成標準

中間捕獲事件,

內部是一個定時器小圖示:

XML內容

定時器中間事件定義為標準

中間捕獲事件.

指定型別的子元素為

timerEventDefinition

元素

訊號中間捕獲事件

中間捕獲訊號事件,透過

引用訊號定義來捕獲相同訊號名稱的訊號

訊號中間捕獲事件與其它事件(比如錯誤事件)不同:

訊號不會在捕獲之後被消費如果有兩個啟用的訊號邊界事件捕獲相同的訊號事件,兩個邊界事件都會被觸發,即便在不同的流程例項中

圖形標記

中間訊號捕獲事件顯示為一個普通的

中間事件

(圓圈套圓圈),內部有一個訊號小圖示。訊號小圖示是白色的(無填充),表示捕獲的意思

XML內容

訊號中間事件定義為普通的

中間捕獲事件.

對應型別的子元素是

signalEventDefinition

元素

訊息中間捕獲事件

中間捕獲訊息事件,捕獲特定名稱的訊息

圖形標記

中間捕獲訊息事件顯示為普通

中間事件

(圓圈套圓圈),內部是一個訊息小圖示。訊息圖示是白色的(無填充),表示捕獲的意思

XML內容

訊息中間事件定義為標準

中間捕獲事件.

指定型別的子元素是

messageEventDefinition

元素

內部觸發事件

所有內部觸發事件的定義都是一樣的

內部觸發事件定義包含:

唯一標識(流程範圍)使用格式為

XXXEventDefinition

的XML子元素(比如signalEventDefinition等)定義中間觸發事件的型別

中間觸發空事件

空中間觸發事件流程圖,用於表示流程中的某個狀態

可以

新增執行監聽器

可以新增自己的程式碼,把事件傳送給BAM工具或DWH。引擎不會為這個事件做任何事情,它直接徑直透過

訊號中間觸發事件

訊號中間觸發事件

為定義的訊號丟擲一個訊號事件

在activiti中,訊號會

廣播

到所有啟用的處理器中。訊號可以

透過同步和非同步方式釋出預設配置下,訊號是同步傳送的:

丟擲事件的流程例項會等到訊號傳送給所有捕獲流程例項才繼續執行捕獲流程例項也會在觸發流程例項的同一個事務中執行如果某個監聽流程出現了技術問題(丟擲異常),所有相關的例項都會失敗

訊號也可以非同步傳送:

會在到達丟擲訊號事件後決定哪些處理器是啟用的對這些啟用的處理器,會儲存一個非同步提醒訊息(任務),併發送給

jobExecutor

圖形標記

中間訊號觸發事件顯示為普通

中間事件

(圓圈套圓圈),內部有一個訊號小圖示,訊號圖示是黑色的(有填充),表示觸發的意思

XML內容

訊息中間事件定義為標準

中間觸發事件.

指定型別的子元素是

signalEventDefinition

元素

非同步訊號事件如下

補償中間觸發事件

用來觸發補償

觸發補償:

補償可以由

特定節點或包含補償事件的作用域

觸發補償是透過分配給

節點的補償處理器

來完成的當補償由節點觸發,對應的補償處理器會根據節點成功完成的次數執行相同次數如果補償由當前作用域觸發,當前作用域的所有節點都會執行補償,也包含併發分支補償的觸發是繼承式的:如果執行補償的節點是子流程,補償會作用到子流程中包含的所有節點如果子流程是內嵌節點,補償會遞迴觸發補償不會傳播到流程的上層如果補償在子流程中觸發,不會傳播到子流程範圍外

bpmn規範定義,由節點觸發的流程只會作用到子流程同一級別activiti的補償執行次序與流程執行順序相反:

最後完成的節點會最先執行補償補償中間觸發事件可以用來補償成功完成的事務性子流程

注意:

如果補償被一個包含子流程的作用域觸發,子流程還包含了關聯補償處理器的節點, 如果它已經成功完成了,補償只會傳播到子流程如果子流程中的節點也完成了,並關聯了補償處理器,如果子流程包含的這些節點還沒有完成,就不會執行補償處理器

這個流程中,我們有兩個併發分支,一個分支是內嵌子流程,一個是使用信用卡節點。假設兩個分支都啟動了,第一個分支等待使用者完成稽核預定任務。第二個分支執行使用信用卡節點, 併發生了一個錯誤,這導致取消預定事件,並觸發補償。這時,併發子流程還沒有結束,意味著補償事件不會傳播給子流程, 所以取消旅店預定這個補償處理器不會執行。如果使用者任務(就是內嵌子流程)在取消預定之前完成了,補償就會傳播給內嵌子流程

流程變數:

當補償內嵌子流程時,用來執行補償處理器的分支可以訪問子流程的本地流程例項,因為這時是子流程完成的分支為了實現這個功能,流程變數的快照會分配給分支(為執行子流程而建立的分支)有以下限制條件:補償處理器無法訪問子流程內部建立的,新增到同步分支的變數

分配給分支的流程變數在繼承關係上層的

(分配給流程例項的流程變數沒有包含在快照中):補償觸發時,補償處理器透過它們所在的地方訪問這些流程變數變數快照只用於內嵌子流程,不適用其他節點

已知限制:

1。 waitForCompletion=“false”還不支援。當補償使用中間觸發補償事件觸發時, 事件沒有等待,在補償成功結束後

2。 補償自己由併發分支執行。併發分支的執行順序與被補償的節點完成次序相反。 未來activiti可能支援選項來順序執行補償

3。 補償不會傳播給callActivity呼叫的子流程例項

圖形標記

中間補償觸發事件顯示為標準

中間事件

(圓圈套圓圈),內部是一個補償小圖示。補償圖示是黑色的(有填充),表示觸發的意思

XML內容

補償中間事件定義為普通的

中間觸發事件.

對應型別的子元素是

compensateEventDefinition

元素

可選引數

activityRef

可以用來觸發特定作用域/節點的補償

相關文章