<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ![](https://img.kancloud.cn/ae/3c/ae3c16005e6612fb273abd0be9095751_1225x174.png) 包含網關可以看做是排他網關和并行網關的結合體。 和排他網關一樣,你可以在外出順序流上定義條件,包含網關會解析它們。 但是主要的區別是包含網關可以選擇多于一條順序流,這和并行網關一樣。 <br/> 包含網關的功能是基于進入和外出順序流的: **分支**: 所有外出順序流的條件都會被解析,結果為true的順序流會以并行方式繼續執行, 會為每個順序流創建一個分支。 **匯聚**: 所有并行分支到達包含網關,會進入等待狀態, 直到每個包含流程token的進入順序流的分支都到達。 這是與并行網關的最大不同。換句話說,包含網關只會等待被選中執行了的進入順序流。 在匯聚之后,流程會穿過包含網關繼續執行。 <br/> 如果包含網關設置的條件中,流程變量不存在,報錯。 ```java org.activiti.engine.ActivitiException: Unknown property used in expression: ${evection.num>=3} ``` <br/> 演示,步驟如下: **1. 流程定義** ![](https://img.kancloud.cn/77/eb/77eb92486a7ea2b91edce15f5885325e_703x560.png) **2. java程序** ```java public class ActivitiGatewayInclusive { /** * 部署流程定義 */ @Test public void testDeployment() { //1、創建ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2、得到RepositoryService實例 RepositoryService repositoryService = processEngine.getRepositoryService(); //3、使用RepositoryService進行部署 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("bpmn/evection-inclusive.bpmn") .addClasspathResource("bpmn/evection.png") .name("出差申請流程-包含網關") .deploy(); //4、輸出部署信息 System.out.println("流程部署id:" + deployment.getId()); System.out.println("流程部署名稱:" + deployment.getName()); } /** * 啟動流程實例,設置流程變量的值 */ @Test public void startProcess() { //獲取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取RunTimeService RuntimeService runtimeService = processEngine.getRuntimeService(); //流程定義key String key = "inclusive"; // 創建變量集合 Map<String, Object> map = new HashMap<String, Object>(); //創建出差pojo對象 Evection evection = new Evection(); //設置出差天數 evection.setNum(4d); //定義流程變量,把出差pojo對象放入map map.put("evection", evection); //啟動流程實例,并設置流程變量的值(把map傳入) ProcessInstance processInstance = runtimeService .startProcessInstanceByKey(key, map); //輸出 System.out.println("流程實例名稱=" + processInstance.getName()); System.out.println("流程定義id==" + processInstance.getProcessDefinitionId()); } @Test public void completTask() { //流程定義的Key String key = "inclusive"; //任務負責人 String assingee = "jack"; //獲取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //獲取taskservice TaskService taskService = processEngine.getTaskService(); //查詢任務 Task task = taskService.createTaskQuery() .processDefinitionKey(key) .taskAssignee(assingee) .singleResult(); if (task != null) { //根據任務id來完成任務 taskService.complete(task.getId()); } } } ``` **3. 測試結果** (1)當流程執行到第一個包含網關后,會根據條件判斷,當前要走哪幾個分支。 ```sql # 流程實例執行表 select * from act_ru_execution ; ``` ![](https://img.kancloud.cn/83/7b/837b135ff6c0a93aa2f78362295230fe_889x95.png) 第一條記錄:包含網關分支。 后兩條記錄代表兩個要執行的分支: ACT_ID = "_13" 代表 項目經理審批。 ACT_ID = "_5" 代表 人事經理審批。 ```sql # 當前任務表 select * from act_ru_task; ``` ![](https://img.kancloud.cn/d4/d6/d4d669834126f3dfe6189eeeb71407a6_883x75.png) 上圖中,項目經理審批、人事經理審批 都是當前的任務,在并行執行。如果有一個分支執行先走到匯聚結點的分支,要等待其它執行分支走到匯聚。 (2)先執行項目經理審批,然后查詢當前任務表:`ACT_RU_TASK`。 ![](https://img.kancloud.cn/98/62/986237c7dfec4d84b750f650e9efc36d_940x55.png) 當前任務還有人事經理審批需要處理。 ```sql # 流程實例執行表 select * from act_ru_execution ; ``` ![](https://img.kancloud.cn/00/e2/00e23d235fd0c8843e722dde11e93f3e_901x73.png) 發現人事經理的分支還存在,而項目經理分支已經走到ACT_ID = _18的節點。而`ACT_ID=_18`就是第二個包含網關。這時,因為有2個分支要執行,包含網關會等所有分支走到匯聚才能執行完成。 (3)執行人事經理審批。 ```sql # 當前任務表 select * from act_ru_task; ``` ![](https://img.kancloud.cn/60/d7/60d75a63f116eb667724c89719e02ee1_915x42.png) 當前任務表已經不是人事經理審批了,說明人事經理審批已經完成。 ```sql # 流程實例執行表 select * from act_ru_execution ; ``` ![](https://img.kancloud.cn/80/49/80491a82db575ec3efbc8aa13420c1d4_900x56.png) 包含網關執行完成,分支和匯聚就從act\_ru\_execution刪除。 <br/> 小結:在分支時,需要判斷條件,**符合條件的分支,將會執行**,符合條件的分支最終才進行匯聚。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看