【2024】Camunda常用功能基本详细介绍和使用-上 (1)
这里写目录标题
- 前言
- 一、 介绍
- 基本概念介绍
- 1.BPMN
- 2.Form
- 3.DMN
- 二、Camunda使用
- 1、下载安装
- 1.1、camunda-modeler:BPMN绘画工具
- 1.2、camunda-bpm-run:web端控制页面
- 2、创建流程
- 2.1、部署一个基础流程
- 2.2、添加用户任务
- 2.2.1、绑定表单
- 2.2.1.1、Generated Task Forms
- 2.2.1.2、Camunda Forms方式
- 创建form表单
- 绑定form表单
- 2.2.2提交
- 2.3、给流程添加活动
- 2.3.1、curl添加
- 2.3.2、REST Client
- 2.4、处理用户活动
- 2.5、添加用户
- 2.5.1、继续处理用户活动
- 2.6、添加外部活动
- 2.7、添加网关
前言
该专栏主要为介绍camunda的学习和使用
- 🍅【2024】Camunda常用功能基本详细介绍和使用-下(1)
- 🍓【2024】Camunda常用功能基本详细介绍和使用(业务决策和定时事件)-下(2)
在学习camunda之前我们首先得先了解目前主流的一些工作流引擎,目前市面上几个主要的工作流引擎jBPM7、Activiti7、Flowable6.5、Camunda7主要都是由jBPM发展而来的。因此在使用上也会大致相同,基本上熟悉了一个去学习其他的难度也都相对会比较低。

以下是jBPM、Activiti、Flowable和Camunda四个主流工作流引擎:
| 特性 | jBPM | Activiti | Flowable | Camunda |
|---|---|---|---|---|
| 许可证 | ASL(Apache软件许可证) | Apache License 2.0 | Apache License 2.0 | Apache License 2.0 |
| 社区 | 活跃的社区,但正在增长 | 庞大的社区,但是有分支与Flowable | 围绕具体问题的活跃社区 | 非常活跃且强有力的社区 |
| 工作流定义 | BPMN、DMN | BPMN | BPMN | BPMN、DMN |
| 建模工具 | jBPM Designer | Activiti Designer | Flowable Designer (基于Eclipse) | 在Cockpit内嵌包含模型 |
| 任务管理 | 高级的任务管理能力 | 任务服务API,人类任务 | 任务服务API,任务身份确认 | 人类任务,案件管理 |
| 流程执行 | 状态JPA Hibernate | 内存执行,自定义持久化 | 内存执行,JPA | 内存执行,JPA |
| 集成 | Web Services,Seam,REST,JEE | REST,Spring,JEE集成 | Spring,REST,微服务 | Spring,Spring Boot,REST, BPMN IO |
| 决策管理 | Drools引擎(业务规则) | - | - | DMN(决策表和决策树) |
| 流程可见性和审计 | 审计日志,BPMN执行视图 | 运行时服务和历史服务 | 审计日志路径 | Cockpit, Operate |
| 可扩展性 | 设计为大型企业应用 | 支持集群和可扩展性 | 可扩展,分布式执行 | 可扩展性,支持集群 |
| 用户任务交互 | 通过BPM控制台与任务表单 | 任务列表,表单API | 任务列表,表单API | 任务列表,易用表单,DMN表单 |
| 决策模型 | DMN 1.1 | - | - | DMN 1.1 |
| 案例管理 | 支持 CMMN | 有限的(通过Activiti Explorer) | - | CMMN 1.1 |
| 扩展性 | 插件,外部任务,工作项 | 变量扩展,任务处理器 | Delegate,听众 | Camunda spin,Delegate,CAM修复工具 |
| 对其他技术的支持 | 是 | 有限的 | 是 | 强大的支持,库,连接器 |
| 商业支持 | Red Hat提供支持 | 多个提供商 | Flowable提供支持 | 企业支持 |
| 学习曲线 | 中等至陡峭 | 中等 | 中等 | 中等至陡峭 |
| 使用场景 | 大型企业,复杂决策管理要求 | 柔性业务流程自动化 | 柔性业务流程自动化 | 复杂流程,决策支持要求较高 |
| 最新发布版本(截至2023年) | 7.x | 7.x(具体版本可能变化) | 6.x | 7.x(开源) / 8.x(商业) |
- 所有的这些引擎都是基于Java开发的,这使得它们对Java环境下的工作流程管理非常友好。
- Activiti和Flowable的关系:Flowable是Activiti的分支项目,因此它们在很多方面有相似点。
- jBPM 是集成了决策管理和复杂业务流程的综合解决方案,Red Hat提供支持,吸引大型企业。
- Camunda 因其通过DMN提供的强大的决策管理支持而与众不同。
- 不同的引擎在流程执行方式上有所区别;一些引擎重点是内存执行,而其他提供高级的持久性选项。
在选择上,普通使用其实功能都差距不大,就可能一些内部细节上会有区别,但在开源版本使用上Camunda相对会更新的频率高一些,并且工具相对也齐全一些,所以优先推荐使用Camunda
一、 介绍
Camunda在发展上目前主要是分为了两个主要版本7.x和8.x,7.x的为开源版本,目前更新到最新的是7.23,本教程介绍使用的是7.20,也是相对比较新的版本,不同的版本之间会有一定的差异。测试过几个版本,相对这个会比较好用一点。
常用几个官方的网站
- 开源版官方操作手册:https://docs.camunda.org/get-started/quick-start/
- camunda-modeler和camunda-bpm下载地址:https://downloads.camunda.cloud/release/
- 官方示例git仓库:https://github.com/camunda/camunda-bpm-examples
基本概念介绍
1.BPMN
BPMN(Business Process Model and Notation)是业务流程模型与标记法,是一组由对象管理组织(Object Management Group, OMG)发布的图形符号,用来直观地表示业务流程。它通过标准化的图形表示法,使业务流程能够在不同组织和技术领域之间得到一致理解。目前工作流使用的都是这个2.0版本的一个标准。
基本常用符号
-
事件Event

