由于普元官方暂时没有提供类似接口 所以只能采用曲线救国。
思路1:回退节点终止法(简单,帮助文档中也推荐该方法,效果不那么完美)
1、流程直接回退到 相关流程节点,建立一个来存放workitmeid(回退的节点A) 和 需要 返回的流程节点 (B)关联信息 的地方;可以是流程中的相关数据区,也可以专门的表,或者其他。
2、流程提交的时候 先去 步骤1中记录的数据中 判断(可以是节点监控,拦截器,我是所有流程提交统一入口),当前workitmeid (A)是否有记录,没有就直接过,存在那么此时就不是完成工作项,而是终止活动实例,并且启动 记录的返回的流程节点 (B)流程节点。这样就能达到回退办后流程直接回到本节点效果。
backActivity:回退到指定活动 terminateActivityInstance:终止活动实例 restartActivityInstance:重启实例 |
思路2:设置自由流(复杂,效果好,偶尔会出现异常情况,好像迁移线表会出问题)
1、同样,先记录这个回退信息(同上)。
2、流程提交时,判断存在那么,就设置这个流程节点为自由流,当节点为自由流后;在调用接口方法 指定该节点的 后续节点(需要返回的节点);在调用完成工作项,最后调用接口方法 删除 “指定该节点的 后续节点”。
1. appointNextActivities(long workItemID, String appointStrategy, String[] activityDefID) 设置自由活动的后继活动 2. isFreeActivity(long workItemID) 判断对应的活动是否是个自由活动 3. queryAppointedNextActivities(long workItemID) 查询自由活动已被设置的后继活动 4. queryAppointedNextActivities4SDO(long workItemID) 查询自由活动已被设置的SDO类型的后继活动 5. queryNextFreeActivityScope(long workItemID) 获取自由活动可能的后继活动 6. queryNextFreeActivityScope4SDO(long workItemID) 获取自由活动SDO类型的可能后继活动 7. removeAppointedNextActivities(long workItemID,String[] activityDefID) 删除已被设置的后继活动 |