bmpn2中常用网关的介绍和使用

Parallel gateway

在Flowable(前身为Activiti)中,Parallel Gateway是一种特殊的流程控制结构,用于在流程实例中并行执行多个任务或活动。它分为两种类型:并行拆分网关(Parallel Split Gateway)和并行合并网关(Parallel Join Gateway)。

并行拆分网关 (Parallel Split Gateway)

并行拆分网关允许流程实例同时进入多个分支,每个分支可以独立执行不同的任务或活动。当一个活动到达并行拆分网关时,所有出站流都会被激活,从而创建了多个并行的执行路径。

并行合并网关 (Parallel Join Gateway)

并行合并网关等待所有进入的路径完成,然后才允许流程继续。这意味着,在所有并行分支中的任务都被完成之前,流程不会从并行合并网关继续前进。

使用方法

在BPMN流程图中,你可以使用以下方式来设计包含并行网关的流程:

  1. 创建并行拆分网关
    • 在流程图中放置一个并行拆分网关图形,通常看起来像一个加号(+)。
    • 从该网关引出多条连线到不同的活动或任务上。
  1. 创建并行合并网关
    • 在流程图中放置一个并行合并网关图形,通常也看起来像一个加号(+),但通常位于流程的下游。
    • 从各个并行活动或任务引出连线到此网关上。
  1. 连接网关与活动
    • 使用序列流(Sequence Flow)连接拆分网关与并行活动,以及并行活动与合并网关。
示例 BPMN XML

下面是一个简单的BPMN XML示例,展示如何使用并行网关:

Xml
1<bpmn:process id="ParallelExample" isExecutable="true">
2    <bpmn:startEvent id="StartEvent"/>
3    <bpmn:parallelGateway id="ParallelSplit"/>
4    <bpmn:sequenceFlow from="StartEvent" to="ParallelSplit"/>
5
6    <bpmn:userTask id="TaskA"/>
7    <bpmn:sequenceFlow from="ParallelSplit" to="TaskA"/>
8
9    <bpmn:userTask id="TaskB"/>
10    <bpmn:sequenceFlow from="ParallelSplit" to="TaskB"/>
11
12    <bpmn:parallelGateway id="ParallelJoin"/>
13    <bpmn:sequenceFlow from="TaskA" to="ParallelJoin"/>
14    <bpmn:sequenceFlow from="TaskB" to="ParallelJoin"/>
15
16    <bpmn:endEvent id="EndEvent"/>
17    <bpmn:sequenceFlow from="ParallelJoin" to="EndEvent"/>
18</bpmn:process>

在这个例子中,StartEvent触发流程,接着到达ParallelSplit,此时流程会并行进入TaskA和TaskB。当这两个任务都完成后,流程会在ParallelJoin处合并,最后到达EndEvent。

注意事项
  • 如果在并行合并网关之前有任何分支未完成,那么整个流程将会阻塞在那里,直到所有分支都完成。
  • 并行网关可以嵌套使用,这意味着可以在一个并行分支内部再使用并行网关来进一步拆分和合并流程。

在实际应用中,使用并行网关可以大大提高流程的效率和响应速度,特别是在处理需要同时进行多项任务的情况。

结合flowable7.0.1列举一个简单的实现案例:

Exclusive gateway

Exclusive Gateway,也被称为XOR网关,是在BPMN(Business Process Model and Notation)中用于表示流程中单一路径选择的元素。它允许工作流在多个可能的路径中选择一条路径继续执行,但是只有一条路径会被选中。一旦条件满足,其他路径将被忽略。

Exclusive Gateway的特性:
  • 条件表达式:每个从网关出去的序列流(Sequence Flow)都可以附加一个条件表达式。当流程达到网关时,这些条件会被依次评估。
  • 默认流:在没有条件表达式的序列流中,可以定义一个默认流,如果所有的条件都不满足,流程将沿着默认流继续。
使用场景:
  1. 决策树:在流程中构建复杂的决策逻辑,如根据客户类型选择不同的服务路径。
  2. 错误处理:根据特定条件选择不同的错误处理流程。
  3. 资源分配:基于可用资源或优先级选择下一步操作。
在BPMN中的表示:
  • 图形表示:Exclusive Gateway通常被描绘为一个菱形,里面有一个X或XOR字样。
  • XML表示:在BPMN 2.0的XML表示中,Exclusive Gateway由<bpmn:exclusiveGateway>标签定义。
