Camunda_3:主动撤回
貌似国际主流认知工作流通常不支持撤回/驳回,流程只能向前进行。而撤回/驳回算是一种中国特色吧。
因此Camunda对于流程修改也仅仅提供了runtimeService.createProcessInstanceModification(instanceId)来修改流程。对于撤回/驳回这种操作得自己想办法。通常的撤回/驳回逻辑如下。通过取消流程然后再某个节点重新发起流程
//.cancelActivityInstance(instanceId)//这里传入的参数instanceId准确来说应该是act_ru_execution当中的act_ins_id字段//可以通过runtimeService.getActivityInstance()来获取所有的ActivityInstance;然后调用ActivityInstance.getid()作为参数传入//在多实例的情况下ActivityInstance为树结构。这里传入instanceId会直接删除主流程和子流程的所有执行实例。this.runtimeService.createProcessInstanceModification(instanceId).cancelActivityInstance(instanceId).startBeforeActivity(taskDefinitionKey).execute();
但是这里对于复杂点的撤回是远远不够的。因为撤回的逻辑是需要判断下一个节点的任务是否执行完成的。下一节点任务未完成我才能进行撤回。而下一节点的可能性非常的多,处理用户节点这种简单的情况,还包括网关,子流程等复杂情况。除此之外,如果当前节点是会签节点,上面通过重启节点的方式来撤回是有问题的。。
目前的方式只能分别进行判断,貌似也没想到其他好方法。这里提供简单的思路,等后面对camunda的学习更加深入后在进行修改调整。
1、首先根据taskDefinitionKey获取当前节点
// ModelElementInstance modelElemen = bpmnModelInstance.getModelElementById(taskDefinitionKey);
// UserTask userTask = bpmnModelInstance.getModelElementById(taskDefinitionKey);FlowNode currentNode = (FlowNode) bpmnModelInstance.getModelElementById(taskDefinitionKey);
2、获取下一个节点
FlowNode nextNode = currentNode.getSucceedingNodes().singleResult();String typeName = nextNode.getElementType().getTypeName();String taskDefKey = nextNode.getId();
3、下一个节点的情况很多,除了用户任务,还包括服务任务,网关,子流程等。常见的就先判断用户任务与网关。(注意获取后一节点所有已经完成的任务需要获取最新的,因为用户之前可能撤回过)
ArrayList<HistoricTaskInstance> completeList = new ArrayList<>();if(nextNode instanceof UserTask){//1、获取刚刚审核的任务//2、获取后一个节点在前一个节点(也就是1刚刚获取到的任务结果)后所有完成的任务completeList.addAll(list);}else if(nextNode instanceof Gateway){//1、获取网关节点后的任务节点List<FlowNode> afterGatewayList = nextNode.getSucceedingNodes().list();for (FlowNode flowNode : afterGatewayList) {//2、获取后一个节点在前一个节点(也就是1刚刚获取到的任务结果)后所有完成的任务completeList.addAll(list);}}else {//其他情况处理不了先抛异常后面再想其他方案}if(CollectionUtil.isNotEmpty(completeList)){
// "此流程的下一节点存在已完成的任务,无法撤回“
}else {
//"进行撤回操作"}
相关文章:
Camunda_3:主动撤回
貌似国际主流认知工作流通常不支持撤回/驳回,流程只能向前进行。而撤回/驳回算是一种中国特色吧。 因此Camunda对于流程修改也仅仅提供了runtimeService.createProcessInstanceModification(instanceId)来修改流程。对于撤回/驳回这种操作得自己想办法。通常的撤回/…...
ClickHouse(二十三):Java Spark读写ClickHouse API
进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…...
Linux下的GPIO基本概念指南
一、什么是GPIO 在Linux中,GPIO(General Purpose Input/Output,通用输入输出)是一种用于控制外部设备和传感器的通用接口。它允许你通过软件控制数字信号,从而实现各种硬件设备的交互,如LED、按钮、传感器、马达等。 每个GPIO引脚…...
快速解决Spring Boot跨域困扰:使用CORS实现无缝跨域支持
跨域问题 什么是跨域? 跨域(Cross-Origin Issue)的存在是因为浏览器的安全限制,它防止恶意网站利用跨域请求来获取用户的敏感信息或执行恶意操作。浏览器通过实施同源策略来限制网页在不同源之间进行资源访问或交互的情况。当一…...
【【萌新的STM32学习-13之GPIO寄存器的用法】】
萌新的STM32学习-13之GPIO寄存器的用法 从外部来看我们有很多个GPIO 分为ABCDEF等等 每个GPIO都有16个引脚 每个引脚的名字是PA0到PA15 这是外部的看法 对于内部 引脚自然会有引脚的功能传入的模式 状态 频率 等…...
Android开发基础知识总结(一)初识安卓Android Studio
一.基础理论知识 1.Linux相当于是地基。 MIUI,EMUI等操作系统,是基于安卓的改版——且裁掉了一部分Google的服务。 (鸿蒙虽然是改版,但和安卓的架构基本上一致) 2.Kotlin和Java都是JVM语言,必须先复习好…...
常见的网络设备有哪些?分别有什么作用?
个人主页:insist--个人主页 本文专栏:网络基础——带你走进网络世界 本专栏会持续更新网络基础知识,希望大家多多支持,让我们一起探索这个神奇而广阔的网络世界。 目录 一、网络设备的概述 二、常见的网络设备 1、…...
斗鱼财报盈利的背后:左手艳舞、右手擦边
本月14日,直播平台斗鱼发布了其第二季度财报,面对“看起来还不错的数据”,其对外着重强调了“连续两个季度实现盈利”,并称“斗鱼收入结构持续优化”“斗鱼盈利能力提升”“斗鱼稳健增长可期”“督导提升了内容审核能力”。 财报…...
布隆过滤器
思考一个问题:如果我想判断一个元素是否存在某个集合里面怎么做? 一般的解决方案是先把所有元素保存起来,然后通过循环比较来确定。 但是如果我们有几千万甚至上亿的数据的时候},虽然可以通过不同的数据结构来优化数据…...
element-ui中二次封装一个带select的form组件
带select的form组件 样式 代码 <template><el-form-item label"是否有" class"append" prop"tag"><el-form-itemprop"isShare"><el-select v-model"query.tag"><el-option v-for"(item, …...
07.利用Redis实现点赞排行榜功能
学习目标: 提示:学习如何利用Redisson实现点赞排行榜功能,按照时间顺序 当用户给某一篇文章点赞后,会再数据库中存储一条数据,并且在Redis中存储一条数据为当前博客的点赞用户标识,来区分哪个用户对文章进…...
【前端vue升级】vue2+js+elementUI升级为vue3+ts+elementUI plus
一、工具的选择 近期想将vuejselementUI的项目升级为vue3tselementUI plus,以获得更好的开发体验,并且vue3也显著提高了性能,所以在此记录一下升级的过程对于一个正在使用的项目手工替换肯定不是个可实现的解决方案,更优方案是基于…...
多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测
多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测。 模型描…...
go-test
单元测试 基本用法 Go语言测试 常用reflect.DeepEqual()对slice进行比较 跳过某些测试用例 func TestTimeConsuming(t *testing.T) {if testing.Short() {t.Skip("short模式下会跳过该测试用例")}... }当执行go test -short时就不会执行上面的TestTimeConsuming测…...
假设你新换了电脑,如何不用U盘的情况下实现软件文件转移?
要将笔记本和台式机连接到同一个局域网,并实现文件共享或使用文件传输协议进行文件传输,您可以按照以下步骤操作: 设置局域网连接共享文件夹使用文件传输协议 Step 1: 设置局域网连接 确保笔记本和台式机连接到同一个局域网。有几种常见的…...
聊聊 Docker
聊聊 Docker Docker 是什么? 定义 Docker 是一款 开源的应用容器引擎。 简单来说,就是 以容器虚拟化技术为基础的软件。可以把应用程序和所依赖的包一起打包到一个可移植的镜像中,发布到 Linux 或者 Windows 上运行。(代码 运…...
运行软件mfc140u.dll丢失怎么办?mfc140u.dll的三个修复方法
最近我在使用一款软件时遇到了一个问题,提示缺少mfc140u.dll文件。。这个文件是我在使用某个应用程序时所需要的,但是由于某种原因,它变得无法正常使用了。经过一番搜索和了解,我了解到mfc140u.dll是Microsoft Visual Studio 2015…...
神经网络基础-神经网络补充概念-54-softmax回归
概念 Softmax回归(Softmax Regression)是一种用于多分类任务的机器学习算法,特别是在神经网络中常用于输出层来进行分类。它是Logistic回归在多分类问题上的推广。 原理 Softmax回归的主要思想是将原始的线性分数(得分…...
米尔瑞萨RZ/G2L开发板-02 ffmpeg的使用和RTMP直播
最近不知道是不是熬夜太多,然后记忆力减退了? 因为板子回来以后我就迫不及待的试了一下板子,然后发现板子有SSH,但是并没有ffmpeg,最近总是在玩,然后今天说是把板子还原一下哇,然后把官方的固件…...
基于swing的在线考试系统java jsp线上试卷问答mysql源代码
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的在线考试系统 系统有2权限:管…...
C# 读取pcd点云文件数据
pcd文件有ascii 和二进制格式,ascii可以直接记事本打开,C#可以一行行读。但二进制格式的打开是乱码,如果尝试程序中读取,对比下看了数据也对不上。 这里可以使用pcl里的函数来读取pcd,无论二进制或ascii都可以正确读取…...
.NET CORE Api 上传excel解析并生成错误excel下载
写在前面的话: 【对外承接app API开发、网站建设、系统开发,有偿提供帮助,联系方式于文章最下方 】 因业务调整,不再需要生成错误无excel下载,所以先保存代码,回头再重新编辑 #region Excel校验部分if (f…...
数据结构,二叉树,前中后序遍历
二叉树的种类 最优二叉树 最优二叉树画法 排序取最小两个值和,得到新值加入排序重复1,2 前序、中序和后序遍历是树形数据结构(如二叉树)中常用的遍历方式,用于按照特定顺序遍历树的节点。这些遍历方式在不同应用中有不…...
项目实战笔记2:硬技能(上)
序: 本节串讲了项目管理硬技能,有些术语可以结合书或者网上资料来理解。没有想书上讲的那样一一列举。 做计划 首先强调为什么做计划? 计划就是各个角色协同工作的基准(后面做风险监控、进度的监控),贯穿于…...
神经网络基础-神经网络补充概念-59-padding
概念 在深度学习中,“padding”(填充)通常是指在卷积神经网络(Convolutional Neural Networks,CNNs)等神经网络层中,在输入数据的周围添加额外的元素(通常是零)…...
【开源免费】ChatGPT-Java版SDK重磅更新收获2.3k,支持插件模式、实现ChatGpt联网操作。
everybody 七夕来了还单着么? 一、简介 ChatGPT Java版SDK开源地址:https://github.com/Grt1228/chatgpt-java,目前收获将近2200个star🌟。 最新版:1.1.1-beta0 <dependency><groupId>com.unfbx</g…...
情报与GPT技术大幅降低鱼叉攻击成本
邮件鱼叉攻击(spear phishing attack)是一种高度定制化的网络诈骗手段,攻击者通常假装是受害人所熟知的公司或组织发送电子邮件,以骗取受害人的个人信息或企业机密。 以往邮件鱼叉攻击需要花费较多的时间去采集情报、深入了解受…...
Swift 周报 第三十五期
文章目录 前言新闻和社区五天市值蒸发 2000 亿美元,苹果公司怎么了?在你的 App 中帮助顾客解决账单问题需要声明原因的 API 列表现已推出 提案通过的提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第三十五…...
uni-app + SpringBoot +stomp 支持websocket 打包app
文章目录 一、概述:二、配置:1. 后端配置2. uni-app(app端)3. 使用 一、概述: websocket 协议是在http 协议的基础上的升级,通过一次http 请求建立长连接,转而变为TCP 的全双工通信;而http 协议是一问一答…...
LeetCode--HOT100题(35)
目录 题目描述:23. 合并 K 个升序链表(困难)题目接口解题思路1代码解题思路2代码 PS: 题目描述:23. 合并 K 个升序链表(困难) 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合…...
临沧高端网站建设/网络推广的公司是骗局吗
Oracle存储过程,游标使用 Oracle存储过程: 语法: CREATE [OR REPLACE] PROCEDURE procedure_name (arg1 [mode1] datatype1,arg2 [mode2] datatype2,...) IS [AS] PL/SQL BLOCK; mode用于指定输入输出参数:IN为输入参数,OUT为输出参数&#…...
网站构成三要素/国际外贸网络交易平台
集合 一种无序且唯一的数据结构,不能重复,区别于栈、队列、链表ES6中有集合,名为Set集合常用的操作:去重、判断某元素是否在集合中、求交集 // 去重 const arr [1,2,2] const arr2 [...new Set(arr)]// 判断元素是否在集合中 …...
西安做网站微信公司/百度提交入口的注意事项
FPGA实践笔记(六)— FPGA内部SRAM资源 发布时间:2013-01-07 21:15:07 技术类别:CPLD/FPGA 个人分类:FPGA实践笔记 FPGA内部的CLB分为SLICE L和SLICE M,SLICE M与SLICE L大同小异,只是SLICE…...
做酒店管理网站的作用/软文500字范文
前面几个小节,我们分别介绍了冒泡排序,插入排序,直接快速排序 ,选择排序本节,我们介绍插入排序的改进版的希尔排序。 希尔排序是1959年,Shell发明的,这是第一个突破O(n2)的排序算法,…...
wordpress首页添加幻灯片/网上培训
这是一个2019年你成为前端,后端或全栈开发者的进阶指南: 你不需要学习所有的技术成为一个web开发者 这个指南只是通过简单分类列出了技术选项 我将从我的经验和参考中给出建议 首选我们会介绍通用的知识, 最后介绍2019年的Web的一些趋势 视频地址: …...
青岛网站建设公司哪家好/直通车推广计划方案
QuartZ2d是二维绘图引擎,包含在core Graphics框架中,是纯C语言的; 图形上下文:CGContextRef数据类型,包含以下信息:绘图路径,绘图状态,绘图输出目标; 注意:绘图的顺序对最终显示结果有影响; 1.当view第一次被显示的时候会调用drawRect:(CGRect )rect 2.不要手动调用drawRect…...