用activiti 做的流程,由于后期业务更改等导致后期流程需要修改,此时,如果有正处于流程中的那些数据(已经开始流程,但是还没结束流程的)。就只能按照就流程的定义去跑,而不能用新流程定义。比如我在新流程中新增了个驳回的功能,对于已经发起流程但是还没结束的老流程,这个功能就不能用。让这个功能可用,目前官方没有提供直接的接口,但是可以直接修改后台数据库。
1、查找要升级到最近版本流程的单子对应的PROC_INST_ID,比如值为:PROC_INST_ID=1000,
2、再到act_hi_procinst表中查询:
SELECT * FROM act_hi_procinst WHERE PROC_INST_ID_=1000
得到PROC_DEF_ID_,即老的流程定义ID,比如值为:appl_process:2:22570;
3、再到act_re_procdef表中查询:
SELECT * FROM act_re_procdef WHERE KEY_ = 'fund_appl_process'
得到最新的流程定义ID,比如值为:appl_process:6:145358;
4、最后更新如下两个表:
UPDATE act_ru_execution SET PROC_DEF_ID_ = 'appl_process:6:145358' WHERE PROC_DEF_ID_ = 'appl_process:2:22570' AND PROC_INST_ID_ =1000;
UPDATE act_ru_task SET PROC_DEF_ID_ = 'appl_process:6:145358' WHERE PROC_DEF_ID_ = 'appl_process:2:22570' AND PROC_INST_ID_ =1000;
5、剩下的事情就是交给业务方去跑流程就可以了。
6、注意点:如果重新部署的新流程中用到了一些新的变量,而这些新的变量在后期流程中无法自动加入到流程中去时就不能用这种方式,此时可以修改程序逻辑加入或者直接再加到变量表。