原标题:流程aprove 提示Cannot complete process instance. Parent process instance e2207b38-c45c-11f0-8f42-02420a975026 is suspended
背景
“何意味”?字面意思是说 当前流程的父流程被挂起,也就是暂停了导致当前子流程无法通过
这算是BUG了,时而出现?
解决思路:
我觉得既然是父流程被挂起,那我在提交前加一个健壮校验,如果存在父流程且是挂起状态就先启动在通过子流程。
但是解决问题在于前置条件的理解,为什么父流程会被挂起?要知其然
我的猜想是因为用户在操作时我点了更新服务导致事务未执行完流程被挂起了,我修改ACT_RE_PROCDEF中的流程suspention=1便可以正常执行了。但是查看资料发现条件不成立,既然用了事务如果终止应该也会回滚。于是我在源码中查找报错标识,发现在callactivity中有这段提示,这时恍然大悟,这也就是为什么客户测试飘忽不定,而我每次测试都是正常通过
前缀条件:
修改了流程模型并发起,旧流程会被挂起(这里正常单流程不会报错)
子流程完成后会触发 callActivity的 leave() 方法(内部会判断后续流程的定义是否正常)返回到父流程继续执行,导致了现在子流程通过后必报错

解决办法:
ps: 这也算是流程规范吧,毕竟是源码的判断,流程重新发布后,旧流程实例无法使用也是情理之中。但是 对于审计项目 项目周期长,如果客户有需要必定会改,所以这里还是得冗余提高健壮性,那就只能在activity在leave()之前去手动启动父流程的定义,结束或再关闭.因为流程定义是存在版本号的,开启一个旧的流程不去关闭它会有熵的影响
新发布流程定义不在挂起旧流程(这种办法可行,但是???)
针对流程定义修改后不在让旧流程挂起未免太简单了根据代码我又检查了RE表,这些是流程静态资源,里面存储了每次流程定义&部署的版本号,因为我们要把挂起关闭所以会用到这个表ACT_RE_PROCDEF,结果一轮测试果然发现,如果流程定义中开启了就会导致发布阶段出现2个同样的流程,那这里我们只需要过滤重复的 key_ 以及按照最高版本展示是否就真的完成了?(实际上这样改比1更麻烦)
思考点2:同流程定义开启了2个,那我再次修改流程定义,是否会导致版本号异常?(答:不会 只是后续会存在多个激活状态的定义)
后续我才用了1的方式,只需要重写他的compted完成后方法,覆盖掉对结束后的流程定义挂起验证即可继承重写completed方法:
目前我想到的最好的方法
