bpmn事件

1、bpmn的相關性

任務和網關是我們到目前爲止瞭解的三個流元素中的兩個:事情(任務)必須在特定的環境(網關)下完成。還有一個流元素:應該發生的事情(事件)。對於bpmn流程模型來說,事件的重要性不亞於任務或網關。我們應該從應用它們的一些基本原則開始。比如:

1、捕獲事件並拋出異常。

2、啓動事件、中間事件和結束事件。

捕獲事件是具有定義觸發器的事件。我們認爲,一旦觸發器被激活或觸發,它們就會發生。作爲一個智力結構,這是相對複雜的,因此我們通過調用它們捕捉事件來簡化它。關鍵在於,這些事件會影響流程的進程,因此必須對其建模。捕獲事件可能導致:

1、這個過程開始

2、進程或進程路徑正在繼續

3、當前正在處理的任務或正在取消的子進程

4、執行任務或子進程時使用的另一個進程路徑

bpmn假設拋出事件是自己觸發的,而不是對觸發器做出反應。可以說,與被動捕獲事件相比,它們是主動捕獲事件。我們簡稱它們爲拋出事件,因爲是進程觸發它們的。投擲事件可以:

1、在過程中觸發

2、在流程結束時觸發

因此,啓動事件總是發生的事件。流程在啓動之前不能觸發事件。最簡單的啓動事件應用程序如圖1.1所示。當事件發生時,流程啓動。

圖1.1:一旦事件1發生,流程就會啓動。

注意:圓圈中的問號表示此事件可以分配給特定類型。到目前爲止,我們還沒有報道任何事件。下面幾節將解釋可能的事件類型。

不同的事件可能會觸發流程,可以對其建模,如圖1.2所示。每個事件觸發自己的流程實例是很重要的。

圖1.2:一旦事件1或事件2發生,流程就會啓動。

另一方面,假設您希望對流程啓動之前必鬚髮生的幾個事件進行建模。很多人會對這種情況建模,如圖2.31所示。

圖1.3:壞:技術上來說,這個模型會導致死鎖

這是直觀的,但不幸的是它是不正確的,而且很少有bpmn初學者理解爲什麼它是不正確的。原因是and merge不支持相關性,因此流程將無法識別這兩個事件是關聯的。我們會在後續的文章中詳細介紹bpmn是如何提供解決方案的。

 

流程可能需要發生特定的中間事件,如圖1.4所示。任務1完成後,必須在任務2完成之前發生事件1。使用令牌方法時,令牌會在事件1處等待,直到事件發生爲止。只有這樣,令牌纔會繼續,並啓動任務2。

圖1.4:在任務1之後,流程將等待,直到事件1發生。只有這樣,它才能繼續執行任務2。

注意:none事件(如2.2節中所解釋的)不是捕獲事件。它屬於投擲項目。

我們如何表示一個進程必須等待兩個事件?我們在圖1.5中顯示的是有缺陷的。任務1完成後,令牌繼續並等待事件1發生。如果事件2發生時,令牌正在等待事件1,令牌將不會注意到它。更糟糕的是,如果事件1發生在事件2之後,令牌將繼續,然後等待事件2發生。由於事件2已經發生,令牌將永遠等待。

圖1.5:順序的中間事件只能一個接一個地被識別

因此,捕獲事件的語義不是檢查可能已經滿足的條件,而是將捕獲事件視爲在發生後立即消失的臨時信號。因此,流程只有在事件發生時恰好處於準備接收狀態時才能處理該事件。在純功能流程建模中,這些細節通常會被忽略,但是,在技術流程建模中必須遵循這些細節。

如果我們需要等待兩個可能獨立發生的事件,但是這兩個事件必須在流程繼續之前發生,那麼我們將表示如圖1.6所示的情況。

圖1.6:使用並行網關同時等待多個事件

我們可以用bpmn建模附加的中間事件。它們不顯式地需要等待,但它們確實會中斷我們的活動,包括任務和子流程(稍後將討論)。之所以附加這些中間事件,是因爲我們將它們放置在想要中斷的活動的邊界上。在圖1.7中所示的過程中運行的令牌的行爲如下:

令牌移到任務1,相應啓動。

如果在處理任務1時發生事件1,任務1將立即取消,令牌將通過異常流轉移到任務3。另一方面,如果事件1沒有發生,則將處理task 1,令牌將通過常規序列流轉移到task 2。

如果事件1只在任務1完成後發生,那麼它就不再重要。

圖1.7:事件1取消任務1並啓動任務3

由於中間事件不中斷,附加的中間事件不必導致活動被取消。這聽起來很尷尬,但很有用。令牌在圖1.8中所示的process部分中移動,如下所示。

1、令牌移到任務1,相應啓動。

2、如果在處理任務1時發生事件1,則克隆令牌。在第二個令牌移動到任務3時,任務1繼續被處理,現在任務3也被處理了。這個過程甚至可能重複發生,也就是說,事件可能多次發生。每次出現都會導致另一個克隆標記。

3、如果事件1沒有發生,任務1將完成,令牌將通過常規序列流轉移到任務2。

4、如果事件1只在任務1完成後發生,那麼它就不再重要。

圖1.8:事件1的發生導致了task 3的啓動,而task 1正在被進一步處理

進程觸發拋出中間事件。這意味着在這樣的事件中發生的令牌會觸發它,然後立即繼續。拋出事件不會導致活動被取消,這就是它們永遠不能被附加的原因。它們只出現在序列流中。我們已經知道了none中間事件,該事件可用於將條目建模爲已定義狀態。這也是一個投擲活動。

在下面的部分中,我們將介紹使用bpmn時使用的事件類型。我們還將解釋如何使用基於事件的網關對不同事件作出反應。事件類型有:

消息

計時器

錯誤

有條件的

信號

終止

鏈接

補償

多個

平行

升級

取消


 本文會持續更新,歡迎關注,技術支持:盤古BPM

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章