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

Camunda 工作流节点跳转 - 多实例节点判断和跳转

在多种工作流引擎中,Camunda框架对流程的处理控制更为强大、灵活。

在应对流程节点按业务需要进行自由跨节点跳转的需求时,通过代码自由控制节点的跳转在Camunda中是支持的,并且提供了编码方法,其中多实例的处理上有一些区别要特别注意:

1、单实例节点,或者不是基于集合配置的多实例节点。

2、多实例 userTask 节点,在 <multiInstanceLoopCharacteristics ...> 中通过配置 collectionelementVariableuserTask 提供 assignee 变量引用的。

其中第1点,跳转节点的主要代码片段如下:

ProcessInstance processInstance = ...;
runtimeService.createProcessInstanceModification(processInstance.getId()).cancelAllForActivity("Activity_8dsxc8ds") // 取消当前节点所有活动中的Task任务(可选使用).startBeforeActivity("Activity_0qsw8c1") // 目标节点Id,在流程图中看,固定值(一般起一个正规的名字).setVariable("带入所需变量key", "变量值Object类型").execute();

如果多实例活动是基于集合配置的,则执行 startBeforeActivity 指令时不会考虑集合,并且不会为附加实例填充集合元素变量,针对这种情况,需要使用下面的处理方法。

第2点,基于集合的多实例跳转节点的跳转时,需要在节点Id后追加特定字符串 #multiInstanceBody,示例如下:

ProcessInstance processInstance = ...;
runtimeService.createProcessInstanceModification(processInstance.getId()).cancelAllForActivity("Activity_8dsxc8ds").startBeforeActivity("Activity_0qsw8c1#multiInstanceBody") // 目标节点是多实例节点,节点Id后面必须增加后缀 #multiInstanceBody.setVariable("带入所需变量key", "变量值Object类型").execute();

注:对于目标节点是多实例的节点,如果不在节点Id后面追加框架约定的字符串 #multiInstanceBody,则不能自动执行触发多实例节点配置的 <multiInstanceLoopCharacteristics .... > 中的集合变量处理。

对于如何判断一个节点是多实例节点,可以参考使用下面我写好的一个判断方法:

    /*** 判断一个节点是否为多实例节点* * @param repositoryService 可以注入Camunda对象直接使用* @param processDefinitionId 流程定义Id* @param activityId 节点Id* @return 是否多实例节点*/public boolean isMultiInstanceActivity(RepositoryService repositoryService, String processDefinitionId, String activityId){boolean isMultiInstanceActivity = false;BpmnModelInstance bpmnModelInstance = repositoryService.getBpmnModelInstance(processDefinitionId);Optional<Process> processOptional =bpmnModelInstance.getModelElementsByType(Process.class).stream().filter(p -> p.getId().equals(processDefinitionId)).findFirst();if(processOptional.isPresent()){Process process = processOptional.get();Optional<FlowElement> activityOptional = process.getFlowElements().stream().filter(flowElement -> flowElement.getId().equals(activityId)).findFirst();if(activityOptional.isPresent()){isMultiInstanceActivity =CollectionUtils.isEmpty(activityOptional.get().getChildElementsByType(MultiInstanceLoopCharacteristics.class));}}return isMultiInstanceActivity;}

官方参考文档:https://docs.camunda.org/manual/7.19/user-guide/process-engine/process-instance-modification/#modify-multi-instance-activity-instances


(END)

相关文章:

Camunda 工作流节点跳转 - 多实例节点判断和跳转

在多种工作流引擎中&#xff0c;Camunda框架对流程的处理控制更为强大、灵活。 在应对流程节点按业务需要进行自由跨节点跳转的需求时&#xff0c;通过代码自由控制节点的跳转在Camunda中是支持的&#xff0c;并且提供了编码方法&#xff0c;其中多实例的处理上有一些区别要特…...

MySQL不停重启问题

MySQL不停的自动杀掉自动重启 看一下log日志 my.cnf 里配置的 log_error /var/log/mysqld.log vim /var/log/mysqld.log 报的错误只是 [ERROR] Cant start server: Bind on TCP/IP port: Address already in use [ERROR] Do you already have another mysqld server …...

ol-cesium 暴露 Cesium viewer 对象以及二三维切换、viewer 添加点功能示例

ol-cesium 暴露 Cesium viewer 对象以及二三维切换、viewer 添加点功能示例 核心代码完整代码在线示例 二三维一体化的概念一直都比较火热&#xff0c;虽然大多数都是狭义的概念&#xff0c;但是很多需求方也想要这样的功能。 Openlayers 官方出了一个二三维一体化的工具&…...

国产化-达梦数据库安装2

目录 DM8数据库下载地址 安装一路狂飙next 启动服务 随着国家政府的推广、越来越多的政府项目、在系统部署需要采购国产服务器、数据库等 DM8数据库下载地址 https://eco.dameng.com/download/ 安装一路狂飙next windos安装比较简单直接next即可 仅仅记录几个关键疑问地方k…...

延长OLED透明屏的使用寿命:关键因素与有效方法分享

OLED透明屏作为一项创新的显示技术&#xff0c;具备透明度和高清晰度的特点&#xff0c;在各个领域得到了广泛应用。 然而&#xff0c;为了确保OLED透明屏的持久性和稳定性&#xff0c;延长其使用寿命是至关重要的。根据最新的研究和数据报告&#xff0c; 在这篇文章中&#…...

域名是指哪一部分?

