包容網關

1、基於數據的包容網關

想讓我們的過程更加靈活:當我們餓的時候,我們想要喫東西

  1. 只有一個沙拉,
  2. 沙拉和一些意大利麪或牛排,
  3. 或者只是意大利麪或牛排。

使用到目前爲止學到的符號,我們可以使用圖1.1所示的情況建模。

圖1.1:組合餐的各種選擇。

如果您想要更緊湊的表示,可以使用基於數據的包容性網關(或簡稱gateway)。(參見圖1.2)使用或網關來描述處理,可以沿着一個、多個或者所有傳出路徑的情況進行,或者網關可以防止圖變得過於複雜。

圖1.2:網關支持複雜路徑變量的緊湊表示

也可以組合路徑:取決於我們是隻喫沙拉還是喫一些牛排、意大利麪,或者是沙拉和牛排、意大利麪,我們必須等待一個令牌到達(合併)或兩個令牌(同步),然後我們纔可以喫。但是,請注意它與圖1.1之間的區別。在沒有or gateway的版本中,我們本可以決定不準備任何東西(既不是沙拉也不是牛排和意大利麪),但我們在做出這個決定後吃了東西。or gateway排除了這種荒謬。我們必須決定至少是沙拉或牛排和意大利麪,否則令牌會卡在入口。嚴格地說,bpmn規範確定在這種情況下會發生運行時錯誤,這對於技術流程實現很重要。

實際上,處理網關並不像這些示例所暗示的那樣簡單。很容易理解,進程依賴於等待另一個令牌到達or合併。對於跨越多個頁面的複雜圖表,跟蹤同步規則可能比較困難。僅僅記住“或者”拆分時的條件並不是一個解決方案。

圖1.3:第二個網關需要等待多長時間?

考慮圖1.3:or合併是否需要同步取決於or分割是否通過一個或多個路徑運行。場景:第一個令牌在30天后到達or合併。因爲答案2也應用於前一個或分割,另一個令牌正在進行中,它將在task 2中再停留15天。此任務完成後,xor分割時做出的決策可能會導致第二個令牌通過answer 1路徑路由,並被end事件使用。同步或合併時第一個令牌發生了什麼?or網關必須註冊第二個令牌已經消失,並且必須轉發第一個令牌。

這可能在三種情況下導致問題:

  1. 您在流程手冊的第10頁遇到了or merge,您必須翻看前面的9頁,以瞭解哪些條件需要哪些等待時間。
  2. 您在一個組織中實現這樣一個過程,該組織讓一個人負責任務3,但不允許這個人對過程進行控制。
  3. 工作流引擎運行流程並控制同步行爲。

實現這樣的檢查是昂貴的,而且肯定會失敗。在某些情況下,這是不可能的。

使用or網關有幾個原因——要小心。

問題:我們可以按照圖1.4所示的流程建模嗎?

圖1.4:非常緊湊的版本。

回答:當然,這使模型更緊湊,但它改變了意義。該過程模型產生以下結果:

  1. 我們只吃意大利麪。
  2. 我們只吃牛排。
  3. 我們只吃沙拉。
  4. 我們喫意大利麪和沙拉。
  5. 我們喫牛排和沙拉。
  6. 我們喫意大利麪和牛排。
  7. 我們喫意大利麪、牛排和沙拉。

最後兩種結果不是我們想要的!


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

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