认识BPMN2.0

2024-01-31 13:52
文章标签 认识 bpmn2.0

本文主要是介绍认识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

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

这篇关于认识BPMN2.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/664002

相关文章

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

SpringMVC-1.认识及配置

SpringMVC是一个基于请求驱动的Web框架,和structs一样是目前最优秀的基于MVC框架,现在的项目一般都使用SpringMVC代替Structs。 MVC模式中,Model是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象在数据库中存取数据。View是应用程序中处理数据显示的部分,通常视图是依据模型数据创建。Controller是应用程序中处理用户交互的部分。通常控制器负责从视

【H2O2|全栈】关于HTML(1)认识HTML

HTML相关知识 目录 前言 准备工作 WEB前端是什么? HTML是什么? 如何运行HTML文件? 标签 概念 分类 双标签和单标签 行内标签和块标签 HTML文档结构 预告和回顾 UI设计相关 Markdown | Md文档相关  项目合作管理相关  后话 前言 本系列的博客将分享前端HTML的相关知识点。 本篇作为本系列的第一期博客,主要讲解H

认识鬼火引擎

一、Irrlicht简介 (1)概念Irrlicht引擎是一个用C++书写的高性能实时3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台)、OpenGL 或它自己的软件着色程序,可以实现该引的完​全跨平台。尽管是开源的,该Irrlicht库提供了可以在商业级的3D引擎上具有的艺术特性,例如动态的阴影,粒子系统,角色动画,室内和室外技术以及碰撞检测等。(

Jenkins--pipeline认识及与RF文件的结合应用

什么是pipeline? Pipeline,就是可运行在Jenkins上的工作流框架,将原本独立运行的单个或多个节点任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。 为什么要使用pipeline? 1.流程可视化显示 2.可自定义流程任务 3.所有步骤代码化实现 如何使用pipeline 首先需要安装pipeline插件: 流水线有声明式和脚本式的流水线语法 流水线结构介绍 Node:

git:认识git和基本操作(1)

目录 一、版本控制器 1.安装git 2.创建git本地仓库 3.配置git 二、git操作(1) 1.工作区、暂存区、版本库 2.添加文件 3.查看.git 4.修改文件 一、版本控制器         所谓的版本控制器,就是能让你了解到每一个文件的修改历史。相应的,在企业级开发中,用来记录一个工程的每一次改动和管理版本迭代,同时方便多人协作开发。         g

关于MANIFEST.MF的内容认识

文章来源 https://baike.baidu.com/item/MANIFEST.MF https://www.cnblogs.com/Gandy/p/7290069.html 一、百度百科关于MANIFEST.MF文件介绍 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了

C++---由优先级队列认识仿函数

文章目录 一、优先级队列是什么? 二、如何使用优先级队列 1、优先级队列容器用法 2、为什么容器本身无序? 三、什么是仿函数? 1. 什么是仿函数? 2. 仿函数的优势 四、仿函数如何使用? 1、重载operator()函数 2、运用第三个参数模板 3、大小堆切换  大堆测试代码: 小堆测试代码: 4、头文件总代码  五、什么是容器适配器? 前言   本文主要介绍了优先级队列是什