-
活动Activity
活动是工作或任务的一个通用术语,一个活动可以是一个任务,还可以是一个当前流程的子处理流程;其次,你还可以为活动指定不听的类型

-
网关GateWay
网关用来处理决策,有几种常用的网关

2.Form
在Camunda中Form主要表示表单,主要用于以下几个方面:
- 用户任务(User Tasks) :当工作流程中需要用户输入或交互时,通过表单可以获取这些信息。
- 表单数据的流转:表单数据可以与流程变量进行映射。提交表单后,数据可以自动填入流程变量,或者通过Variables API进行后续处理。
- 校验和逻辑:Camunda表单支持复杂的表单验证逻辑和条件渲染。这意味着表单中的字段可以根据用户的输入或外部条件显示或隐藏、启用或禁用。
3.DMN
Camunda集成了DMN来管理业务决策,这有助于:
- 决策表(Decision Tables) :决策表是DMN的核心概念,它以表格形式清晰直观地展示了各种决策规则。用户可以定义输入条件、决策输出以及相关的规则,当输入条件满足规则时,决策输出会得到相应的值。
- 决策树和流程图:DMN也支持基于决策树和流程图进行建模,适用于更加复杂的决策逻辑,其中实例化的路径可以可视化地表示出来。
- 决策服务:Camunda可以将DMN决策表作为服务部署,使其可以在流程中使用,或者通过REST API被调用。这意味着决策可以独立于流程存在,增加了决策的重用性和保持性。
- 与流程整合:DMN模型可以无缝地集成到Camunda的工作流程中。这意味着在流程中的任意一步都可能需要一个业务决策,其中决策的结果直接影响流程的流向或执行任务。
- 决策自动化:内置的DMN引擎能够自动执行决策逻辑,这大大提高了决策的执行效率并减少了人工判断的错误。
二、Camunda使用
1、下载安装
我们总共需要安装两个东西camunda-modeler和camunda-bpm。可以通过上面的地址看不同的版本进行选择,或者直接通过下面的地址下载和我一样的。
1.1、camunda-modeler:BPMN绘画工具
-
下载安装
🚀下载地址。根据自己主机环境选择不同的版本安装

mac的直接下载.dmg即可

如果是windows则下载win的压缩包,解压后,点击camunda-modeler.exe文件即可打开 -
打开后选择中间的Camunda7的BPMN digagram进行创建一个.bpmn文件