实际应用示例:

假设你正在设计一个订单处理流程,其中需要检查库存。如果库存足够,则继续发货;如果库存不足,则发送缺货通知。

BPMN XML示例:
Xml
1<bpmn:process id="OrderProcess" isExecutable="true">
2    <bpmn:startEvent id="StartEvent"/>
3    <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="CheckStock"/>
4    <bpmn:serviceTask id="CheckStock" implementation="checkStockService"/>
5    <bpmn:exclusiveGateway id="StockAvailableGateway">
6        <bpmn:incoming>Flow1</bpmn:incoming>
7        <bpmn:outgoing>Flow2</bpmn:outgoing>
8        <bpmn:outgoing>Flow3</bpmn:outgoing>
9    </bpmn:exclusiveGateway>
10    <bpmn:sequenceFlow id="Flow2" sourceRef="StockAvailableGateway" targetRef="ShipOrder">
11        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${inventory > 0}</bpmn:conditionExpression>
12    </bpmn:sequenceFlow>
13    <bpmn:sequenceFlow id="Flow3" sourceRef="StockAvailableGateway" targetRef="NotifyCustomer">
14        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${inventory <= 0}</bpmn:conditionExpression>
15    </bpmn:sequenceFlow>
16    <bpmn:serviceTask id="ShipOrder" implementation="shipOrderService"/>
17    <bpmn:serviceTask id="NotifyCustomer" implementation="notifyCustomerService"/>
18    <bpmn:endEvent id="EndEvent"/>
19    <bpmn:sequenceFlow id="Flow4" sourceRef="ShipOrder" targetRef="EndEvent"/>
20    <bpmn:sequenceFlow id="Flow5" sourceRef="NotifyCustomer" targetRef="EndEvent"/>
21</bpmn:process>

在这个例子中,Exclusive Gateway被用来根据库存情况选择下一步的操作。如果库存充足,流程将继续到ShipOrder服务任务;否则,将转向NotifyCustomer服务任务。

Inclusive gateway

Inclusive Gateway在BPMN(Business Process Model and Notation)中是一种非常灵活的控制流元素,允许流程沿着一个或多个出站序列流(Sequence Flow)继续,只要相应的条件为真。与Exclusive Gateway不同,Inclusive Gateway可以激活多条路径,使得流程能够同时执行多个分支。

Inclusive Gateway的特性:
  • 多条件满足:Inclusive Gateway可以有多个条件表达式,如果任意一个条件表达式的结果为真,那么对应的序列流就会被激活。
  • 无条件限制:即使没有条件表达式为真的情况,Inclusive Gateway也不会阻止流程的执行,而是会沿着没有条件表达式的序列流继续。
  • 并发执行:Inclusive Gateway可以启动并行的执行实例,这意味着流程可以同时沿着多个符合条件的路径前进。
使用场景:
  1. 多条件任务执行:当需要根据多个条件来决定是否执行一系列任务时,例如,如果满足任何一项条件,都需要进行额外的审核或处理。
  2. 备份路径:在主路径不可用或不适用的情况下,提供备选路径。
  3. 并行处理:在需要同时处理多个相关任务的场景下,如并行执行多个服务调用。
在BPMN中的表示:
  • 图形表示:Inclusive Gateway通常表示为一个菱形,里面有一个加号(+),表示它可以同时激活多条路径。
  • XML表示:在BPMN 2.0的XML表示中,Inclusive Gateway由<bpmn:inclusiveGateway>标签定义。
实际应用示例:

假设一个项目管理流程,其中项目在启动前需要经过技术评审和财务评审。只要任一评审通过,项目就可以继续进行,但如果两者都通过,则可以同时进行项目规划和技术准备。

