当前位置: 首页 > news >正文

详解SpringCloud集成Camunda7.19实现工作流审批(二)

本章将分享的是camunda流程设计器--Camunda Modeler的基本使用(对应camunda版本是7.19),包括bpmn流程图画法,各种控件使用以及一些日常业务场景的流程图的实现

参考资料:

Camunda BPMN 基础组件-CSDN博客

Camunda: ExecutionListener执行监听器和TaskListener任务监听器-CSDN博客

snail-camunda: Camunda二次封装以及相关功能使用介绍。 中国式工作流解决方案。

文章目录

  • 一、常用控件
    • 1.事件(Event)
    • 2.任务(Task)
    • 3.网关(Gateway)
  • 二、流程设计器使用
    • 1.新建模型
    • 2.命名流程图
    • 3.拖拽控件画图
    • 4.监听器配置
    • 5.网关配置
    • 6.子流程
      • 1.内部子流程
      • 2.外部子流程(活动调用)
  • 三、实战演示

一、常用控件

1.事件(Event)

事件是BPMN2.0中一个非常重要的概念,是流程运行过程中发生的事情,而这些事情的发生会影响到流程的流转。对每个事件而言,一般会包含两个要素,分别是触发这个事件的原因,以及由此导致的结果。

以下是一些常用的事件类型

  • (空白)开始事件

    如下图所示,开始事件是流程图里必须要有的元素,同时一个流程图只能有且仅有一个空白开始事件

在这里插入图片描述

  • 结束事件

    标志流程的一个实例或一个分支走向结束,在一个流程图里可以存在多个结束事件节点;结束事件不会影响其他并行路径的执行,只是结束它所在的特定路径。

在这里插入图片描述

  • 终止事件

    终止事件是 BPMN 2.0 引入的一种特殊类型的结束事件。它会导致整个流程(包括所有并行路径)立即终止。

在这里插入图片描述

  • 流程立即终止:终止事件会导致整个流程立即终止,无论是否有其他并行路径正在执行。

  • 单一实例:一个流程中只能有一个终止事件。如果有多个终止事件,流程引擎将不知道该执行哪个。

  • 影响所有路径:终止事件会影响整个流程的所有并行路径,不仅仅是一个分支。

  • 计时器事件

    计时器事件可以用作启动事件、中间事件或边界事件。边界事件可以中断,也可以不中断。

    下图里的是边界中断事件,表示的是10秒后还在该节点则判定超时,会中断流程走向下面的路线

在这里插入图片描述

  • 错误事件

    错误事件分为 错误启动事件 和 错误边界事件

    • 错误启动事件

      如下图,错误结束节点后会触发下面的事件子流程,由事件子流程中的错误启动事件进行处理

      只能用于触发事件子流程,而不能用于启动流程实例。错误启动事件始终处于中断状态

在这里插入图片描述

注意选择相同的错误定义,这样才能被捕获

在这里插入图片描述

  • 错误边界事件

    边界事件可以捕获中间错误,中断流程并重新控制流程走向,如下图所示,由于系统任务执行主动抛出了BpmnError异常,然后就被错误边界事件捕获处理了。

在这里插入图片描述

在这里插入图片描述

2.任务(Task)

任务表示流程中的工作单位,需要人工或系统执行特定的动作。

  • 系统任务

    即不需要人工处理,而是由系统自动处理的任务。通常调用外部服务或脚本。可以配置 Java 类、表达式或外部任务来实现任务逻辑。

    由于项目中我用到系统任务的不多,这里只展示配置java类的方式。

    如下图,type选择java class,然后配置java类的全路径

在这里插入图片描述

java类如下,实现JavaDelegate接口

execution对象里可以获取到流程实例的各种信息,也可以对流程实例进行操作,如下面的设置流程变量等

public class TestCalculateErrorDelegate implements JavaDelegate {@Overridepublic void execute(DelegateExecution execution) throws Exception {Integer numerator = 0;Integer denominator = 0;try {int result = numerator / denominator;execution.setVariable("result", result);} catch (Exception e) {execution.setVariable("calculateErrorCode", "4098");execution.setVariable("calculateErrorMsg", "除数不能为0");throw new BpmnError("4098", "除数不能为0");}}
}
  • 用户任务

    用户任务即需要人工参与者完成的任务。当流程执行到用户任务节点时,将会给这个节点分配的用户创建待办任务。

    如下图所示,分配该用户任务节点给了admin

