最近公司做的一个项目要实现工作流程的收回,驳回等操作,而采用的工作流引擎并不支持驳回功能,这个项目恰好就我和一个实习生一块做,所以这个问题就落到我的头上来解决了。。。
客户提出的要求是驳回时要记录日志,但是审批意见之类的需要清除掉,收回时不记录日志,审批意见同样清除。
百度了一下,总结了5个解决方案:
第一种是清除当前任务的出口,实现回到上一步的功能。
根据任务ID获取当前的任务节点,进而获取流程实例,然后取到流程的定义,找到当前活动的节点与上一步活动的节点,然后清除当前活动的出口,将上一步活动的出口作为最新的活动节点。
第二种是直接将当前的activiti引擎更换为第三方的支持退会驳回的引擎。
第三种是自己编译activiti引擎,加入退回,驳回功能。
第四种是直接操作数据库,使用历史任务替换正在进行的任务。
第五种是直接实现Command接口,实现工作流程可以任意跳转。
因为时间紧急所以直接将3.编译activiti引擎给pass掉了,本来项目是接手的离职员工的项目,更换流程引擎可能会引起其他的问题,此计划暂放。