BPMN XML示例:
Xml
1<bpmn:process id="ProjectApprovalProcess" isExecutable="true">
2    <bpmn:startEvent id="StartEvent"/>
3    <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="InclusiveGateway"/>
4    <bpmn:inclusiveGateway id="InclusiveGateway">
5        <bpmn:incoming>Flow1</bpmn:incoming>
6        <bpmn:outgoing>Flow2</bpmn:outgoing>
7        <bpmn:outgoing>Flow3</bpmn:outgoing>
8        <bpmn:outgoing>Flow4</bpmn:outgoing>
9    </bpmn:inclusiveGateway>
10    <bpmn:sequenceFlow id="Flow2" sourceRef="InclusiveGateway" targetRef="TechnicalReview">
11        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${technicalReviewRequired}</bpmn:conditionExpression>
12    </bpmn:sequenceFlow>
13    <bpmn:sequenceFlow id="Flow3" sourceRef="InclusiveGateway" targetRef="FinancialReview">
14        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${financialReviewRequired}</bpmn:conditionExpression>
15    </bpmn:sequenceFlow>
16    <bpmn:sequenceFlow id="Flow4" sourceRef="InclusiveGateway" targetRef="ProjectPlanning">
17        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${technicalReviewPassed && financialReviewPassed}</bpmn:conditionExpression>
18    </bpmn:sequenceFlow>
19    <bpmn:serviceTask id="TechnicalReview" implementation="performTechnicalReview"/>
20    <bpmn:serviceTask id="FinancialReview" implementation="performFinancialReview"/>
21    <bpmn:serviceTask id="ProjectPlanning" implementation="planProject"/>
22    <bpmn:endEvent id="EndEvent"/>
23    <bpmn:sequenceFlow id="Flow5" sourceRef="TechnicalReview" targetRef="EndEvent"/>
24    <bpmn:sequenceFlow id="Flow6" sourceRef="FinancialReview" targetRef="EndEvent"/>
25    <bpmn:sequenceFlow id="Flow7" sourceRef="ProjectPlanning" targetRef="EndEvent"/>
26</bpmn:process>

在这个例子中,Inclusive Gateway被用来决定哪些评审需要进行,以及在评审通过后是否可以直接进行项目规划。如果技术评审或财务评审任一通过,相应的评审任务将被执行。如果两者都通过,项目规划将与技术评审同时开始。

Event-Based gateway

Event-Based Gateway用于基于特定事件的发生来决定流程的分支。当一个事件触发时,Event-Based Gateway将沿着相应的序列流继续流程。如果没有事件触发,则流程将暂停在网关处,直到满足某个条件的事件发生。

特性:
  • 等待事件:Event-Based Gateway可以等待一个或多个事件的发生。
  • 条件事件:事件可以是内部条件(如计时器)或外部事件(如消息接收)。
  • 多路分支:可以有多个序列流,每个流对应一个事件或一组事件。
使用场景:
  1. 异常处理:根据不同类型的异常触发不同的处理流程。
  2. 异步消息处理:等待特定的消息到达,然后根据消息内容选择后续流程。
  3. 定时任务:基于定时事件触发的流程,如定期检查系统状态。
在BPMN中的表示:
  • 图形表示:Event-Based Gateway通常表示为一个菱形,菱形内部有一个小圆圈,表示它等待事件的发生。
  • XML表示:在BPMN 2.0的XML表示中,Event-Based Gateway由<bpmn:eventBasedGateway>标签定义,并且可能包含<bpmn:intermediateCatchEvent>元素来定义等待的事件。
实际应用示例:

假设一个客户服务流程中,客服代表在处理完客户问题后,流程需要等待客户反馈。如果客户满意,则流程结束;如果不满意,则需要重新处理。

BPMN XML示例:
Xml
1<bpmn:process id="CustomerServiceProcess" isExecutable="true">
2    <bpmn:startEvent id="StartEvent"/>
3    <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="HandleIssue"/>
4    <bpmn:serviceTask id="HandleIssue" implementation="handleIssueService"/>
5    <bpmn:sequenceFlow id="Flow2" sourceRef="HandleIssue" targetRef="WaitForFeedback"/>
6    <bpmn:eventBasedGateway id="FeedbackGateway">
7        <bpmn:incoming>Flow2</bpmn:incoming>
8        <bpmn:outgoing>Flow3</bpmn:outgoing>
9        <bpmn:outgoing>Flow4</bpmn:outgoing>
10    </bpmn:eventBasedGateway>
11    <bpmn:intermediateCatchEvent id="WaitForFeedback" gatewayDirection="Diverging">
12        <bpmn:messageEventDefinition id="MessageDefinition"/>
13    </bpmn:intermediateCatchEvent>
14    <bpmn:sequenceFlow id="Flow3" sourceRef="FeedbackGateway" targetRef="EndSatisfied">
15        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${feedback == 'satisfied'}</bpmn:conditionExpression>
16    </bpmn:sequenceFlow>
17    <bpmn:sequenceFlow id="Flow4" sourceRef="FeedbackGateway" targetRef="ReopenIssue">
18        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${feedback != 'satisfied'}</bpmn:conditionExpression>
19    </bpmn:sequenceFlow>
20    <bpmn:serviceTask id="ReopenIssue" implementation="reopenIssueService"/>
21    <bpmn:endEvent id="EndSatisfied"/>
22    <bpmn:endEvent id="EndUnsatisfied"/>
23    <bpmn:sequenceFlow id="Flow5" sourceRef="ReopenIssue" targetRef="EndUnsatisfied"/>
24</bpmn:process>

