Springboot +Flowable,三种常见网关的使用(排他、并行、包容网关)(一)

news2024/12/24 21:10:09

一.简介

Flowable 中常用的网关主要有三种类型,分别是:

  1. 排他网关
  2. 并行网关
  3. 包容网关

下面来说下这三种的网关的概念和用法。

二.排他网关

排他网关,也叫互斥网关,截图如下:
在这里插入图片描述
排他网关有一个入口,多个有效出口。

下面举个例子:
假设有一个请假流程,请假 1 天,组长审批,请假小于 3 天,项目经理审批,请假大于 3 天,总监审批,绘制流程图,截图如下:
在这里插入图片描述
在这个流程图中,当流程从排他网关出来的时候,设置一个变量,根据变量的值,来决定下一个走哪一个 Task,例如组长审批,做如下配置,截图如下:

在这里插入图片描述
这个流条件表示当 days 这个变量的值小于等于 1 的时候,就会进入到组长审批这个 Task。

以此类推,设置经理审批,截图如下:

在这里插入图片描述

设置总监审批,截图如下:

在这里插入图片描述
下载这个XML文件,XML文件的内容如下:

<process id="demo01" name="测试流程" isExecutable="true">
    <documentation>测试流程</documentation>
    <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
    <exclusiveGateway id="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5"></exclusiveGateway>
    <sequenceFlow id="sid-DF97CC8B-3AD5-447D-AE67-1082CAB7B189" sourceRef="startEvent1" targetRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5"></sequenceFlow>
    <userTask id="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0" name="组长审批" flowable:formFieldValidation="true"></userTask>
    <userTask id="sid-07B7951C-4E76-4639-989C-407C610C5BA8" name="经理审批" flowable:formFieldValidation="true"></userTask>
    <userTask id="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E" name="总监审批" flowable:formFieldValidation="true"></userTask>
    <endEvent id="sid-0F56FE56-1A8C-4B47-8F0D-196700DDF7B8"></endEvent>
    <sequenceFlow id="sid-E4B4B580-F078-4BB9-B5D3-966E80737C4C" sourceRef="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0" targetRef="sid-0F56FE56-1A8C-4B47-8F0D-196700DDF7B8"></sequenceFlow>
    <endEvent id="sid-F05670CB-A8F4-44A3-B53D-46CFB6F65581"></endEvent>
    <sequenceFlow id="sid-3EC62E5D-ACDA-480E-93B4-C24D8F6E9042" sourceRef="sid-07B7951C-4E76-4639-989C-407C610C5BA8" targetRef="sid-F05670CB-A8F4-44A3-B53D-46CFB6F65581"></sequenceFlow>
    <endEvent id="sid-52711414-1769-4EC3-9AE5-6BA426123095"></endEvent>
    <sequenceFlow id="sid-C81500B2-D1EA-429F-8402-A3D8C8CA0E29" sourceRef="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E" targetRef="sid-52711414-1769-4EC3-9AE5-6BA426123095"></sequenceFlow>
    <sequenceFlow id="sid-807C7B79-4AFA-4525-847F-4D0FE1C0F0F3" name="小于1天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${days<=1}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-3D3DF742-BF47-4536-9EE9-747CD284A1BA" name="1-3天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-07B7951C-4E76-4639-989C-407C610C5BA8">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>1 && days<=3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-2AD41E43-AFEC-47A1-B8D1-0B4299434BF8" name="大于3天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>3}]]></conditionExpression>
    </sequenceFlow>
  </process>

可以看到,在 sequenceFlow 标签中,有一个 conditionExpression 标签,这个标签的内容就是具体的条件了。
接下来部署一下这个流程,代码如下:

@Test
void test01() {
    Map<String, Object> variables = new HashMap<>();
    variables.put("days", 3);
    ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01", variables);
    logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

注意,这个启动的时候,传入一个 days 变量,系统将来会根据这个变量来决定这个流程要走到哪一个 Task。流程启动成功之后,去查询 ACT_RU_TASK 表,就可以看到流程的执行是否和我们所预想的一致。

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

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

相关文章

亚马逊云科技发力医疗与生命科学行业,加速数字化创新

2023年4月27日&#xff0c;亚马逊云科技医疗与生命科学行业峰会召开&#xff0c;会议汇聚了业界专家和思想领袖&#xff0c;共同探讨行业数字化转型和创新之道。作为全球医疗及生命科学行业云计算引领者&#xff0c;亚马逊云科技将围绕数据、算力和行业用户体验三大需求发力&am…

MySQL百万数据深度分页优化思路分析

业务场景 一般在项目开发中会有很多的统计数据需要进行上报分析&#xff0c;一般在分析过后会在后台展示出来给运营和产品进行分页查看&#xff0c;最常见的一种就是根据日期进行筛选。这种统计数据随着时间的推移数据量会慢慢的变大&#xff0c;达到百万、千万条数据只是时间…

UWA发布 | Unity手游性能蓝皮书

最新2022年度Unity手游蓝皮书出炉&#xff01;此次发布分析了2022年1月至2023年3月期间&#xff0c;游戏行业使用Unity引擎进行手游开发过程中及游戏上线后的性能表现&#xff0c;从测试机型分布、引擎各模块开销、内存占用等方面进行汇总分析&#xff0c;反映了Unity手游行业的…

Flink dataStream,如何开窗,如何进行窗口内计算

目录 开窗方式 windowAll() window() 窗口类型 基于时间 基于数量 开窗后的处理函数 全量聚合函数&#xff08;也叫窗口函数&#xff09; 增量聚合函数 增量聚合函数携带一个全量聚合函数 开窗方式 windowAll() 对于没有keyBy的数据流 window() 对于KeyBy后的数据…

交工技术文档表格-SH3503-2001

(阀门试验记录)(管道补偿器安装记录)(管道组成件校验性检查记录)(SHA级管道管螺纹、密封面加工记录)(高压、SHA级管道弯管加工记录)(管道静电接地测试记录)管道系统安装检查与压力试验记录)管道系统泄露性与真空试验记录)(管道吹洗、清洗脱脂记录)(给排水压力管道强度及严密试验…

685页40万字某省市场监管智慧应用一体化项目(word可编辑)

1.2.3.1 数字XX公共能力建设现状 1.2.3.1.1 数字XX通用基础应用平台现状 通用基础应用平台提供具有共性特征的跨部门、跨层级业务应用&#xff0c;与本项目有关的平台包括某省网上办事大厅、某省政务服务 APP 统一平台&#xff08;X政通 APP&#xff09;、某省公共信用信息平…

一次SQL的完整处理流程

流程&#xff1a; 1. 客户端到连接器是通过TCP/IP SSL通信协议连接的&#xff0c; 2.连接器验证MySQL权限信息是否正常&#xff0c;连接量是否正常&#xff0c;长时间没有连接服务器会自动断开等等 &#xff1b; 3. 然后到解析器&#xff0c;通过客户端发过来的sql进行语法解析…

电力系统储能调峰、调频模型研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

FS2114恒流模式的PWM升压IC,内置过温、关断、欠压、过流保护

FS2114是升压DC-DC转换器。其内置0.2Ω功率MOSFET的PWM电路&#xff0c;使该稳压器具有高效率。内部补偿网络还可以程度地 减少了6个外部元件的数量。 0.6V精密基准电压&#xff0c;内部软启动功能可以减低浪涌电流。 FS2114采用SOT23-6L封装&#xff0c;为应用节省空 间PCB。…

手机录屏怎么操作?有哪些好用的方法

在现代科技的时代&#xff0c;手机录屏已经成为了常见的操作。这项技术允许我们在手机上录制视频并分享给他人。但是&#xff0c;很多人可能并不知道如何进行手机录屏。下面我们将介绍手机录屏的操作方法和一些值得推荐的工具。 手机录屏操作方法 对于iOS用户&#xff0c;可以…

Java设计模式-适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;是一种常见的设计模式&#xff0c;它主要用于在不改变现有系统结构的情况下&#xff0c;将一个类的接口转换成客户端所期望的另一个接口。在本文中&#xff0c;我们将介绍适配器模式的基本概念、实现方法以及优缺点&#xff…

FS4056是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器IC

FS4056是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器IC。其底部带有散热片的 ESOP8/DIP8 封装与较少的外部元件数目使得 FS4056成为便携式应用的理想选择。FS4056可以适合 USB 电源和适配器电源工作。   由于采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路…

CM201-1-YS_当贝纯净桌面-线刷固件包

CM201-1-YS_当贝纯净桌面-线刷固件包-内有教程 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&#xff0c;运行速度提…

连接型CRM助力医疗企业把“成本中心”变成“利润中心”

在市场竞争日益加剧的情形下&#xff0c;企业获客成本大幅上涨&#xff0c;存量客户的维护和开发开始被重视&#xff0c;售后服务部门的职责在企业中发挥的价值越来越大。因为企业售后服务不仅能帮助客户解决问题的部门&#xff0c;还是客户与企业沟通的桥梁&#xff0c;将客户…

Linux——进程间通信(System V共享内存)

目录 共享内存示意图(理解共享内存的关键) shmget函数 第一个参数 ftok函数 使用ftok打印key值 第二个参数 第三个参数 返回值 打印shmget 再谈key值 举例理解key值 共享内存的过程 创建共享内存 关联共享内存 去除关联 ​编辑 使用共享内存通信 删除共享内存…

关于财会〔2020〕6 号文件解读,本地化部署+区块链或成为新趋势?

2020年3月&#xff0c;财政部、国家档案局发布了《关于规范电子会计凭证报销入账归档的通知》财会〔2020〕6 号&#xff08;以下简称“通知”&#xff09;&#xff0c;对于电子会计凭证的范围、法律效力、适用条件都做出了进一步规范。这可以看作是财会档案管理由纸质化迈向全面…

每日一博 - 闲聊“突发流量”的应急之道

文章目录 概述思路 概述 面对“突发流量”的情况,我会采取以下应急措施: 扩容现有资源。这是最直接和最常用的方法。可以通过增加CPU、内存、节点等来扩容。典型案例是双11等大促期间,阿里会大规模扩容幕布等系统以应对流量激增。横向扩展,增加更多服务器或节点。通过增加服务…

【Unity-UGUI控件全面解析】| Scrollbar 滚动条组件详解

🎬【Unity-UGUI控件全面解析】| Scrollbar 滚动条组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 监听开关事件4.2 充当 进度条/血条 使用💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSD…

单片机之 理论概述

一 简介 51单片机&#xff0c;STM32单片机 二 最小系统板的构成 2.1 复位电路 复位&#xff1a;指使系统回到初始状态&#xff0c;重新开始执行程序。不同MCU的复位电平可能不同&#xff0c;比如51单片机为高电平复位&#xff0c;STM32为低电平复位。为防止系统正常执行过程…

7. 类的封装

一、类的封装 封装的含义&#xff1a; 所有属性都是私有的&#xff0c;外部不能直接访问提供与属性相关的成员函数&#xff0c;间接访问属性 模板代码&#xff1a; #include <iostream> using namespace std;class Clock { private:int hour, minute, second; public…