技术标签: activiti flowable flowable工作流 flowable学堂
一、驳回/退回上一步/退回到(历史某一个节点)
我们经常需要工作流中退回上一步,或者退回历史某一个节点。但由于流程的场景是很复杂的,回退有以下一些场景:
1.串行路线上的退回:流程中没有任何网关(排他网关/并行网关)和会签多实例。
2.退回到并行网关分支中的某一个节点上:
3.并行网关中的某一个分支节点上发起退回,退回到并行网关前面的某一个节点上
4.子流程中退回到主干流程中某一个节点/主干流程退回到子流程中某一个节点。
如下图:
二、flowable实现:
1.普通串行路线上的退回(此流程中没有并行网关的退回时),此方法支持普通串行节点/会签多实例节点/排他网关节点:
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(proInstanceId)
.moveActivityIdsToSingleActivityId(curTaskKeys, targetTaskKey)
.changeState();
或者
moveActivityIdTo(String currentActivityId,String newActivityId);
2.并行网关中发起退回(即撤销当前的网关),这个地方不能用moveActivityIdTo(String currentActivityId,String newActivityId);是因为当某一个分支完成,它的is_active为0,另一条分支没有完成时。这时候这个方法是取不到所的分支的key的,它只有is_active为1的key能取到,不然就会造成多一条垃圾数据,同时再走并行时,任何一个分支不会等另一个分支就完走到分支的合并节点上,这就是bug,所以要改为以下方法:
// 并行网关的退回
List<String > currentExecutionIds = new ArrayList<>();
List<Execution> executions = runtimeService.createExecutionQuery().parentId(proInstanceId).list();
for (Execution execution : executions) {
System.out.println("并行网关节点数:"+execution.getActivityId());
currentExecutionIds.add(execution.getId());
}
runtimeService.createChangeActivityStateBuilder()
.moveExecutionsToSingleActivityId(currentExecutionIds, targetTaskKey)
.changeState();
3.退回到并行网关中的某一个节点:经试验退回时必须同时退回并行网关中的所有分支。
List<String > targetTaskKeys = new ArrayList<>();
targetTaskKeys.add("sid-CA74ADED-7E70-451D-951C-95988BFC3F07");
targetTaskKeys.add("sid-7922C598-74FD-4848-95AC-D9790AF68432");
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(proInstanceId)
.moveSingleActivityIdToActivityIds("sid-CAD50E6F-7E0C-437D-816B-DDBA1A976A79", targetTaskKeys)
.changeState();
4.主干流程和子流程的退回(没有试验过),官方提供了以下方法:
moveActivityIdToParentActivityId(String currentActivityId, String newActivityId)
moveActivityIdToSubProcessInstanceActivityId(String currentActivityId, String newActivityId, String callActivityId)
moveActivityIdToSubProcessInstanceActivityId(String currentActivityId, String newActivityId, String callActivityId,Integer subProcessDefinitionVersion)
文章目录Flask表单操作Flask表单操作Form表单,在Web应用中无处不在。比如:用户登录表单,用户注册表单。所有的表单都有共性,比如有文字输入框,单选框,密码输入框等;表单的验证也有共性,比如有非空验证,长度限制,类型验证等。如果有个框架能够将这些共性抽象出来,那就能大量简化我们的工作。Python的WTForms就提供了这些功能。这里我们就结合Flask的WTForms扩...
在使用poi实现excel批量导入和导出时遇到了很多问题,在实现用户信息批量导出成excel时,我将所有数据都使用excel的字符类型,这样就不用考虑excel类型与java类型的转换问题,但是实现导入的时候会有许多问题,将excel值传到java时就会有类型转换问题,因为你不能保证他全部按照字符类型来存储,而且excel能够自动根据输入值确定相应的类型,所以需要先判断类型再来选择java相应的类...
js\app\design\frontend\default\theme508\template\ecommerceteam\cloud-zoom\catalog\product\view\media.phtml
格雷码(Graycode)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,...
centos7 sysbench --test=oltp --mysql-user=root --mysql-password=123456 --mysql-host=127.0.0.1 --mysql-port=3306 --db-driver=mysql-mysql-socket=/usr/local/mysql/mysql.sock --oltp-table-size=1000000
java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。跟之前的传统写法对比,能少写不少代码。新建实体类1 package com.vvvtimes.vo;23 import java.math.BigDecimal;4 import java.util.Date;5 6 public class User {7 8 private Long id;9 10 //姓名 11 private String
有向图邻接表,自我感觉比邻接矩阵要理解复杂一点,但是节省的空间不是小数目,所以虽然复杂,但是我们还是要优先考虑邻接表吧。 下面代码简单的写了邻接表,但是基本核心的代码全部包括了,之后图中加权的我也在代码中有所涉及,我们只要更一些参数就可以。基本符合所有要求了吧。输入: 4 5 a b c d 0 3 1 0 1 2 2 0 2 1
1.概念DWR(Direct Web Remoting)是一个web远程调用框架,利用这个框架可以让ajax开发变得很简单,利用DWR可以在客户端利用JavaScript调用服务器端的java方法并返回值给JavaScript,就好像直接本地客户端调用一样,其实大家知道 JavaScript 是客户端的脚本语言,怎么可以调用服务器端的Java方法,因为DWR根据java类 来动态生成JavaS
浪潮服务器系统安装及raid配置文档.pdf 浪潮多型号服务器操作系统安装操作步骤及raid阵列配置,包含bios设置,内容详细。1)主机序列号输入错误,请再次确认主机序列号是否准确2)生产日期早于2007年的个别主机可能查询不到3)浏览器问题,请换用搜狗或谷歌浏览器再试。在弹出的页面中查到机器配置。示例显示RAD卡型号是...浪潮多型号服务器操作系统安装操作步骤及raid阵列配置,包含bios设...
昨天晚上在u-nas上安装mysql,结果晚上一直有问题。今天在虚拟机下安装u-nas然后安装mysql。(1)下载的mysql-8.0.15-linux-glibc2.12-x86_64.tar 通用版。结果解压就是问题 1、gzip: stdin: not in gzip format 不是zip格式 然后 取消 z参数 ...
Git钩子脚本对于在提交代码审查之前识别简单问题很有用。我们在每次提交时都运行钩子,以自动指出代码中的问题,例如缺少分号,尾随空白和调试语句。通过在代码审阅之前指出这些问题,代码审阅者可以专注于更改的体系结构,而不会浪费琐碎的样式问题。我们建立了预提交来解决钩子问题。它是用于预提交挂钩的多语言包管理器。您可以指定所需的挂钩列表,并且在每次提交之前,预提交可以管理用任何语言编写的任何挂钩的安装和执...