activiti 流程驳回是很常见的需求,但如果总是通过分支划线来实现驳回流程就会看起来很复杂,所以这里介绍流程驳回的实现
原理
- 重写activiti缓存,让流程定义缓存线程化(解决并发下对其他流程定义的影响)
- 任务提交前,克隆流程定义,放入线程中,直接修改ProcessDefinitionEntity 的ActivityImpl 的指向,把当前节点设置为需要跳转的目标节点。
- 提交任务
历史节点的id可以从审批历史中获取,也可以对流程进行驳回配置
如图,选择一个流程的节点进行配置,然后在流程定义中获取到配置。进行驳回的控制
跳转任意节点也是如此实现,所不同的就是计算目标节点的方式。
可以参考案例项目 https://gitee.com/agile-bpm/agile-bpm-basic