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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

第15篇: Flowable-BPMN操作流程之排他网关

發布時間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第15篇: Flowable-BPMN操作流程之排他网关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接上一篇:
第14篇:Flowable-BPMN操作流程之任務完成
https://blog.csdn.net/weixin_40816738/article/details/102902647

文章目錄

  • 一、背景
  • 二、定義
  • 三、流程準備
  • 四、流程文件
  • 五、控制器
  • 六、流程通過驗證
    • 6.1. 創建新流程
    • 6.2. 啟動流程
    • 6.3. 控制臺查看任務ID
    • 6.4. 通過流程
    • 6.5. 查看流程圖
  • 七、流程拒絕驗證
    • 7.1. 創建新流程
    • 7.2. 啟動流程
    • 7.3. 控制臺查看任務ID
    • 7.4. 拒絕流程
    • 7.5. 查看流程圖

一、背景

  • 流程在審批的過程中需要進行一些判斷然后再看下一步怎么走,完成判斷邏輯的是網關,排他網關就是其中的一種。

二、定義

排他網關(也叫異或(XOR)網關,或更技術性的叫法 基于數據的排他網關), 用來在流程中實現決策。 當流程執行到這個網關,所有外出順序流都會被處理一遍。 其中條件解析為true的順序流(或者沒有設置條件,概念上在順序流上定義了一個’true’) 會被選中,讓流程繼續運行。簡單理解條件為True繼續執行,False將不執行。

三、流程準備

我們在Modeler中給我們的流程配置一個排他網關,添加后流程如下:
在排他網關的到結束的連接線上配置好網關是否通過的條件,比如審核通過我們設置為${outcome==‘通過’},當走到這里流程變量outcome為通過的時候將會走審核通過這個流程,等于拒絕的時候走下面的流程,參數配置如下圖所示:

四、流程文件

流程文件內容如下:

<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"><process id="test_bpmn" name="測試BPMN模型" isExecutable="true"><documentation>測試BPMN模型</documentation><startEvent id="start" name="開始"></startEvent><endEvent id="end" name="通過結束"></endEvent><userTask id="testUser" name="用戶任務測試" flowable:assignee="admin"><extensionElements><flowable:taskListener event="create" class="com.hyj.flowlistener.CommonUserStartListener"></flowable:taskListener><modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" sourceRef="start" targetRef="testUser"></sequenceFlow><exclusiveGateway id="ex_gateway_check" name="審核結果"></exclusiveGateway><sequenceFlow id="sid-50731902-EF37-4E07-9DED-2E83F7EB54B7" sourceRef="testUser" targetRef="ex_gateway_check"></sequenceFlow><endEvent id="end_fail" name="失敗結束"></endEvent><sequenceFlow id="check_fail" name="審核拒絕" sourceRef="ex_gateway_check" targetRef="end_fail"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='拒絕'}]]></conditionExpression></sequenceFlow><sequenceFlow id="check_ok" name="審核通過" sourceRef="ex_gateway_check" targetRef="end"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通過'}]]></conditionExpression></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_test_bpmn"><bpmndi:BPMNPlane bpmnElement="test_bpmn" id="BPMNPlane_test_bpmn"><bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start"><omgdc:Bounds height="30.0" width="30.0" x="210.0" y="120.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end"><omgdc:Bounds height="28.0" width="28.0" x="630.0" y="60.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="testUser" id="BPMNShape_testUser"><omgdc:Bounds height="80.0" width="100.0" x="315.0" y="95.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="ex_gateway_check" id="BPMNShape_ex_gateway_check"><omgdc:Bounds height="40.0" width="40.0" x="480.0" y="115.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="end_fail" id="BPMNShape_end_fail"><omgdc:Bounds height="28.0" width="28.0" x="630.0" y="180.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="check_fail" id="BPMNEdge_check_fail"><omgdi:waypoint x="500.5" y="154.4338310580205"></omgdi:waypoint><omgdi:waypoint x="500.5" y="194.0"></omgdi:waypoint><omgdi:waypoint x="630.0" y="194.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002" id="BPMNEdge_sid-8D834F3C-45A8-4C88-9AD1-1AC426CC9002"><omgdi:waypoint x="239.94999779398907" y="135.0"></omgdi:waypoint><omgdi:waypoint x="315.0" y="135.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-50731902-EF37-4E07-9DED-2E83F7EB54B7" id="BPMNEdge_sid-50731902-EF37-4E07-9DED-2E83F7EB54B7"><omgdi:waypoint x="414.95000000000005" y="135.0"></omgdi:waypoint><omgdi:waypoint x="480.0" y="135.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="check_ok" id="BPMNEdge_check_ok"><omgdi:waypoint x="500.5" y="115.5"></omgdi:waypoint><omgdi:waypoint x="500.5" y="74.0"></omgdi:waypoint><omgdi:waypoint x="630.0" y="74.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram> </definitions>