在这个例子中,Event-Based Gateway(FeedbackGateway)用于等待客户反馈,然后根据反馈是否满意决定流程是结束还是重新打开问题处理流程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt通过句柄获取其它进程控件实例

1.通过spy获取想要获取控件的句柄id 通过spy获取另一个软件的文本框的句柄 2.Qt写代码&#xff0c; 根据句柄获取文本框的内容 void getTextFromExternalWindow(HWND hwnd) {const int bufferSize 256;TCHAR buffer[bufferSize];// 获取窗口文本内容int length GetWindowT…

14.优化算法之BFS解决FloodFill算法1

0.FloodFill简介 dfs&#xff1a;深度优先遍历&#xff08;红色&#xff09; bfs&#xff1a;宽度优先遍历 1.图像渲染 算法原理 class Solution {int[] dx { 0, 0, 1, -1 };int[] dy { 1, -1, 0, 0 };public int[][] floodFill(int[][] image, int sr, int sc, int color)…

超快的 Python 包管理工具「GitHub 热点速览」

天下武功&#xff0c;无坚不破&#xff0c;唯快不破&#xff01; 要想赢得程序员的欢心&#xff0c;工具的速度至关重要。仅需这一优势&#xff0c;即可使其在众多竞争对手中脱颖而出&#xff0c;迅速赢得开发者的偏爱。以这款号称下一代极速 Python 包管理工具——uv 为例&…

Facebook:数字社交的引领者与创新者

自2004年诞生以来&#xff0c;Facebook从一个校园网络项目迅速成长为全球最大的社交媒体平台&#xff0c;彻底改变了我们与世界互动的方式。作为数字社交的引领者和创新者&#xff0c;Facebook不仅在技术层面上不断突破&#xff0c;也在社会和文化领域留下了深刻的印记。本文将…

自定义Python工具箱实现mdb转出为shp或gdb格式----终章(工具免费)

一、内容提示 前边几篇文章&#xff0c;介绍了mdb地理数据库结构解析、mdb转出为shp示例&#xff0c;以及mdb转为gdb的几种技术路线探讨&#xff0c;并未对mdb转出为shp、或gdb格式进行完整实现。 为了方便使用&#xff0c;并支持更加复杂的使用场景&#xff0c;小编已将前边几…

【Elasticsearch】Elasticsearch动态映射与静态映射详解

文章目录 &#x1f4d1;前言一、Elasticsearch 映射概述1.1 什么是映射&#xff1f;1.2 映射的分类 二、动态映射2.1 动态映射的定义2.2 动态映射的优点2.3 动态映射的缺点2.4 动态映射的应用场景2.5 动态映射的配置示例 三、静态映射3.1 静态映射的定义3.2 静态映射的优点3.3 …

进阶测开日常积累 —— 性能测试!

背景&#xff1a; 这次来解释一下&#xff0c;为什么我那么多回答都不建议大家花太多时间去学性能&#xff0c;建议都是简尝即可呢~具体看正文&#xff0c;说一下性能测试相关的东西~就好了 对于新手太不友好了&#xff0c;所以别花这个时间~~而且很多大多中小企业&#xff0…

vue3单个页面进行防抖节流

防抖 <template><button id"submitButton" ref"submitButton">GET</button> </template><script lang"ts" setup> import { ref, onMounted } from vue;// 防抖函数 function debounce(func: () > void, dela…

企业出海的浪潮下,如何利用亚马逊云(AWS)更好地应对?

