activiti5 工作流的回退功能

5 篇文章 0 订阅

        activiti5 工作流 本身不提供回退,按网络的说法,外国人的回退也是要在流程图设计里面画出来的,可惜在中国各种各样的需求,肯定是需要实现的。在实现回退的功能上看了网络上面的方法,都是直接修改分支表的节点ID或者通过设置节点的下节点来实现回退和跳跃等需求,可惜都只支持单线流程,一旦有并行,包容网关,外嵌,内嵌子流程就无法成功了,还会出现不可控的错误。

        为了实现这些情况,只好自己实现一个CMD来做回退,先分析引擎是怎么处理并发,子流程的。通过模拟,查看表act_ru_execution,里面的IS_ACTIVE_:是否存活,IS_CONCURRENT_:是否有并发,PARENT_ID_:父节点ID,SUPER_EXEC:父分支ID出现在并发分支,出现在调用外部子流程。(这里提一点,activiti5的一个小问题,在多级并发的情况下,记录规则有所不同,从2级开始记录的分支和1级的分支的规则不一样,至于如何大家去看数据库)

        制定回退规则:先查找回退的节点,开始删除分支,根据回退节点创建分支以及任务,对子流程等几种特殊节点做处理。首先是查找回退的节点,在遍历的时候要注意子流程的情况,然后开始删除分支,在删除分支的时候注意多级并发的情况(上面说到了),直接用递归删除即可。(分支表总会保持一个主干即ID与流程实例ID相同那个,这个保留住,在这个里面做文章),最后开始创建分支,根据主干以及发现的规则创建分支和任务即可。(其中在删除任务的时候记得历史表也保存一下)

在创建分支的情况分析:

* 处理分支,分支就是流程的指针
* 情况:
* 1.回退节点多个,聚合节点退回到并行
* 2.回退节点一个,同时有并行的运行节点,并行节点退回到聚合
* 3.内嵌子流程回退,分支要删除
* 4.回退节点是子流程,创建分支
* 5.外嵌子流程回退,子流程要删除,
* 6.回退节点是外嵌子流程
* 7.没有分支的回退,最基本

根据上面的规则现在是没问题了,不过由于在开发的时候没有考虑到多实例的情况,后续再加入进去,这里只能先不回退多实例的情况。还有在操作的过程中,没必要自己写jdbc来直接操作数据库,activiti的api很丰富,特别是在cmd模式里面,很多manager可以使用,完全足够大家用了。先说到这里,代码由于是公司的项目我就不贴了。给大家一个思路。不一定是最好的,最少是中办法。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值