第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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云视频AI全能力解读

摘要&#xff1a; 结合人工智能视频理解流程和用户的需求场景&#xff0c;我们将视频AI的功能分成四个大部分&#xff0c;视频智能审核、视频内容理解、视频智能编辑、视频版权保护。其中视频审核功能包括视频鉴黄、暴恐涉政识别、广告二维码识别、无意义直播识别等&#xff0c…

阿里云智能视频 AI 重装来袭

摘要&#xff1a; 近日&#xff0c;阿里云重磅推出视频点播新功能——视频AI &#xff0c;基于深度学习、计算机视觉技术和海量数据&#xff0c;为广大用户提供多场景的视频AI服务。 点此查看原文&#xff1a;http://click.aliyun.com/m/40809/ 近日&#xff0c;阿里云重磅推出…

Hadoop精华问答 | Hadoop框架中最核心的设计是什么?

Hadoop能够进行大批量数据的离线处理,但是在实时计算上的表现实在是不尽如人意;而Storm就可以担当这部分的角色&#xff0c;今天&#xff0c;就让我们看看关于Storm的精华问答吧。1Q&#xff1a;hadoop发展史A&#xff1a;2Q&#xff1a;Hadoop 有哪些优点&#xff1f;A&#x…

SpringBoot2.x整合Swagger2 实现API文档实时生成

我们提供Restful接口的时候&#xff0c;API文档是尤为的重要&#xff0c;它承载着对接口的定义&#xff0c;描述等&#xff0c;本文主要介绍了SpringBoot集成Swagger2生成接口文档的方法示例&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 我们提供Restful接口的时候&a…

阿里云 ESS 弹性伸缩服务新功能来袭,更全面、更自动化的使用体验

摘要&#xff1a; 2017年9月阿里云弹性伸缩服务伸缩配置新增了实例自定义数据、秘钥对、实例RAM角色、标签新特性&#xff1b;近日&#xff0c;阿里云又发布了VSWitchIds.N多可用区新特性。 点此查看原文&#xff1a;http://click.aliyun.com/m/40810/ 弹性伸缩是一种根据业务需…

java 提取轮廓_TensorFlow 卷积操作模拟sobel算子提取图像轮廓

注意&#xff1a;sobel算子不保证结果在0-255&#xff0c;需要做一次归一化处理&#xff0c;再乘以255输出的数据shape与图像的shape不一样&#xff0c;需要一次转化效果代码import matplotlib.pyplot as plt # plt 用于显示图片import matplotlib.image as mpimg # mpimg 用于…

阿里云MaxCompute(大数据)公开数据集---带你玩转人工智能

摘要&#xff1a; 目前阿里云大数据产品已经免费向全部用户开放了多种公用数据集。开放的数据类别包括&#xff1a;股票价格数据&#xff0c;房产信息&#xff0c;影视及其票房数据。 点此查看原文&#xff1a;http://click.aliyun.com/m/40813/ 目前阿里云MaxCompute大数据产品…

豪投10亿!华为放话:3年培养100万AI人才!网友神回应了

近期&#xff0c;AI测试权威软件AI Benchmark的测试数据显示&#xff0c;中国华为研发的7nm旗舰手机芯片麒麟810的AI分数&#xff0c;远远超过美国高通骁龙855了&#xff01;麒麟810芯片AI分数是3300多&#xff0c;名列第一。而骁龙855手机则是2700多。大家振奋的同时&#xff…

阿里云大数据利器Maxcompute学习之-假如你使用过hive

摘要&#xff1a; 如果您是一个大数据开发工程师并且使用过hadoop的hive框架&#xff0c;那么恭喜您&#xff0c;阿里云的大数据计算服务-Maxcompute&#xff0c;您已经会了90%。这篇文章就来简单对比下Maxcompute和hive的异同&#xff0c;来方便刚开始使用Maxcompute的用户&am…

阿里云大数据利器Maxcompute-使用mapjoin优化查询

摘要&#xff1a; small is beautiful&#xff0c;small is powerful 点此查看原文&#xff1a;http://click.aliyun.com/m/40815/ 大数据计算服务&#xff08;MaxCompute&#xff0c;原名 ODPS&#xff09;是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。 https://help…

GitHub下载文件时缓慢的问题

用记事本打开hosts文件&#xff0c;路径为 C:\Windows\System32\drivers\etc将下面3行添加到hosts文件中 140.82.114.3 github.com151.101.185.194 github.global.ssl.fastly.net192.30.253.121 codeload.github.com以管理员身份运行CMD&#xff0c;执行命令ipconfig /flushdn…

阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区

摘要&#xff1a; 当前&#xff0c;很多用户的业务数据存放在传统关系型数据库上&#xff0c;例如阿里云的RDS&#xff0c;做业务读写操作。当数据量非常大的时候&#xff0c;此时传系关系型数据库会显得有些吃力&#xff0c;那么会经常有将mysql数据库的数据迁移到[大数据处理…

SaaS前世今生:老树开新花

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 文东海出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcould&#xff09;2019年3月26日&#xff0c;Adobe和微软宣布&#xff0c;两家公司准备展开一项合作&#xff0c;来提升双方的“销售和营销软件”的能力&#xff0c;进…

初体验-阿里云短视频 SDK For Android 快速接入

摘要&#xff1a; 近期的一些创意短视频 App 风靡年轻群体&#xff0c;比较典型的例如抖音、MUSE 等&#xff0c;阿里云也适时地推出了简单易用的短视频 SDK&#xff0c;帮助开发者们以较低的成本快速引入功能完备的创意短视频功能。本文主要介绍如何快速接入阿里云短视频 SDK …

解决Chrome插件安装时出现的“程序包无效”问题

https://blog.csdn.net/ysq5202121/article/details/50809494

【 CDN 最佳实践】CDN 命中率优化思路

摘要&#xff1a; CDN 在静态资源的加速场景中是将静态资源缓存在距离客户端较近的CDN 节点上&#xff0c;然后客户端访问该资源即可通过较短的链路直接从缓存中获取资源&#xff0c;而避免再通过较长的链路回源获取静态资源。因此 CDN的缓存命中率的高低直接影响客户体验&…

首帧秒开+智能鉴黄+直播答题,阿里云直播系统背后技术大起底

摘要&#xff1a; 想要快速实现直播能力&#xff0c;并对原有业务不产生任何影响&#xff0c;依托如阿里云一样的直播平台&#xff0c;来搭建移动直播系统&#xff0c;将技术难题交给阿里云&#xff0c;把更多的精力放在核心业务的本身&#xff0c;是最为稳妥和高效的选择。本文…

《云栖社区2017年度内容特辑》新鲜出炉!800+份大会PPT、20+技术专题、100+话题...快抱走!...

回首2017&#xff0c;云栖社区承载了太多的精彩内容&#xff0c;这一年大量的优秀团队入驻社区&#xff0c;600博主成为云栖专家&#xff0c;他们为读者奉献了无数精彩的内容——100W博文&#xff0c;300场直播&#xff0c;用户互动问答数超过6W&#xff1b;与此同时&#xff0…

K8S精华问答 | K8S 是什么?不是什么?

kubernetes&#xff0c;简称K8S&#xff0c;是用8代替8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应…

FaaS如何在云2.0时代发挥优势,又将走向何方?

摘要&#xff1a; 过去十年&#xff0c;云服务深刻地改变了社会获取和使用计算能力的方式&#xff0c;云服务自身也以极快的速度演进。在基础设施云化之后&#xff0c;容器、Serverless等技术迅猛发展&#xff0c;开始推动业务能力的云化&#xff0c;云计算进入2.0时代。 点此查…