在全球化的浪潮下&#xff0c;越来越多的企业开始将目光投向国际市场。在这个数字化时代&#xff0c;云计算技术成为企业出海的必备利器之一。AWS云作为全球领先的云服务提供商&#xff0c;凭借其卓越的性能和完善的服务体系&#xff0c;成为众多企业出海的首选。 一、出海为什…

【DataSophon】DataSophon1.2.1服务组件开启 kerberos

目录 一、DataSophon是什么 1.1 DataSophon概述 1.2 架构概览 1.3 设计思想 二、集成组件 三、环境准备 四、安装kerberos服务 4.1 Zookeeper 4.2 HDFS 4.3 HBase 4.4 YARN 4.5 hive 【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程-CSDN博客 【Da…

什么是未授权访问漏洞?Hadoop Redis靶场实战——Vulfocus服务攻防

什么是未授权访问漏洞&#xff1f;Hadoop & Redis靶场实战——Vulfocus服务攻防 一、介绍 未授权访问&#xff0c;也称为未经授权的访问或非法访问&#xff0c;是指在没有得到适当权限或授权的情况下&#xff0c;个人或系统访问了网络、计算机、数据库、文件、应用程序或…

《安富莱嵌入式周报》第339期:单片机运行苹果早期Mac系统模拟器,2GHz示波器有源探头,下一代矩阵开关面包板,卡片式声音分贝器,HP经典示波器,ReRAM

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版 https://www.bilibili.com/video/BV1Kf421Q7Lh 《安富莱嵌入式周报》第339期&#xff1a;单片机运行苹果早期Ma…

用python画蜡笔小新

代码地址: https://pan.quark.cn/s/6ae646d2fef3

Java知识点大纲

文章目录 第一阶段&#xff1a;JavaSE1、面向对象编程(基础)1)面向过程和面向对象区别2)类和对象的概述3)类的属性和方法4)创建对象内存分析5)构造方法(Construtor)及其重载6)对象类型的参数传递7)this关键字详解8)static关键字详解9)局部代码块、构造代码块和静态代码块10)pac…

mac中如何恢复因为破解脚本导致的IDEA无法启动的问题

问题 为了在mac中安装免费的2024版idea&#xff0c;导致下载了一个脚本&#xff0c;使用这个脚本后&#xff0c;但是发现idea还没有破解&#xff0c;相反导致idea无法启动&#xff0c;每次点击&#xff0c;都会弹出“cannot start IDE…” 问题排查 在访达中点击mac的应用程…

营销故事之扩大牙膏开口

职场营销故事“扩大牙膏开口”又可以说是“牙膏开口扩大1毫米”&#xff0c;为十大经典营销故事之一。某品牌的牙膏&#xff0c;包装精美&#xff0c;品质优良&#xff0c;备受顾客喜爱&#xff0c;连续10年营业额保持10%-20%的增幅。可到了第11年&#xff0c;销售业绩却停滞不…

MySQL环境搭配

下载版本37滴 下载第二个 之后进行安装 进入安装界面 next 选择默认的 进行下一步 安装成功后&#xff0c;进行一系列配置&#xff0c;成功界面如下&#xff1a; 配置 MySQL8.0 环境变量 如果不配置 MySQL 环境变量&#xff0c;就不能在命令行直接输入 MySQL 登录命令。 步…

PowerDsigner的简单使用

目录 1.PowerDesinger 2.PD与navicat的区别&#xff1a; 3.使用 1.PowerDesinger 在实际开发中&#xff0c;数据库的设计会使用专业的建模工具——PowerDesinger &#xff08;安装及其破解大家搜选相关CSDN博客吧&#xff09; 2.PD与navicat的区别&#xff1a; navicat是…

电阻式无功负载组(即电阻式感性负载组)

RL系列电阻式无功负载组&#xff08;即电阻式感性负载组&#xff09;可以通过设置特定功率因数&#xff08;pf&#xff09;来模拟电力系统中的电机负载和电磁器件以及纯阻性负载。电阻式无功负载组是需要额定kVA、额定功率因数和额定电流测试的关键任务备用应急电源系统定期进行…

Mybatis-01 原理

一. JDBC式编程 在 jdbc 编程中&#xff0c;我们最常用的是 PreparedStatement 式的编程&#xff0c;我们看下面这个例子&#xff1b; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注册驱动Class.forName("com.mysql.jdbc.Drive…