-
功能区介绍

1.2、camunda-bpm-run:web端控制页面
-
下载安装
🚀下载地址

-
介绍
解压后,可以使用vs code查看具体的结构.sh的是linux和mac的可执行文件,.bat的是win的。
resources目录是存放bpmn文件的
userlib目录是存放jar包的,如果有自定义的jar包可以放那
-
添加配置
在default.yml文件添加下面配置,7.20之后必须要设置历史生存时间,可以通过配置文件设置后,就不用每个bpmn文件单独配置了。camunda.bpm: # 历史生存时间generic-properties:properties:historyTimeToLive: P30D
-
启动
通过对应的start文件启动,进入下面页面表示启动成功

-
登陆
把路径后缀清楚掉会重定向到登陆页面,可以直接通过账号密码登陆,默认的账号密码就是default.yml文件中配置的demo/demo,可以自己改为自己想要的。

点击登陆后,会先有一个弹窗然后随便点一个,就可以进入主页了

2、创建流程
模拟创建一个请假流程,一步步实现复制功能
2.1、部署一个基础流程
-
先通过开始事件添加一个活动

-
在通过这个活动添加一个结束时间

-
添加名称
双击符号,或者通过右边的name添加

同理,后面两个也一样

-
上传
点击空白区域,添加流程ID,

然后在点击下面的小火箭发送数据到web端,第一次需要先把文件进行本地保存。发送到地址ip就是你web服务的ip

-
查看
然后回到web端,点击Cockpit查看流程

在点击Process Definitions查看流程列表
查看列表,默认有两个测试的数据,第一条就是刚刚新增的
双击后就可以看到对应的流程图,左边为流程图的信息。

2.2、添加用户任务
直接给活动图标指定为用户任务

给这个活动指定处理的人员

2.2.1、绑定表单
2.2.1.1、Generated Task Forms
直接添加字段绑定,先在Forms选择 Generated Task Forms类型,然后在再下面flelds添加字段,我这分别添加了leadAudit、leadDiscuss两个字段


重新提交查看
2.2.1.2、Camunda Forms方式
创建form表单
-
点击右上角添加一个form表单文件

-
在从左边添加输入方式
分别选择一个test的输入框和一个一个checkbox复选框

-
配置输入框
添加配置
-
配置复选框
复选框也一样,复选框勾选表示true,不勾选表示false

-
保存
点击空白地方,给这个form添加一个id,这个id用作给bpmn做绑定的

绑定form表单
在新添加的用户活动里面设置如图,form reference表示 form表单的id

2.2.2提交
如果流程里面有活动绑定了form表单需要把表单绑定一起提交

提交后就可以重新回到web页面刷新页面,选择最新的版本即可

2.3、给流程添加活动
2.3.1、curl添加
直接在命令行输入
curl -H "Content-Type: application/json" -X POST -d '{"variables": {"duration": {"value":2,"type":"integer"}, "reason": {"value":"休假"}, "name": {"value":"lisi"} } }' http://localhost:8080/engine-rest/process-definition/key/businessLeave/start
返回如下表示成功

2.3.2、REST Client
推荐使用,一般我们也是会使用REST api接口方式添加。
添加的字段没要求限制,只要格式正确,可以给这个流程随意添加字段;businessLeave表示流程的key。

可以看到流程被加入了两个任务。

双击即可查看任务详情,查看添加到字段变量数据

2.4、处理用户活动
- 点击taskKlist

- 进入taskKlist,处理活动

- 输入内容,点击complete提交

- 流程查看任务
在回到流程,查看刚刚那个任务就已经执行到下一步了

点击进入详情,可以看到经理审核输入的变量也可以查看到

在回到taskKlist,处理总经理用户活动,发现不行,因为处理用户指定的是zhangsan,所以需要添加一个zhangsan用户来处理

2.5、添加用户
-
回到首页点击admin

-
在点击new user

-
添加基础信息注册

-
注册成功后即可看到多了刚刚注册的

-
再点击id进入详情选择group,点击右上角的add,绑定用户组

-
点击add 即可