在这里插入图片描述

这里的assignee在真实业务场景中,一般会设置成流程变量,进行动态的赋值,如下图

${assignee}代表这里取值是取流程实例中的assignee变量,这样就可以结合具体业务动态地给这个地方赋值了

在这里插入图片描述

多实例用户任务

一个用户任务节点也可以是多个参与者,同时又分为 并行串行 2种类型

如下图,通过点击修改属性按钮,可以看到右上角有两个类型选项,第一个是并行,第二个串行

在这里插入图片描述

  • 并行

    并行又分为或签(一个人通过即通过)、比例签(通过人数达到总人数XX比例即通过)还有会签(需要全部人都通过才通过)

    如下图是或签,配置与单实例任务有所不同

    第一行是固定写法,同理的还有:

    //比例签,需要满足0.3比例通过
    ${nrOfCompletedInstances/nrOfInstances > 0.3 }
    //会签,需要全部通过
    ${nrOfCompletedInstances == nrOfInstances}
    

在这里插入图片描述

  • 串行

    串行即多个人依次审批,待办任务也是只有当到自己审批的时候才会创建。配置逻辑和并行的基本同理。

在这里插入图片描述

3.网关(Gateway)

在流程中,需要根据条件分叉或合并路线的时候,就需要用到网关。

  • 排他网关

    会依次判断所有的路径,然后走符合条件的第一条路径

    如下图所示

在这里插入图片描述

  • 并行网关

    允许同时走多个分叉路径,都走完后合并后再走后面的节点

    并行网关是没有条件限制的

    如下图所示

在这里插入图片描述

  • 包含网关

    与并行网关类似,区别在于可以设置条件限制,满足条件的路径就会走

    如下图所示的请假流程,当请假天数大于3天,既会走经理审批,同时也会走老板审批,两个都审批好后再汇集走下个节点

在这里插入图片描述

二、流程设计器使用

这里我们以camunda7.19为例,讲解流程设计器的基本使用

1.新建模型

如下图所示,新建的时候选择camunda 7版本,并且左下角再选择小版本号为7.19

在这里插入图片描述

在这里插入图片描述

2.命名流程图

创建新文件后,默认会有一个开始节点,然后我们需要先点击下空白处,然后在右边的窗口里输入流程的名字流程的ID(流程定义key)

Name可以在后面作为流程名称(流程类型)来使用,而流程定义key(表里是PROC_DEF_KEY_ ) 则是该流程图的唯一标识

区别于流程定义id,即表里的PROC_INST_ID_, 每次修改了图重新部署都会变,对应的是这个图的某个版本;流程定义key则图修改重新部署后不会变

在这里插入图片描述

3.拖拽控件画图

从左边的控件栏选择后拖拽到画板即可,这里常用的控件上面已经介绍过。

在这里插入图片描述

4.监听器配置

在流程中,我们经常要在节点前或节点后去做一些操作,这时候我们就可以使用监听器来实现。

执行监听器 ExecutionListener触发事件有:start、end、take;

其中节点有start、end两种事件,而连线则有take事件。

任务监听器TaskListener触发事件有:create, assignment, update, complete, delete or timeout。

  • 执行监听器 ExecutionListener

    如下图,就是在开始节点配置了执行监听器,start时触发

    监听器类型是java类,即会执行下面的java方法

在这里插入图片描述

这里的java类实现ExecutionListener接口,如下所示

public class ProcessStartExecutionListener implements ExecutionListener {@Overridepublic void notify(DelegateExecution execution) throws Exception {//初始化状态为审批中execution.setVariable("approveState", 0);log.info("初始化状态为审批中---------------approveState=0");}}

监听器除了用java类,常用的还有脚本片段,如下图所示

在这里插入图片描述

注意:

脚本使用的是groovy语言,需要先在springboot项目中引入groovy依赖,否则会报错找不到引擎

<dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-jsr223</artifactId><version>3.0.15</version><scope>runtime</scope>
</dependency>
  • 任务监听器 TaskListener