域名是指互联网中用于识别和定位网站的地址。它是由多个部分组成的&#xff0c;每个部分都具有特定的含义和功能。下面是有关域名各个部分的解释。 顶级域名&#xff08;Top-Level Domain&#xff0c;TLD&#xff09;&#xff1a; 顶级域名是域名的最高级别部分&#xff0c;通常…...

MPP 还是主流架构吗

MPP 架构&#xff1a; MPP 架构的产品&#xff1a; Impala ClickHouse Druid Doris 很多 OLAP 引擎都采用了 MPP 架构 批处理系统 - 使用场景分钟级、小时级以上的任务&#xff0c;目前很多大型互联网公司都大规模运行这样的系统&#xff0c;稳定可靠&#xff0c;低成本。…...

ubuntu查看网速

使用speedomster测试网速 sudo apt-get install speedometer 查询需要测速的网卡 speedometer -r ens33 -t ens33 -r: 指定网卡的接收速度 -t: 指定网卡的发送速度 使用nload测试 sudo apt-get install nload 测速 nload -t 200 -i 1024 -o 128 -U M 参数含义&#xff0…...

【官方中文文档】Mybatis-Spring #使用 MyBatis API

使用 MyBatis API 使用 MyBatis-Spring&#xff0c;你可以继续直接使用 MyBatis 的 API。只需简单地使用 SqlSessionFactoryBean 在 Spring 中创建一个 SqlSessionFactory&#xff0c;然后按你的方式在代码中使用工厂即可。 public class UserDaoImpl implements UserDao {//…...

go gorm belong to也就是多对一的情况

多位员工属于同一个公司&#xff0c;一个公司包含多个人&#xff0c;关系放在多的那一部分 belongs to 会与另一个模型建立了一对一的连接。 这种模型的每一个实例都“属于”另一个模型的一个实例。 例如&#xff0c;您的应用包含 user 和 company&#xff0c;并且每个 user 能…...

亚马逊云科技 云技能孵化营——机器学习心得

亚马逊云科技 云技能孵化营机器学习心得 前言什么是机器学习&#xff1f;机器学习如何解决业务问题&#xff1f;什么时候适合使用机器学习模型&#xff1f;总结 前言 很荣幸参加了本次亚马逊云科技云技能孵化营&#xff0c;再本期的《亚马逊云科技云技能孵化营》中&#xff0c…...

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…...

PySide6学习笔记--基础环境的安装配置

PySide6介绍 QT官方发布Qt6.0之后&#xff0c;紧接着于2020年12月10日发布了PySide 6&#xff0c;对应C版的Qt6。从PySide6开始&#xff0c;PySide的命名也会与Qt的大版本号保持一致。需要注意的是使用PySide6开发的程序在默认情况下&#xff0c;不兼容Windows7系统&#xff0c…...

算法通关村第九关——中序遍历与搜索树

1 中序遍历和搜索树原理 二叉搜索树按照中序遍历正好是一个递增序列。其比较规范的定义是&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值均小于它的根节点的值&#xff1b;若它的右子树不为空&#xff0c;则右子树所有节点的值均大于它的根节点的值&…...

测试框架pytest教程(5)运行失败用例-rerun failed tests

# content of test_50.py import pytestpytest.mark.parametrize("i", range(50)) def test_num(i):if i in (17, 25):pytest.fail("bad luck") 运行这个文件&#xff0c;2个失败&#xff0c;48个通过。 要运行上次失败的测试用例&#xff0c;可以使用--l…...

【车载开发系列】UDS当中的时间参数

【车载开发系列】UDS当中的时间参数 UDS当中的时间参数 【车载开发系列】UDS当中的时间参数一. 术语定义二. 网络层时间调整参数三. ECU诊断层与会话层参数 一. 术语定义 缩写全称中文说明BSBlock Size块大小STminSeparation time min时间间隙SIService Identifier服务标识符S…...

PDF中的表格怎么转换为Excel?这两个工具一定得收藏!

PDF是一种常见的文件格式&#xff0c;它可以保持文件的原始样式和内容&#xff0c;但是也有一些缺点&#xff0c;比如不易编辑和处理数据。如果你想要将PDF中的表格或数据导出到Excel中&#xff0c;以便进行分析、计算或制作图表&#xff0c;那么你可能需要一个专业的PDF转Exce…...

ssh scp sshpass

ssh命令用于远程连接主机 ssh usernamehostname更多用法参考&#xff1a; ssh常用用法 scp 命令是用于通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令 比如&#xff1a; scp /data/log/a.txt root192.168.1.100:/data/log该命令就就将本地的a.t…...

leetcode 1996. 游戏中弱角色的数量(排序的魅力)

题目 题意: 给定n个人的攻击力和防御力&#xff0c;对于一个人来说&#xff0c;如果存在某个人的攻击力和防御力都比他高&#xff0c;那么称这个人为弱角色。统计弱角色的数量 思路: 排序&#xff0c;攻击力按从大到小排序&#xff0c;这样遍历的时候某个数时前边的攻击力都比他…...

从头到尾说一次 Spring 事务管理(器) | 京东云技术团队

事务管理&#xff0c;一个被说烂的也被看烂的话题&#xff0c;还是八股文中的基础股之一。​ 本文会从设计角度&#xff0c;一步步的剖析 Spring 事务管理的设计思路&#xff08;都会设计事务管理器了&#xff0c;还能玩不转&#xff1f;&#xff09; 为什么需要事务管理&…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...