bpmn事件
1、bpmn的相關(guān)性
任務(wù)和網(wǎng)關(guān)是我們到目前為止了解的三個(gè)流元素中的兩個(gè):事情(任務(wù))必須在特定的環(huán)境(網(wǎng)關(guān))下完成。還有一個(gè)流元素:應(yīng)該發(fā)生的事情(事件)。對(duì)于bpmn流程模型來(lái)說(shuō),事件的重要性不亞于任務(wù)或網(wǎng)關(guān)。我們應(yīng)該從應(yīng)用它們的一些基本原則開始。比如:
1、捕獲事件并拋出異常。
2、啟動(dòng)事件、中間事件和結(jié)束事件。
捕獲事件是具有定義觸發(fā)器的事件。我們認(rèn)為,一旦觸發(fā)器被激活或觸發(fā),它們就會(huì)發(fā)生。作為一個(gè)智力結(jié)構(gòu),這是相對(duì)復(fù)雜的,因此我們通過(guò)調(diào)用它們捕捉事件來(lái)簡(jiǎn)化它。關(guān)鍵在于,這些事件會(huì)影響流程的進(jìn)程,因此必須對(duì)其建模。捕獲事件可能導(dǎo)致:
1、這個(gè)過(guò)程開始
2、進(jìn)程或進(jìn)程路徑正在繼續(xù)
3、當(dāng)前正在處理的任務(wù)或正在取消的子進(jìn)程
4、執(zhí)行任務(wù)或子進(jìn)程時(shí)使用的另一個(gè)進(jìn)程路徑
bpmn假設(shè)拋出事件是自己觸發(fā)的,而不是對(duì)觸發(fā)器做出反應(yīng)。可以說(shuō),與被動(dòng)捕獲事件相比,它們是主動(dòng)捕獲事件。我們簡(jiǎn)稱它們?yōu)閽伋鍪录?#xff0c;因?yàn)槭沁M(jìn)程觸發(fā)它們的。投擲事件可以:
1、在過(guò)程中觸發(fā)
2、在流程結(jié)束時(shí)觸發(fā)
因此,啟動(dòng)事件總是發(fā)生的事件。流程在啟動(dòng)之前不能觸發(fā)事件。最簡(jiǎn)單的啟動(dòng)事件應(yīng)用程序如圖1.1所示。當(dāng)事件發(fā)生時(shí),流程啟動(dòng)。
圖1.1:一旦事件1發(fā)生,流程就會(huì)啟動(dòng)。
注意:圓圈中的問(wèn)號(hào)表示此事件可以分配給特定類型。到目前為止,我們還沒有報(bào)道任何事件。下面幾節(jié)將解釋可能的事件類型。
不同的事件可能會(huì)觸發(fā)流程,可以對(duì)其建模,如圖1.2所示。每個(gè)事件觸發(fā)自己的流程實(shí)例是很重要的。
圖1.2:一旦事件1或事件2發(fā)生,流程就會(huì)啟動(dòng)。
另一方面,假設(shè)您希望對(duì)流程啟動(dòng)之前必須發(fā)生的幾個(gè)事件進(jìn)行建模。很多人會(huì)對(duì)這種情況建模,如圖2.31所示。
圖1.3:壞:技術(shù)上來(lái)說(shuō),這個(gè)模型會(huì)導(dǎo)致死鎖
這是直觀的,但不幸的是它是不正確的,而且很少有bpmn初學(xué)者理解為什么它是不正確的。原因是and merge不支持相關(guān)性,因此流程將無(wú)法識(shí)別這兩個(gè)事件是關(guān)聯(lián)的。我們會(huì)在后續(xù)的文章中詳細(xì)介紹bpmn是如何提供解決方案的。
?
流程可能需要發(fā)生特定的中間事件,如圖1.4所示。任務(wù)1完成后,必須在任務(wù)2完成之前發(fā)生事件1。使用令牌方法時(shí),令牌會(huì)在事件1處等待,直到事件發(fā)生為止。只有這樣,令牌才會(huì)繼續(xù),并啟動(dòng)任務(wù)2。
圖1.4:在任務(wù)1之后,流程將等待,直到事件1發(fā)生。只有這樣,它才能繼續(xù)執(zhí)行任務(wù)2。
注意:none事件(如2.2節(jié)中所解釋的)不是捕獲事件。它屬于投擲項(xiàng)目。
我們?nèi)绾伪硎疽粋€(gè)進(jìn)程必須等待兩個(gè)事件?我們?cè)趫D1.5中顯示的是有缺陷的。任務(wù)1完成后,令牌繼續(xù)并等待事件1發(fā)生。如果事件2發(fā)生時(shí),令牌正在等待事件1,令牌將不會(huì)注意到它。更糟糕的是,如果事件1發(fā)生在事件2之后,令牌將繼續(xù),然后等待事件2發(fā)生。由于事件2已經(jīng)發(fā)生,令牌將永遠(yuǎn)等待。
圖1.5:順序的中間事件只能一個(gè)接一個(gè)地被識(shí)別
因此,捕獲事件的語(yǔ)義不是檢查可能已經(jīng)滿足的條件,而是將捕獲事件視為在發(fā)生后立即消失的臨時(shí)信號(hào)。因此,流程只有在事件發(fā)生時(shí)恰好處于準(zhǔn)備接收狀態(tài)時(shí)才能處理該事件。在純功能流程建模中,這些細(xì)節(jié)通常會(huì)被忽略,但是,在技術(shù)流程建模中必須遵循這些細(xì)節(jié)。
如果我們需要等待兩個(gè)可能獨(dú)立發(fā)生的事件,但是這兩個(gè)事件必須在流程繼續(xù)之前發(fā)生,那么我們將表示如圖1.6所示的情況。
圖1.6:使用并行網(wǎng)關(guān)同時(shí)等待多個(gè)事件
我們可以用bpmn建模附加的中間事件。它們不顯式地需要等待,但它們確實(shí)會(huì)中斷我們的活動(dòng),包括任務(wù)和子流程(稍后將討論)。之所以附加這些中間事件,是因?yàn)槲覀儗⑺鼈兎胖迷谙胍袛嗟幕顒?dòng)的邊界上。在圖1.7中所示的過(guò)程中運(yùn)行的令牌的行為如下:
令牌移到任務(wù)1,相應(yīng)啟動(dòng)。
如果在處理任務(wù)1時(shí)發(fā)生事件1,任務(wù)1將立即取消,令牌將通過(guò)異常流轉(zhuǎn)移到任務(wù)3。另一方面,如果事件1沒有發(fā)生,則將處理task 1,令牌將通過(guò)常規(guī)序列流轉(zhuǎn)移到task 2。
如果事件1只在任務(wù)1完成后發(fā)生,那么它就不再重要。
圖1.7:事件1取消任務(wù)1并啟動(dòng)任務(wù)3
由于中間事件不中斷,附加的中間事件不必導(dǎo)致活動(dòng)被取消。這聽起來(lái)很尷尬,但很有用。令牌在圖1.8中所示的process部分中移動(dòng),如下所示。
1、令牌移到任務(wù)1,相應(yīng)啟動(dòng)。
2、如果在處理任務(wù)1時(shí)發(fā)生事件1,則克隆令牌。在第二個(gè)令牌移動(dòng)到任務(wù)3時(shí),任務(wù)1繼續(xù)被處理,現(xiàn)在任務(wù)3也被處理了。這個(gè)過(guò)程甚至可能重復(fù)發(fā)生,也就是說(shuō),事件可能多次發(fā)生。每次出現(xiàn)都會(huì)導(dǎo)致另一個(gè)克隆標(biāo)記。
3、如果事件1沒有發(fā)生,任務(wù)1將完成,令牌將通過(guò)常規(guī)序列流轉(zhuǎn)移到任務(wù)2。
4、如果事件1只在任務(wù)1完成后發(fā)生,那么它就不再重要。
圖1.8:事件1的發(fā)生導(dǎo)致了task 3的啟動(dòng),而task 1正在被進(jìn)一步處理
進(jìn)程觸發(fā)拋出中間事件。這意味著在這樣的事件中發(fā)生的令牌會(huì)觸發(fā)它,然后立即繼續(xù)。拋出事件不會(huì)導(dǎo)致活動(dòng)被取消,這就是它們永遠(yuǎn)不能被附加的原因。它們只出現(xiàn)在序列流中。我們已經(jīng)知道了none中間事件,該事件可用于將條目建模為已定義狀態(tài)。這也是一個(gè)投擲活動(dòng)。
在下面的部分中,我們將介紹使用bpmn時(shí)使用的事件類型。我們還將解釋如何使用基于事件的網(wǎng)關(guān)對(duì)不同事件作出反應(yīng)。事件類型有:
消息
計(jì)時(shí)器
錯(cuò)誤
有條件的
信號(hào)
終止
鏈接
補(bǔ)償
多個(gè)
平行
升級(jí)
取消
?本文會(huì)持續(xù)更新,歡迎關(guān)注,技術(shù)支持:盤古BPM
?
總結(jié)
- 上一篇: TGit之上传流程
- 下一篇: USB-C正反插带PD快充USB3.0输