    如下图,任务节点create的时候,会执行监听器逻辑,同样可以配置java类或脚本片段

在这里插入图片描述

java类参考下面,实现TaskListener接口

public class ProcessReturnTaskListener implements TaskListener {@Overridepublic void notify(DelegateTask delegateTask) {// 设置变量variable1值为1delegateTask.setVariable("variable1", 1);log.info("流程退回变量初始化值为1成功, taskId:{}, variableName:{}", delegateTask.getId(), variableName);}}
}
  • 监听器执行顺序

    下图为例

在这里插入图片描述

执行顺序:1. 开始节点:start -》 end2. 连线:take3. 任务节点ExecutionListener: start4. 任务节点TaskListener:create -》 assignment -》 complete5. 任务节点ExecutionListener: end6. 连线:take7. 结束节点:start - 》 end

5.网关配置

当我们的业务需要根据条件来判断不同走向的时候,就需要配置网关

如下图,实现的是流程变量t0等于1则走向admin审批,t0等于0时则直接走向结束

在这里插入图片描述

需要在网关后的两条连线配置条件,如下

在这里插入图片描述

也可以使用groovy脚本,如下

在这里插入图片描述

6.子流程

有的时候某个节点需要走一套流程来实现业务,例如某个多实例并行节点,在节点中有需要有自己的审批、退回等操作,这个时候就可以用到子流程来实现。子流程又分为 内部子流程外部子流程(活动调用)

1.内部子流程

如下图所示

要注意的是,图里子流程的t1变量是针对整个(父)流程的,也就是如果其中一个子流程赋值了t1变量,其他子流程里的t1变量也会受影响,在真实业务中需要注意这点。

在这里插入图片描述

2.外部子流程(活动调用)

如下图所示

外部子流程即触发另一个流程图的流程,在数据表里也是会新增另一个流程定义key的数据(内部子流程不会,还是只是父流程定义key的数据)

下图右边栏里的called element配置的就是子流程图的定义key

父流程

在这里插入图片描述

子流程

在这里插入图片描述

采用外部子流程,则子流程里的变量是针对子流程实例的,所以不同子流程的变量不会互相影响

三、实战演示

关于流程图的示例,可以学习:

snail-camunda: Camunda二次封装以及相关功能使用介绍。 中国式工作流解决方案。

在这里插入图片描述

相关文章:

详解SpringCloud集成Camunda7.19实现工作流审批(二)

本章将分享的是camunda流程设计器--Camunda Modeler的基本使用&#xff08;对应camunda版本是7.19&#xff09;&#xff0c;包括bpmn流程图画法&#xff0c;各种控件使用以及一些日常业务场景的流程图的实现 参考资料&#xff1a; Camunda BPMN 基础组件-CSDN博客 Camunda: Exe…...

Matlab学习笔记

Magic Traits 文件读取 fid fopen(fn,rt);out fscanf(fid,spec,inf);fclose(fid);2. 读取数据 fid fopen(fn,rt); out textscan(fid,spec);运算篇 fprintf(" xxx %d",a)&#xff0c;当a为数组时&#xff0c;会输出数组数目行&#xff0c;每行是一个元素相关文…...

Hexo博客在多个设备同步

title: ‘Hexo博客在多个设备同步’ date: 2024-11-28 19:08:08 categories: Hexo教程 cover: /img/cover4.jpg description: ‘实现Hexo博客在不同的设备上都可以使用和上传’ 博客链接1 &#xff1a;Hexo搭建博客的多终端同步问题 博客链接2:Hexo博客多台电脑设备同步管理 …...

淘宝Vision Pro:革新购物体验的沉浸式未来

引言 简要介绍淘宝Vision Pro版的背景,包括它在美区AppStore的发布及WWDC上的展示。阐述本文的目的:为读者提供一个全面的功能概览与设计背后的思考。设计原则 列出并简要解释5条设计原则(熟悉、直观、真实、实用、易用)。说明这些原则如何指导整个产品设计过程。核心功能详…...

公链开发中的技术实现路径:构建高效、安全的去中心化网络

区块链技术作为数字经济的重要组成部分&#xff0c;公链&#xff08;Public Chain&#xff09;是其核心架构之一。公链作为去中心化的数字账本&#xff0c;不仅承载着去中心化应用&#xff08;DApp&#xff09;的运行&#xff0c;还确保了交易的透明、安全性。随着区块链技术的…...

mac上的建议xftp 工具

mac上的建议xftp 工具 最近使用mac比较频繁了&#xff0c;但是第一次重度使用mac里面有很多的工具都是新的&#xff0c;有的window版本的工具无法使用。 xftp 的平替 Cyberduck 从它的官网上下载是免费的&#xff0c;但是如果使用 Apple store 要花费198呢。这不就剩下一大笔…...

Android 使用Charles抓包显示Unknown

最近开发的一个功能需要抓包验证一下网络请求的结果。 但是在配置完Charles的证书代理等设置后&#xff0c;抓包时显示Unknown。 在网上查了半天资料和文章&#xff0c;最终解决了问题。 以下是在调试抓包环境中遇到的一些问题和解决方法。 1、手机证书的安装 Charles在Mac…...

C++设计模式:桥接模式(Bridge)

什么是桥接模式&#xff1f; 桥接模式&#xff08;Bridge Pattern&#xff09;是一个用来解耦的设计模式&#xff0c;它将抽象层和实现层分离开&#xff0c;让它们可以独立变化。用最简单的话来说&#xff0c;就是让你能够改变抽象的功能和具体的实现&#xff0c;而不需要修改…...

spark3.x之后时间格式数据偶发报错org.apache.spark.SparkUpgradeException

3.x之后如果你去处理2.x生成的时间字符串数据&#xff0c;很容易遇到一个问题 Error operating ExecuteStatement: org.apache.spark.SparkUpgradeException: You may get a different result due to the upgrading of Spark 3.0: Fail to parse 20200725__cb90fcc3_8006_46…...

spring boot框架漏洞复现

spring - java开源框架有五种 Spring MVC、SpringBoot、SpringFramework、SpringSecurity、SpringCloud spring boot版本 版本1: 直接就在根下 / 版本2:根下的必须目录 /actuator/ 端口:9093 spring boot搭建 1:直接下载源码打包 2:运行编译好的jar包:actuator-testb…...

下载安装Android Studio

&#xff08;一&#xff09;Android Studio下载地址 https://developer.android.google.cn/studio 滑动到 点击下载文档 打开新网页 切换到english ![](https://i-blog.csdnimg.cn/direct/b7052b434f9d4418b9d56c66cdd59fae.png 等待一会&#xff0c;出现 点同意后&#xff0…...

三、计算机视觉_08YOLO目标检测

0、前言 YOLO作为目前CV领域的扛把子&#xff0c;分类、检测等任务样样精通&#xff0c;本文将基于两个小案例&#xff0c;用YOLO做检测任务&#xff0c;看看效果如何 1、对图片内容做检测 假设我有一张名为picture.jpeg的图片&#xff0c;其内容如下 我将图片和代码放到了同…...

uniapp关闭sourceMap的生成,提高编译、生产打包速度

警告信息&#xff1a;[警告⚠] packageF\components\mpvue-echarts\echarts.min.js 文件体积超过 500KB&#xff0c;已跳过压缩以及 ES6 转 ES5 的处理&#xff0c;手机端使用过大的js库影响性能。 遇到问题&#xff1a;由于微信小程序引入了mpvue-echarts\echarts.min.js&…...

uniapp首页样式,实现菜单导航结构

实现菜单导航结构 1.导入字体图标库需要的文件 2.修改引用路径iconfont.css 3.导入到App.vue中 <style>import url(./static/font/iconfont.css); </style>导航区域代码 VUE代码 <template><view class"home"><!-- 导航区域 --><…...

uniapp-vue2引用了vue-inset-loader插件编译小程序报错

报错信息 Error: Vue packages version mismatch: - vue3.2.45 (D:\qjy-myApp\admin-app\node_modules\vue\index.js) - vue-template-compiler2.7.16 (D:\qjy-myApp\admin-app\node_modules\vue-template-compiler\package.json) This may cause things to work incorrectly.…...

Git命令大全(超详细)

Git 是一个分布式版本控制系统&#xff0c;用于跟踪计算机文件的更改&#xff0c;并协调多个用户之间的工作。下面是一份较为详细的 Git 命令大全&#xff0c;涵盖了从初始化仓库到日常使用中常见的操作。 1. 初始化与配置 设置用户信息: git config --global user.name &quo…...

【机器学习】机器学习学习笔记 - 监督学习 - 逻辑回归分类朴素贝叶斯分类支持向量机 SVM (可分类、可回归) - 04

逻辑回归分类 import numpy as np from sklearn import linear_modelX np.array([[4, 7], [3.5, 8], [3.1, 6.2], [0.5, 1], [1, 2], [1.2, 1.9], [6, 2], [5.7, 1.5], [5.4, 2.2]]) y np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])# 逻辑回归分类器 # solver&#xff1a;求解器&a…...

常见的数据结构---数组、链表、栈的深入剖析

目录 一、数组&#xff08;Array&#xff09; 二、链表&#xff08;Linked List&#xff09; 三、栈&#xff08;Stack&#xff09; 四、总结 数据结构是算法的基石&#xff0c;是程序设计的核心基础。不同的数据结构适用于不同的场景和需求&#xff0c;选择合适的数据结构能…...

前端开发:构建高质量用户体验的全方位指南(含实际案例与示例)

前端开发&#xff1a;构建高质量用户体验的全方位指南&#xff08;含实际案例与示例&#xff09; 在当今数字化时代&#xff0c;前端技术不仅是网页和应用的门面&#xff0c;更是连接用户与数字世界的桥梁。一个高质量的前端开发项目不仅能够提升用户体验&#xff08;UX&#…...

Istio_05_Istio架构

Istio_05_Istio架构 ArchitectureControl PlanePilotCitadelGalley Data PlaneSidecarIstio-proxyPilot-agentMetadta Exchange Ambient Architecture 如: Istio的架构(控制面、数据面) Gateway: Istio数据面的出/入口网关 Gateway分为: Ingress-gateway、Egress-gateway外部访…...

MongoDB集群分片安装部署手册

文章目录 一、集群规划1.1 集群安装规划1.2 端口规划1.3 目录创建 二、mongodb安装&#xff08;三台均需要操作&#xff09;2.1 下载、解压2.2 配置环境变量 三、mongodb组件配置3.1 配置config server的副本集3.1.1 config配置文件3.1.2 config server启动3.1.3 初始化config …...

摄像头测距原理

以下是测距摄像头分类的 Markdown 格式输出&#xff0c;方便直接复制使用&#xff1a; 测距摄像头分类 1. 立体视觉&#xff08;Stereo Vision&#xff09;摄像头 原理&#xff1a;模仿人眼成像&#xff0c;利用两台摄像头获取不同视角的图像&#xff0c;通过视差计算场景深…...

基于centos7.9使用shell脚本部署k8s1.25平台

k8s 环境初始化安装Harbor安装k8s安装istio和kubevirt 使用脚本部署k8s1.25版本平台&#xff0c;网络插件使用flannel &#xff0c;容器运行时ctr&#xff0c;部署包括harbor仓库&#xff0c;服务网格、kubevirt服务等 使用的centos7.9资源配置如下&#xff1a; 主机IP资源ma…...

11.29周五F34-Day10打卡

文章目录 1. 问问他能不能来。解析答案:【解析答案分析】【对比分析】【拓展内容】2. 问题是他能不能做。解析答案:【解析答案分析】3. 问题是我们能否联系得上她。(什么关系?动作 or 描述?)解析答案:【解析答案分析】【对比分析】4. 我们在讨论是否要开一个会。解析答案:…...

龙迅#LT8612UX适用于HDMI 转 HDMIVGA应用领域,分辨率高达4K60HZ,内置程序,方便调试!

1. 描述 LT8612UX 是一款 HDMI 转 HDMI&VGA 转换器&#xff0c;可将 HDMI2.0 数据流转换为 HDMI2.0 信号和模拟 RGB 信号。它还输出 8 通道 I2S 和 SPDIF 信号&#xff0c;可实现高质量的 7.1 通道音频。 LT8612UX 使用最新的 ClearEdge 技术&#xff0c;除了原始的 HDMI…...

C#学写了一个程序记录日志的方法(Log类)

1.错误和警告信息单独生产文本进行记录&#xff1b; 2.日志到一定内存阈值可以打包压缩&#xff0c;单独存储起来&#xff0c;修改字段MaxLogFileSizeForCompress的值即可&#xff1b; 3.Log类调用举例&#xff1a;Log.Txt(JB.信息,“日志记录内容”,"通道1"); usi…...

时间相关转换

Timestamp(date,type) { const zeroDate = new Date(date); if(type === startTime){ zeroDate.setHours(0, 0, 0, 0); } if(type === endTime){ zeroDate.setHours(23, 59, 59, 999); } return zeroDate.getTime(); }, //**时间戳转…...

服务器挖矿

文章目录 一、确定挖矿进程并停止二、查找并清除挖矿相关文件三、检查并修复系统漏洞四、加强安全防护 一、确定挖矿进程并停止 查找挖矿进程 在Linux系统中&#xff0c;可以使用命令如top或htop来查看系统资源占用情况。挖矿程序通常会占用大量的CPU或GPU资源。例如&#xff…...

mac maven编译出现问题

背景 进行maven install 命令&#xff0c;报错&#xff1a; [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a J…...

电磁兼容(EMC):磁性材料(永磁、软磁、功能磁)详解

目录 一、磁性材料概述 二、常用磁性材料分类 1. 永磁材料 2. 软磁材料 3. 功能性磁材 三、软磁材料特点 一、磁性材料概述 磁性材料是指由过渡元素铁&#xff08;Fe&#xff09;、钴&#xff08;Co&#xff09;、镍&#xff08;Ni&#xff09;及其合金等组成的能够直接…...

如何做企业网站后台管理/网络推广引流

1. 迁移背景介绍目前我们的图数据库数据量为 顶点 20 亿&#xff0c;边 200 亿的规模。在迁移之前我们使用的 AgensGraph 数据库一个主库四个备库&#xff0c;机器的配置都比较高&#xff0c;256G 内存 SSD 的磁盘&#xff0c;单机数据量为 3T左右。在数据量比较小的情况下 Age…...

phpcmsv9网站地图/怎样开自己的网站

我们在使用笔记本电脑连接网络的时候&#xff0c;经常会碰到感叹号&#xff0c;这个感叹号代表了无internet访问&#xff0c;有很多用户都不知道这个问题怎么解决&#xff0c;那么win7系统无internet访问怎么办呢?今天为大家分享win7系统无internet访问的解决方法。无internet…...

广东万高建设网站/哪家建设公司网站

您将在本节继续团队介绍页面的制作,为另一个团队成员制作动画展示效果。首先使用键盘上的快捷键,复制当前幻灯片。 选择此处的椭圆图片。 在视图比例滑杆上点击,缩小幻灯片的显示比例。 按下键盘上的shift键。 在按下该键的同时,点击此处以同时选择多个对象。 向左侧拖…...

哪里有专业网站建设公司/互联网推广引流公司

天线辐射电磁波的原理 1.天线的作用 导线载有交变电流时&#xff0c;就会辐射电磁波&#xff0c;其辐射能力与导线的长短和形状有关。若两导线的距离很近&#xff0c;电场被束缚在两导线之间&#xff0c;因而辐射很微弱&#xff1b;将两导线张开&#xff0c;电场就散播在周围空…...

C语言做网站需要创建窗口吗/百度答主招募入口官网

原文地址&#xff1a;http://blog.csdn.net/hitwengqi/article/details/8008203 最近一直在自学Hadoop&#xff0c;今天花点时间搭建一个开发环境&#xff0c;并整理成文。 首先要了解一下Hadoop的运行模式&#xff1a; 单机模式&#xff08;standalone&#xff09; 单机…...

wordpress移动新闻/百度广告投放平台

一说到反射&#xff0c;很多人都想到了性能&#xff0c;更有甚者直接说“慎用反射&#xff0c;遗患无穷”&#xff0c;“用反射&#xff0c;感觉怎么像是退步啊&#xff5e;”&#xff0c;看到这种言论&#xff0c;直接把反射妖魔化了&#xff0c;如果这种言论长此以往&#xf…...