五、控制器

  • 控制器原來直接是個完成任務現在,我們方便起見拆分為2個一個是通過任務,一個是拒絕任務,如果你的排他網關使用的都是該參數那么就可以通用。
@RequestMapping("/accept")@ResponseBodypublic Map<String,Object> acceptTask(@RequestBody @RequestParam(required = false) Map<String,String> paras){Map<String,Object> res =new HashMap<>();Map<String,String> data = new HashMap<>();if (MapUtils.isEmpty(paras)){res.put("msg","請輸入任務參數");res.put("res","0");res.put("data",data);return res;}String taskId = paras.get("taskId");if (StringUtils.isEmpty(taskId)){res.put("msg","請輸入任務ID");res.put("res","0");res.put("data",data);return res;}Map<String,Object> flowParas=new HashMap<>();flowParas.putAll(paras);flowParas.put("outcome","通過");boolean bok = flowService.completeTask(taskId,flowParas);if (bok){data.put("taskId",taskId);res.put("msg","通過任務成功");res.put("res","1");}else {data.put("taskId",taskId);res.put("msg","通過任務失敗");res.put("res","0");}res.put("data",data);return res;}@RequestMapping("/reject")@ResponseBodypublic Map<String,Object> rejectTask(@RequestBody @RequestParam(required = false) Map<String,String> paras){Map<String,Object> res =new HashMap<>();Map<String,String> data = new HashMap<>();if (MapUtils.isEmpty(paras)){res.put("msg","請輸入任務參數");res.put("res","0");res.put("data",data);return res;}String taskId = paras.get("taskId");if (StringUtils.isEmpty(taskId)){res.put("msg","請輸入任務ID");res.put("res","0");res.put("data",data);return res;}Map<String,Object> flowParas=new HashMap<>();flowParas.putAll(paras);flowParas.put("outcome","拒絕");boolean bok = flowService.completeTask(taskId,flowParas);if (bok){data.put("taskId",taskId);res.put("msg","拒絕任務成功");res.put("res","1");}else {data.put("taskId",taskId);res.put("msg","拒絕任務失敗");res.put("res","0");}res.put("data",data);return res;}

六、流程通過驗證

6.1. 創建新流程

使用測試BPMN模型4.bpmn20.xml的流程配置文件,輸入創建地址完成創建。
http://localhost:8989/flow/create

6.2. 啟動流程

http://localhost:8989/flow/start?processKey=test_bpmn
輸入改地址完成流程啟動

6.3. 控制臺查看任務ID

  • 此時查看流程后臺,會打印當前的任務ID

6.4. 通過流程

輸入新增的通過地址完成流程審批
http://localhost:8989/flow/accept?taskId=99bb7920-0082-11ea-8f3c-f8a2d6bfea5a

6.5. 查看流程圖

進入流程查看地址:
http://localhost:8989/flow/processDiagram?processId=8f9bf5e7-0083-11ea-9dbd-f8a2d6bfea5a
查看我們的審批流程走到了最后,而拒絕沒有發生變化,說明排他網關成功的區分了兩個流程,流程進展如下圖所示:

七、流程拒絕驗證

7.1. 創建新流程

替換罪行的流程配置文件,輸入創建地址完成創建。
http://localhost:8989/flow/create

7.2. 啟動流程

http://localhost:8989/flow/start?processKey=test_bpmn
,輸入改地址完成流程啟動

processId:976c4c43-0106-11ea-85ad-f8a2d6bfea5a

