日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flowable入门系列文章39 - 网关 01

發布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flowable入门系列文章39 - 网关 01 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網關用于控制執行流程(或者BPMN 2.0描述的執行令牌)。網關能夠消費或生成令牌。

一個網關被圖形化地顯示為一個菱形,里面有一個圖標。該圖標顯示網關的類型。

1、獨家網關

描述

獨占網關(也稱XOR網關或更專業的基于數據的網關)用于對流程中的決策進行建模。當執行到達這個網關時,所有流出的序列流將按照它們被定義的順序進行評估。選擇條件評估為真的第一個序列流(或者沒有條件集,概念上在序列流中定義了“真”)被選擇用于繼續該過程。

請注意,在這種情況下,輸出序列流的語義與BPMN 2.0中的一般情況的語義不同。一般情況下,所有條件評估為真的序列流被選擇為以并行方式繼續,而在使用專用網關時只選擇一個序列流。如果多個序列流具有評估為真的條件,則選擇在XML中定義的第一個(并且只有那個!)來繼續該過程。如果沒有順序流程可以選擇,將會拋出異常。

圖形表示法

獨家網關被視為一個典型的網關(菱形),里面有一個X圖標,指的是XOR語義。請注意,沒有圖標的網關默認為獨占網關。BPMN 2.0規范不允許在同一個進程定義中使用有和沒有X的菱形塊。

XML表示

獨占網關的XML表示法是直接的:一行定義在出站序列流上定義的網關和條件表達式。查看有關條件順序流程的部分,查看哪些選項可用于此類表達式。

以下面的模型為例:

其中用XML表示如下:

<exclusiveGateway id="exclusiveGw"name="Exclusive Gateway"/> <sequenceFlow id="flow2"sourceRef="exclusiveGw"targetRef="theTask1"> <conditionExpression xsi:type="tFormalExpression">${input==1}</conditionExpression> </sequenceFlow> <sequenceFlow id="flow3"sourceRef="exclusiveGw"targetRef="theTask2"> <conditionExpression xsi:type="tFormalExpression">${input==2}</conditionExpression> </sequenceFlow> <sequenceFlow id="flow4"sourceRef="exclusiveGw"targetRef="theTask3"> <conditionExpression xsi:type="tFormalExpression">${input==3}</conditionExpression> </sequenceFlow>

2、并行網關

描述

網關也可以用來模擬進程中的并發。最直接的網關中的過程模型介紹并發性,是并行網關,它允許你叉成多個執行路徑或加入執行的多個傳入路徑。

并行網關的功能基于輸入和輸出序列流:

  • fork:并行執行所有外發序列流,為每個序列流創建一個并發執行。
  • 連接:到達并行網關的所有并發執行都在網關中等待,直到對每個傳入序列流執行完畢。然后該過程繼續經過加入的網關。

請注意,如果并行網關具有多個傳入和傳出序列流,并行網關可以同時具有分叉和連接行為。在這種情況下,網關將首先加入所有傳入的序列流,然后再分解為多個并發執行路徑。

與其他網關類型的一個重要區別是并行網關不評估條件。如果在與并行網關連接的順序流上定義條件,則簡單地忽略它們。

圖形表示法

一個并行網關可視化為帶有加號的網關(鉆石形狀),引用AND語義。

XML表示

定義并行網關需要一行XML:

<parallelGateway id="myParallelGateway" />

實際行為(fork,join或both)由連接到并行網關的序列流定義。

例如,上面的模型歸結為以下XML:

<startEvent id="theStart" /> <sequenceFlow id="flow1" sourceRef="theStart" targetRef="fork" /> <parallelGateway id="fork" /> <sequenceFlow sourceRef="fork" targetRef="receivePayment" /> <sequenceFlow sourceRef="fork" targetRef="shipOrder" /> <userTask id="receivePayment" name="Receive Payment" /> <sequenceFlow sourceRef="receivePayment" targetRef="join" /> <userTask id="shipOrder" name="Ship Order" /> <sequenceFlow sourceRef="shipOrder" targetRef="join" /> <parallelGateway id="join" /> <sequenceFlow sourceRef="join" targetRef="archiveOrder" /> <userTask id="archiveOrder" name="Archive Order" /> <sequenceFlow sourceRef="archiveOrder" targetRef="theEnd" /> <endEvent id="theEnd" />

在上面的例子中,過程開始后,將創建兩個任務:

ProcessInstance pi=runtimeService.startProcessInstanceByKey("forkJoin");TaskQuery query=taskService.createTaskQuery().processInstanceId(pi.getId()).orderByTaskName().asc();List<Task> tasks=query.list();assertEquals(2,tasks.size());Task task1=tasks.get(0);assertEquals("Receive Payment",task1.getName());Task task2=tasks.get(1);assertEquals("Ship Order",task2.getName());

當這兩個任務完成后,第二個并行網關將加入這兩個執行,并且由于只有一個輸出序列流,因此不會創建并發執行路徑,只有存檔命令任務處于活動狀態。

請注意,并行網關不需要平衡(相應并行網關的輸入/輸出序列流的匹配數量)。并行網關將簡單地等待所有進入的序列流,并為每個流出的序列流創建一個并發執行路徑,而不受流程模型中其他構造的影響。因此,以下過程在BPMN 2.0中是合法的:

上面文章來自盤古BPM研究院:http://vue.pangubpm.com/
文章翻譯提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以關注微信公眾號:

總結

以上是生活随笔為你收集整理的Flowable入门系列文章39 - 网关 01的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。