认识BPMN2.0

💖专栏简介

✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。

✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda

✔️请给snail-camunda 点颗星吧😘

💖说在前面

本篇只对BPMN2.0中常用元素图标的认识以及简单的介绍,但并不深入讲解,后续在使用过程中再逐个分析。

💖Tasks

🧡Service Task

Service Task用于调用服务。在 Camunda 中,这是通过调用 Java 代码实现某些逻辑。

有以下4种方式调用逻辑代码:

  1. 实现 JavaDelegate 或 ActivityBehavior 的类
  2. 计算解析为委派对象的表达式
  3. 调用方法表达式
  4. 求值表达式

🧡Send Task

Send Task用于发送消息。在 Camunda 中,是通过调用 Java 代码来完成的。

🧡User Task

User Task用于对需要由人工参与完成的工作进行建模。当流程执行到达User Task时,将在分配给该节点的用户创建对应的任务。

🧡Script Task

Script Task是一项自动化活动。当流程执行到达脚本任务时,将执行相应的脚本。

🧡Receive Task

Receive Task是让流程保持等待状态,直到接收特定的消息才继续。

🧡Task Markers

以上仅列举了一些常见的任务,除了各种类型的任务外,我们还可以将任务标记为循环、多个实例或补偿。标记可以与任务类型结合使用。如果活动是多实例的,则活动底部的三条短线表示。三条垂直线表示实例将并行执行,而三条水平线表示顺序执行

💖Gateways

🧡Exclusive Gateway

通常称之为排他网关,使用排他网关时,仅选择一个序列流(流程的两个元素之间的连接器)。如果多个序列流的计算结果为“true”,则仅选择第一个序列流来继续流程。

如果无法选择序列流(没有条件的计算结果为“true”),则这将导致运行时异常,除非您定义了默认流。可以在网关本身上设置一个默认流程,以防没有其他条件匹配 - 就像编程语言中的“else”一样。

🧡Conditional and Default Sequence Flows

序列流可以定义一个条件。当条件的计算结果为“true”时,将选择该传出序列流。当以这种方式选择多个序列流时,将生成多个执行,并以并行方式继续该过程。注意:网关将以特定方式处理具有条件的序列流,具体取决于网关类型。

conditionalExpressions 可以是UEL表达式 和脚本一起使用。使用的表达式或脚本应解析为布尔值,否则在评估条件时会引发异常。<![CDATA[]]>这个标记所包含的内容将表示为纯文本

设置默认的序列流,当其他设置了条件的序列流都为"false"时就会走该序列流。

🧡Parallel Gateway

通常称之为并行网关,是基于传入和传出序列流来实现功能的。并行网关不评估条件。如果在与并行网关连接的序列流上定义了条件,则会忽略这些条件。

  • Fork:所有传出序列流并行执行,为每个序列流创建一个并发执行。
  • Join:到达并行网关的所有并发执行在网关等待,直到每个传入序列流的执行到达为止。

🧡Inclusive Gateway

通常称之为包容网关,可以看作是排他网关和并行网关的结合。它既可以定义传出序列流的条件,也可以接收多个序列流。

  • Fork:为结果是“true”的序列流创建一个并行执行。
  • Join:到达包容网关的所有并发执行在网关等待,直到每个具有流程令牌的传入序列流的执行到达为止。这是与并行网关的一个重要区别。也就是包容网关将只等待被执行的传入序列流。

🧡Event-based Gateway

基于事件的网关是基于事件做出决策。网关的每个传出序列流都需要连接到一个中间捕获事件。当流程执行到达基于事件的网关时,网关的行为类似于等待状态:执行被挂起。此外,还为每个传出序列流创建一个事件订阅。对于这种网关的使用有如下限制:

  • 基于事件的网关必须具有两个或多个传出序列流。
  • 基于事件的网关后面只能接 intermediateCatchEvent 类型的元素。 (引擎尚不支持在基于事件的网关之后接收任务。
  • 连接到基于事件的网关的 intermediateCatchEvent 必须具有单个传入序列流。

💖Events

🧡Start Events

启动事件:是在流程或子流程的开始位置定义。引擎至少需要一个启动事件来实例化进程。

🧡None Events

空白事件:子流程必须要有一个空白事件。

🧡Message Events

1、比如启动事件又可以定义为消息启动事件【Message Start Event】,而消息启动事件的使用有如下限制:

  • 消息启动事件的名称在给定的流程定义中必须是唯一的。否则引擎会在部署进程定义时引发异常。
  • 消息启动事件的名称在所有已部署的流程定义中必须是唯一的。否则引擎会在部署流程定义时引发异常。
  • 流程版本控制:在部署流程定义的新版本时,将取消先前版本的消息预订。对于新版本中不存在的消息事件,也是如此。

2、消息中间捕获事件【Message Intermediate Catching Event】。当令牌到达消息中间捕获事件时,它将在那里等待,直到具有正确名称的消息到达。

🧡Timer Events

计时器事件是由定义的计时器触发的事件。它们可以用作开始事件、中间事件或边界事件。

计时器使用 ISO 8601 时间格式进行配置,比如2024-03-11T12:13:14Z

还有很多就不全说了,很多都不常用,感兴趣的可以自己试试。

💖Subprocess

🧡Embedded Subprocess

嵌入式子流程是整个流程的一部分,在使用时也是有一些限制:

  • 一个子进程只能有一个空白启动事件,不允许有其他启动事件类型。子流程必须至少有一个结束事件。请注意,BPMN 2.0 规范允许省略子流程中的开始和结束事件,但当前的引擎实现不支持这一点。
  • 序列流不能跨越子进程边界。

🧡Call Activity

调用活动引用的流程位于流程定义外部。调用活动的主要用例是具有可重用的流程定义,该流程定义可以从多个其他流程定义中调用。

当流程执行到达调用活动时,将创建一个新的流程实例,该实例用于执行子流程,从而可能像在常规流程中一样创建并行子执行。主流程实例会一直等到子流程完全结束,然后继续执行原始流程。

🧡Event Subprocess

事件子流程是由事件触发的。可以在主流程或任何子流程级别添加。用于触发事件子流程的事件是使用 start 事件配置的。因此,事件子流程不支持空白启动事件。可以使用消息事件、错误事件、信号事件、计时器事件或补偿事件等事件触发事件子流程。

🧡Transaction Subprocess

事务子流程也是一个嵌入式子流程,可用于将多个活动分组到一个事务中。

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoneWalker、

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值