7.3. 控制臺查看任務ID

  • 此時查看流程后臺,會打印當前的任務ID

7.4. 拒絕流程

輸入新增的通過地址完成流程審批
http://localhost:8989/flow/reject?taskId=9774b0b9-0106-11ea-85ad-f8a2d6bfea5a

7.5. 查看流程圖

進入流程查看地址:
http://localhost:8989/flow/processDiagram?processId=976c4c43-0106-11ea-85ad-f8a2d6bfea5a
,查看我們的審批流程走到了最后,而拒絕沒有發生變化,說明排他網關成功的區分了兩個流程,流程進展如下圖所示:

代碼下載:

gitlab鏈接:https://gitlab.com/gb-heima/flowablestudy/tree/master/flowablelech15

碼云鏈接:https://gitee.com/gb_90/flowable-study/tree/master/flowablelech15

總結

以上是生活随笔為你收集整理的第15篇: Flowable-BPMN操作流程之排他网关的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 涩涩涩涩涩涩涩涩涩 | 少妇特黄一区二区三区 | 亚州av综合色区无码一区 | 在线观看特色大片免费网站 | 亚洲精品乱码久久久久久自慰 | 蜜臀视频一区二区三区 | 2018天天干天天操 | mm131美女视频 | 人妻洗澡被强公日日澡 | 久久久久国产 | 精品国产精品国产偷麻豆 | 三级在线看中文字幕完整版 | www.操com | 久久精品国产免费 | 久久受 | 欧美成人a | 日韩免费在线观看 | 西西444www大胆无视频 | 国产青青草 | 日韩精品区 | 久久精品一日日躁夜夜躁 | aa级黄色片| 国自产拍偷拍精品啪啪一区二区 | 岳睡了我中文字幕日本 | 波多野结衣 在线 | 青青青免费在线视频 | 成人看片泡妞 | 亚洲人久久 | 潘金莲一级淫片aaaaaaa | 国产麻豆剧传媒精品国产 | av导航站 | 无码人妻丰满熟妇区五十路百度 | 狠狠干一区 | 精品人妻无码一区二区色欲产成人 | 武侠古典av| 国产性生活 | 日韩一区在线播放 | 日韩一区二区三区在线视频 | 蜜桃久久av| 大地资源二中文在线影视观看 | 毛片www| 成人毛片18女人毛片免费 | 97久草| 69日本xxxxxxxxx30 在线波多野结衣 | 久久涩综合| 精品一区二区三区在线视频 | 99re6在线视频 | 深夜视频在线播放 | 欧美日韩一区二区三区在线视频 | 91久久人澡人人添人人爽欧美 | 91视频免费播放 | 亚洲不卡中文字幕 | 樱花草av | 国产三极片 | 国产精品久久久久久影视 | 天天色成人网 | 我要看免费的毛片 | 用我的手指扰乱你 | 美女涩涩视频 | 精品人妻无码一区二区三 | 久久久久亚洲av片无码下载蜜桃 | 亚洲免费中文字幕 | 亚洲国产网站 | 91人人澡人人爽人人精品 | 国产欧美一区二区在线观看 | 男性裸体全身精光gay | 91久久亚洲 | 俺也去在线视频 | 国产第一精品视频 | 视频区图片区小说区 | 爱情岛亚洲首页论坛 | 亚洲黄色影视 | 久草福利资源 | 黄污视频在线观看 | 在线观看视频你懂得 | 亚洲一级在线观看 | 8x8ⅹ8成人免费视频观看 | 国产一级美女 | 国产免费久久精品国产传媒 | 农村妇女一区二区 | 污视频网站免费看 | 欧美三区 | h片在线免费观看 | 午夜色图 | 国产又爽又猛又粗的视频a片 | 特级精品毛片免费观看 | 天天操夜夜骑 | 亚洲中文字幕无码一区二区三区 | 高h教授1v1h喂奶 | 亚洲激情小视频 | 高跟鞋肉丝交足91 | 鲁丝一区二区三区 | www黄色网 | 人人澡人人澡人人 | 中文字幕久久熟女蜜桃 | 午夜不卡视频 | 69sex久久精品国产麻豆 | 亚洲黄色小说网 | av加勒比在线|