Activiti6实现自由跳转(可实现回退操作)

2024-03-11 09:18

本文主要是介绍Activiti6实现自由跳转(可实现回退操作),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Activiti6实现自由跳转(可实现回退操作)

工作快2年的小白,如有错误,恳请大家批评指点

Activiti实现跳转的方式:
1.流程图配置连线,正常流转
这个是最安全的也是最可靠的
2.直接指定当前流程实例执行所选的环节
先看下流程图
图1::在这里插入图片描述
如果第2步驳回 那流程应该回到第一步。接下来看代码如何实现:
if (“yes”.equals(msg)) { // 批准
map.put(“审批结果”, “【批准】” + OPINION); // 审批结果
setVariablesByTaskIdAsMap(taskId, map); // 设置流程变量
setVariablesByTaskId(taskId, “RESULT”, “批准”);
completeMyPersonalTask(taskId);
}else { // 驳回
// 记录原活动方向
List varList = returnmanager.varList(pd); //查询上一步流程记录
sql语句在这里插入图片描述
String type = varList.get(0).getString(“TASK_DEF_KEY_”).toString();// 获取当前act_hi_taskinst表中的task_del_key判断是否下一节点是否是网关
map.put(“审批结果”, “【驳回】” + OPINION); // 审批结果
if (type.indexOf(“f”) == -1) { // 在下一节点是网关节点的前一节点id设置“f”开头的非常重要的
// 主意:下一节点不上网关节点 id不要设置“f"的
setVariablesByTaskId(taskId, “RESULT”, “驳回”);
setVariablesByTaskIdAsMap(taskId, map); // 设置流程变量
String taskkey = varList.get(varList.size() - 1).getString(“TASK_DEF_KEY_”).toString(); // 获取上一节点
jump(taskId, taskkey); //回退方法
mv.addObject(“msg”, “success”);//插入驳回流程信息
mv.setViewName(“save_result”);
returnmanager.edit(pd); //修改当前流程的结束时间看sql,(可要可不要)
在这里插入图片描述
return mv;
} else { //有网关线的走下面
看图在这里插入图片描述
setVariablesByTaskIdAsMap(taskId, map); // 设置流程变量
setVariablesByTaskId(taskId, “RESULT”, “驳回”);
completeMyPersonalTask(taskId);
}
}
然后看jump方法
// 跳转方法(回退)
public void jump(String taskId, String taskkey) {
// 当前任务
Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult();
// 获取流程定义
org.activiti.bpmn.model.Process process =
repositoryService.getBpmnModel(currentTask.getProcessDefinitionId()).getMainProcess();
// 获取目标节点定义
FlowNode targetNode = (FlowNode) process.getFlowElement(taskkey);
// 删除当前运行任务
String executionEntityId = managementService.executeCommand(new DeleteTaskCmd(currentTask.getId()));
// 流程执行到来源节点
try {
managementService.executeCommand(new SetFLowNodeAndGoCmd(targetNode, executionEntityId));//流程执行到来源节点
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

type.indexOf(“f”) == -1 区分是有线的还是没线的看图
没画线的在这里插入图片描述
自己画线的在这里插入图片描述
最后好了 可以实现流程回退功能啦。

这篇关于Activiti6实现自由跳转(可实现回退操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编