2.5.1、继续处理用户活动
- 重新登陆zhangsan用户,即可对刚刚不能处理的活动进行处理

- 处理完成即结束了,刚刚的任务就表示执行完成了。

2.6、添加外部活动
-
添加活动,指定为service task

-
配置外部活动
通过implementation配置,再指定tpoic名称,提供给外部监听这个tpoic

-
创建一个maven项目
添加依赖<!-- 版本为自己wab端的版本--><dependency><groupId>org.camunda.bpm</groupId><artifactId>camunda-external-task-client</artifactId><version>7.20.0</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency>添加监听的java代码
import org.camunda.bpm.client.ExternalTaskClient;public class ChargeCardWorker {public static void main(String[] args) {ExternalTaskClient client = ExternalTaskClient.create().baseUrl("http://localhost:8080/engine-rest").asyncResponseTimeout(10000) // long polling timeout.build();// subscribe to an external task topic as specified in the processclient.subscribe("archivedFile").lockDuration(1000) // the default lock duration is 20 seconds, but you can override this.handler((externalTask, externalTaskService) -> {// Put your business logic here// Get a process variableString reason = externalTask.getVariable("reason");Integer duration = externalTask.getVariable("duration");String name = externalTask.getVariable("name");String leadDiscuss = externalTask.getVariable("leadDiscuss");String generalManager = externalTask.getVariable("generalManager");System.out.println("===========================");System.out.println("请假人:"+name);System.out.println("请假理由:"+reason);System.out.println("请假时长:"+duration+"天!");System.out.println("经理评价:"+leadDiscuss);System.out.println("总经理评价:"+generalManager);externalTaskService.complete(externalTask);}).open();} } -
重新提交流程
重新提交后选择最新的版本,再通过postman,提交添加一个任务
-
把任务提交到外部任务这一步,启动服务

-
查看外部服务
可以看到我们前面活动的数据和操作,打开断点让它跑完则执行完毕了;
2.7、添加网关
-
添加一个普通的排他网关

-
添加条件判断
在上面的路径,name改一下,便于查看,在添加一个条件判断表达式,
我们在一些其他的地方都可以通过${}表达式的方式获取流程中的任务传递的变量

方式同上,修改变量即可

-
动态设置处理用户

-
提交添加任务
会根据时长去判断路由往哪走

经理审核通过后,我们就可以看到,因为请假时间是5天,所以就会走到总经理审核的地方去。

相关文章:
【2024】Camunda常用功能基本详细介绍和使用-上 (1)
这里写目录标题 前言一、 介绍基本概念介绍1.BPMN2.Form3.DMN 二、Camunda使用1、下载安装1.1、camunda-modeler:BPMN绘画工具1.2、camunda-bpm-run:web端控制页面 2、创建流程2.1、部署一个基础流程2.2、添加用户任务2.2.1、绑定表单2.2.1.1、Generated…...
用人话讲计算机:Python篇!(十二)正则运算+re模块
目录 一、正则表达式 (1)什么是正则表达式 (2)它的结构及使用 示例: 1.字符 . (←这里有个小点哦) 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d (3)补充ÿ…...
使用create-react-app创建工程时报错处理
1:全局安装create-react-app npm install -g create-react-app 2:切换到项目要创建的目录下 cd /d G:\vsCode_project\react 3:使用脚手架命令创建工程 create-react-app 项目名 项目名命名要遵循npm包命名规范:数字、小写字…...
C# 探险之旅:第三十五节 - 类型class之抽象类 (Abstract Class) 和 抽象方法 (Abstract Method)
👋 嗨,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们要进入一片既神秘又充满无限可能的领域——抽象类与抽象函数的奇幻森林。想象一下,你是一名勇敢的骑士,要在这片森林里寻找传说中的“编程之宝”…...
qt-C++笔记之父类窗口、父类控件、对象树的关系
qt-C笔记之父类窗口、父类控件、对象树的关系 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget 及开发方式…...
Cisco Packet Tarcer配置计网实验笔记
文章目录 概要整体架构流程网络设备互连基础拓扑图拓扑说明配置步骤 RIP/OSPF混合路由拓扑图拓扑说明配置步骤 BGP协议拓扑图拓扑说明配置步骤 ACL访问控制拓扑图拓扑说明配置步骤 HSRP冗余网关拓扑图拓扑说明配置步骤 小结 概要 一些环境配置笔记 整体架构流程 网络设备互连…...
使用torch模拟 BMM int8量化计算。
使用torch模型BMM int8计算。 模拟:BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...
【FreeMarker】实现生成Controller根据模板勾选的内容查询
需求:根据模板列表勾选的字段查询列表数据 FreeMarker代码: /*** 分页列表查询** param ${entityName?uncap_first}* param pageNo* param pageSize* param req* return*///AutoLog(value "${tableVo.ftlDescription}-分页列表查询")ApiOp…...
深入理解 XPath:XML 和 HTML 文档的利器
XPath(XML Path Language)是一种用于在 XML 和 HTML 文档中定位节点的语言。它常用于 XML 解析、Web 数据抓取(如 Selenium 或 Scrapy)以及配置文件解析。本文将带你深入了解 XPath 的语法、功能及其在实际中的应用。 目录 一、什…...
DDR5 中的数据反馈判决均衡(DFE):全面解析与展望
目录 一、引言二、DFE原理三、DFE架构四、实现方案五、测试方法六、DFE效果七、成本与收益八、具体应用九、技术发展趋势十、参考文献 一、引言 DDR5 作为新一代内存标准,其中的数据反馈判决均衡(DFE)技术更是引人注目。DFE即判决反馈均衡&a…...
Axure高保真数据可视化大屏图表组件库
推出了一款高保真数据可视化大屏图表组件库,旨在为用户提供丰富的图表类型,使数据呈现更加直观、生动。本文将详细介绍该组件库中的各类图表元件,包括面积图、折线图、柱状图、条形图、圆环图、雷达图、仪表图以及综合类图表,以满…...
100个问题学 langchain 入门 (1/10)
100个问题学 langchain 入门 (1/10) 文章目录 100个问题学 langchain 入门 (1/10)前言**问题 1** 什么是 langchain,解决什么问题?**问题 2** LangChain 的核心组件有哪些?请列举并简要说明每个组件的作用。**问题 3** 在 LangChain 中&#…...
0001.基于springmvc简易酒店管理系统后台
一.系统架构 springmvcjsplayuimysql 二.功能特性 简单易学习,虽然版本比较老但是部署方便,tomcat环境即可启用;代码简洁,前后端代码提供可统一学习;祝愿您能成尽快为一位合格的程序员,愿世界没有BUG; …...
每日一题 326. 3 的幂
326. 3 的幂 简单 class Solution { public:bool isPowerOfThree(int n) {while(n > 3){if(n % 3 0){n n/3;}else{return false;}}return n 1;} };...
解码数据有序之道——常见排序算法总结
本文整理了常见的排序算法,采用c编码,并对其时间复杂度作以了分析。 1. 冒泡排序(Bubble Sort) 实现思路: 从数组的第一个元素开始,依次比较相邻的两个元素。如果当前元素大于下一个元素,则交…...
C语言实现图片文件的复制
在C语言中,直接处理图片文件(如JPEG、PNG等)的复制,通常涉及到文件I/O操作。这些图片文件是二进制文件,因此需要使用二进制模式读取和写入文件。 图片文件复制代码: #include <stdio.h> #include&l…...
一、windows上配置ninja环境
Ninja是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。下面介绍了windows上配置Ninja环境。 1.下载Ninja ninja官网地址࿱…...
我们来编程 -- win11多jdk版本切换
题记 售前的酒喝到位了调研需求及文档整理出来了开发要入场了,真惨啊!年底了,手里活干的好好的,因为flyback在项目地,硬是被安排进来了拥抱变化,我呸…不得不切换系统,构建代码,一股…...
JAVA 图形界面编程 AWT篇(1)
前言 为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。 AWT(Abstract Window Toolkit)介绍 AWT(抽象窗口工具包)是 Java 最早的图形用户界…...
C语言 字符串输入输出函数、scanf(“%[^\n]“,)可输入空格 、fgets删除换行符
字符串输入函数: scanf("%s",数组名) gets(数组名) fgets() --- 文件流输入函数 函数原型: int scanf( const char *format, ...…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
