flowable6.4 并行网关 驳回 跳转 回退 多实例加签减签
目录
- 前言
- flowable6.4.2 不足之处
- 并行网关跳转驳回BUG
- 多实例加签减签BUG
- 解决之法
- 说明
- 用法
前言
flowable 优秀的工作流流程引擎框架,前身Activity
为什么要用工作流?
主要是应对:
- 流程可能随时变更
- 步骤处理人可能变更
- 并行任务处理
- 分支任务处理
- 驳回处理
- 等等
如果你不用类似于flowable工作流,久而久之你要么自己创建一套工作流框架,要么用flowable,这是必然发展之路。
有现车的成熟工作流框架为何不用?
flowable6.4.2 不足之处
并行网关跳转驳回BUG
即便如 flowable这样优秀的框架,也比较难对付中国的特色工作流。
你会遇到下面的业务需求:
【任务3】的处理人审核不通过后 要驳回给 【并行任务2-1-1】和【并行任务2-3-3】有可能就这两步处理人填写的内容有问题。
甚至还会遇到特事特办,提前跳转下面的步骤
还有遇到 并行网关 和 多实例综合场景, 某一步骤跳转至串行多实例场景。
虽然flowable 相较于Activity已经有很多改进之处,flowable的作者也意识到中国的特色工作流需求,也提供了不少跳转之类的接口。
但一般用过的应该发现,针对并行网关的跳转,实际上是有BUG的
例如下面的场景:
T5 要驳回给T2-2 和 T4-2 , 发现最后怎么也没办法流转到T5, 原因就是少了一条 T3-2的提交完成记录。
查看 act_ru_execution 表中记录
SELECT a.* FROM act_ru_execution a WHERE a.PROC_INST_ID_ = @PROC_INST_ID_ORDER BY a.START_TIME_ DESC
首先表act_ru_execution 记录中必须存在三条记录,表示并行网关的三条分支,其次走完条,字段 IS_ACTIVE_ 的值为0,然后flowable6.4.2版本跳转后并没有为并行网关生成所有的分支execution。
还有更加复杂的嵌套并行网关驳回处理:
请问 T7 驳回至T5 要怎么跳转 ????
如何在act_ru_execution 补齐所有的并行网关的分支execution记录??
在业务需求上 T7 作为审核员,他发现就T5提交的有问题,难不成要全部驳回至其实任务步骤? 因此不能说这样的需求是变态需求,无法实现。
解决诸如上面所述的各类并行网关的需求,一个看下流程是否可以变通,通过分支网关+表达式来优化,另外只能扩展flowable的接口业务逻辑了
多实例加签减签BUG
flowable 提供了人性化的多实例任务 减签加签接口
网上也有很多博客例子,但你会发现他们大多数测试的是并行多实例下的业务场景,而且大多数只是测试了加签,并没有测试减签。
当你测试串行多实例加签减签时,你会遇到一些BUG,总之你会发现多实例核心变量数值一直有问题,而且串行多实例减签会变成两个任务等异常BUG发生。
- nrOfInstances 当前任务总数
- nrOfCompletedInstances 已完成任务总数 串行多实例BUG
- nrOfActiveInstances 当前活动任务总数 该值加签后并未更新
解决之法
自定义flowable BPM2流程引擎接口封装组件
bpm2-spring-boot-starter
里面包含了跳转、加减签、输出流程图自定义高亮节点颜色等方法。
由于代码过多,无法在博客里面贴出,请移步下面的github或码云
码云
https://gitee.com/banana6/bpm2-boot-starter/tree/main/bpm2-spring-boot-starter
github
https://github.com/dwhgygzt/bpm2-boot-starter/tree/main/bpm2-spring-boot-starter
说明
- 该组件专门针对BPM流程引擎常用接口进行封装
- 目标是为了开发团队统一使用规范
- 封装整理了常用的流程操作接口(查看流程定义、启动流程)
- 封装整理常用的任务操作接口(提交、跳转、驳回到并行网关中的某几条分支)
- 暂不支持子流程相关操作,一般没有涉及这方面的业务场景
用法
- pom.xml 文件引入如下配置
<!-- 对象存储通用接口 -->
<dependency><groupId>com.middol</groupId><artifactId>bpm2-spring-boot-starter</artifactId><version>最新版本号</version>
</dependency>
- application.yml 增加如下配置,假设简单配置如下:
##########################redisclent##############################
middol:bpm2:new-process-engine-config: truedatabase-schema-update: trueasync-executor-activate: false
##################################################################
说明
- 参数 new-process-engine-config
true: 业务系统当前没有任何flowable相关的配置,引入本配置将新配置一个流程引擎false: 业务系统本身已经有flowable相关的配置(例如:flowable-spring-boot-starter),不想重复配置流程引擎
- 当 new-process-engine-config 为 fasle
async-executor-activate 和 database-schema-update 无需配置这两个参数意思:
database-schema-update: true = flowable引擎自动创建表
async-executor-activate: true =在流程引擎启动就激活AsyncExecutor
- 业务代码中引入service
@Service
public class MyBusinessServiceImpl {// 用户任务相关接口@Resourceprivate BpmUserTaskService bpmUserTaskService;// 流程部署查询操作接口@Resourceprivate BpmProcessService bpmProcessService;}
- 针对驳回到并行网关上的某几个分支节点
- 先调用bpmUserTaskService查询当前任务之前流转过的任务节点
/*** 【本任务节点】的上一步【历史任务节点】列表** @param query ignore* @return ignore*/List<BpmTaskModelEntity> listBackTaskModel(BpmBackTaskModelQuery query);/*** 【本任务节点】之前的【历史任务节点】列表** @param query ignore* @return ignore*/List<BpmTaskModelEntity> listAllBackTaskModel(BpmBackTaskModelQuery query);
到底调用哪一个,根据自身业务需求决定。
另外查看 BpmTaskModelEntity 类可以看出,里面有标志位:是否多实例,是否并行网关上节点,归属的并行网关id
这里查询的列表没有做排序,业务系统可根据节点编号进行自行排序,另外可以将相同并行网关id的 归属到一个集合里面。
- 调用bpmUserTaskService跳转接口
void jump(BpmJumpForm form);
查看 BpmJumpForm 参数对象如下:
/*** 流程跳转(适用于选择历史任务步骤驳回场景,跳转指定任务,并行网关跳转)** @author <a href="mailto:guzhongtao@middol.com">guzhongtao</a>*/
public class BpmJumpForm extends BpmBaseParam {private static final long serialVersionUID = 1L;/*** 当前任务节点*/private String taskId;/*** 目标任务节点key*/private List<String> targetTaskDefineKes;/*** 需要设置的全局相关参数,全局变量*/private Map<String, Object> variables;// ...... 省略部分代码.......
}
taskId : 当前执行驳回跳转的任务id
targetTaskDefineKes: 表示你要跳转到的任务节点,该值是你在画流程图时指定的任务ID编号, 该值从BpmTaskModelEntity 对象中可以取到。 说明: 如果为多个,则里面的任务必须全部都是并行网关上的任务节点。
- 针对多实例加签减签
调用 bpmUserTaskService
/*** 多实例-加签** @param form ignore*/void addMultiInstanceExecution(BpmMultInstAddForm form);/*** 多实例-减签** @param form ignore*/void deleteMultiInstanceExecution(BpmMultInstDeleteForm form);
这里说明一下,加签减签是 多实例里面的任务处理者进行操作的,如果还没有到达多实例任务节点,则不存在多实例加签减签业务。
因此请看 BpmMultInstAddForm 和 BpmMultInstDeleteForm
里面有一个共同参数: multiInstanceTaskId(当前操作的任务id)
在减签的时候,需要调用查询接口,查询可以减签的人员列表,当然不包含自己。
/*** 获取当前多实例任务除自己外的其他用户信息列表,* 用于 减签 业务场景** @param multiInstanceTaskId 当前多实例用户任务id* @return List*/List<MultiInstanceUserDTO> getOtherMultiInstanceUsers(String multiInstanceTaskId);
本方法的加减签操作均在原flowable的基础上做了很多处理BUG的修复工作。
flowable6.4 并行网关 驳回 跳转 回退 多实例加签减签相关推荐
- 工作流-flowable 之驳回 多实例驳回 并行网关驳回 普通节点驳回到多实例
6.4.0 新增加了驳回的方式,真是对中国式流程的一种福音呀,感谢flowable创始人. 再也不为开发驳回流程发愁了,网上那些视频和修改源码真的是demo级别的,不能商业用. 只有心如流水的学习才是 ...
- Activiti工作流并行网关驳回在发起问题
1. 问题描述 第一次发起: 流程从发起人走到并行节点 -> 人员3,和人员4,人员5,人员6是并行.人员3(同意),人员4(同意),人员5(同意),人员6(不同意)回到发起人节点. 第二次发起 ...
- activiti7 关于并行网关,一个人审核通过,一个人审核不通过,如何走流程
目录 问题 实现 问题 我现在有这样一个场景,使用并行网关进行两人审核,如果其中一个人审核不通过则回退给发起人,同时并行网关中另外一个审核人的任务也消失.这种场景使用并行网关如何实现, 实现 任务是不 ...
- flowable并行审批_Flowable6.4 – 并行网关和包容网关 | 字痕随行
这个春节的节奏就是:吃喝睡.吃喝睡,手机都懒的刷了.今天开始提振一下心情,整理一下思路,开始缓慢更新. 这次补完一下之前的一篇<Flowable6.4-排他网关>,简单介绍一下并行网关和包 ...
- 【activiti 入门】activiti6.0之并行网关
首先是环境搭建可参考之前的博客,而且有具体demo提供下载 https://download.csdn.net/download/qq_33333654/11790823 demo中仅涵盖了排他网关 ...
- activiti实战系列 并行网关(parallelGateWay)
流程图 13.2:部署流程定义+启动流程实例 13.3:查询我的个人任务 13.4:完成我的个人任务 说明: 1) 一个流程中流程实例只有1个,执行对象有多个 2) 并行网关的功能是基于进入和外出的 ...
- activiti并行网关
import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.acti ...
- 【Activiti工作流】11.并行网关
上一节我们讲解了排他网关,本节我们来讲解与排他网关类似的模式的一种网关---并行网关. 通过上一篇我们了解,排他网关是对一个事件流向线的分支决策节点,决定着任务的流向.而并行网关除了有分支以外,还有聚 ...
- vue路由跳转回退后页面不刷新处理
vue路由跳转回退后页面不刷新处理 ·利用keep-alive 缓存需要缓存的页面 具体实现流程 1.在app.vue中改写router-view <keep-alive><rout ...
最新文章
- MySQL 创建数据表
- C语言-一维数组与指针
- 批处理文件检测windows系统是32位还是64位
- em模型补缺失值_模型对缺失值的处理
- Unity3D 之UGUI 滑动条(Slider)
- 文本框内容改变触发事件
- Altium Designer(一):SCH
- wince6.0 OK6410 启动NandFlash路径下的程序快捷键
- SPSS T检验(图文+数据集)【SPSS 017期】
- oracle11g数据库登录01017,windows oracle11g数据库使用sqlplus登录的时候出现ora-01017报错...
- 城市场景车路协同网络需求研究
- 高速公路自动驾驶测试场景库
- 攻防世界逆向高手题之crazy
- 3g无线图传点到点模式与服务器模式比较,4G网络的几个关键技术指标 - 3G和4G LTE网络架构之间的区别...
- Multi-catches are not supported at language level ‘6‘ 不支持多捕获
- 基于 Springboot 和 Mybatis 的后台管理系统 BootDo | 软件推介
- 微信小程序开发之表单验证(WxValidate使用)
- vue3+vant开发微信公众号网页爬坑不完全指北
- 基于安卓的高校程序设计类课程考核平台的设计与实现
- 高斯牛顿法----MATLAB实现
热门文章
- 计算机视觉结合深度学习项目-智能停车场空车位实时识别
- 查看进程及结束进程命令
- LaTex(windet及miktex)安装教程
- MySQL 之高级命令
- TCP创建多人聊天室
- Java基础学习(2)---Java基础语法
- zip直链生成网站_调优-WEB资讯专栏-DMOZ中文网站分类目录
- echarts画出特殊形状的柱状图
- 一个典型的微型计算机绘图系统,机械制图考试理论知识练习题
- Using Memory Efficiently(Pro Android Apps Performance Optimization)