ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

flowable实战(五)flowable驳回/退回上一步/退回到

2021-06-02 13:57:46  阅读:353  来源: 互联网

标签:网关 驳回 flowable 流程 并行 退回 节点 String


一、驳回/退回上一步/退回到(历史某一个节点)

        我们经常需要工作流中退回上一步,或者退回历史某一个节点。但由于流程的场景是很复杂的,回退有以下一些场景:

1.串行路线上的退回:流程中没有任何网关(排他网关/并行网关)和会签多实例。

2.退回到并行网关分支中的某一个节点上:

3.并行网关中的某一个分支节点上发起退回,退回到并行网关前面的某一个节点上

4.子流程中退回到主干流程中某一个节点/主干流程退回到子流程中某一个节点。

如下图:

 

 

二、flowable实现:

1.普通串行路线上的退回(此流程中没有并行网关的退回时),此方法支持普通串行节点/会签多实例节点/排他网关节点:

runtimeService.createChangeActivityStateBuilder()
        .processInstanceId(proInstanceId)
        .moveActivityIdsToSingleActivityId(curTaskKeys, targetTaskKey)
        .changeState();

或者

moveActivityIdTo(String currentActivityId,String newActivityId);

2.并行网关中发起退回(即撤销当前的网关),这个地方不能用moveActivityIdTo(String currentActivityId,String newActivityId);是因为当某一个分支完成,它的is_active为0,另一条分支没有完成时。这时候这个方法是取不到所的分支的key的,它只有is_active为1的key能取到,不然就会造成多一条垃圾数据,同时再走并行时,任何一个分支不会等另一个分支就完走到分支的合并节点上,这就是bug,所以要改为以下方法:

// 并行网关的退回
List<String > currentExecutionIds = new ArrayList<>();
List<Execution> executions = runtimeService.createExecutionQuery().parentId(proInstanceId).list();
for (Execution execution : executions) {
    System.out.println("并行网关节点数:"+execution.getActivityId());
    currentExecutionIds.add(execution.getId());
}
runtimeService.createChangeActivityStateBuilder()
        .moveExecutionsToSingleActivityId(currentExecutionIds, targetTaskKey)
        .changeState();

3.退回到并行网关中的某一个节点:经试验退回时必须同时退回并行网关中的所有分支。

List<String > targetTaskKeys = new ArrayList<>();
targetTaskKeys.add("sid-CA74ADED-7E70-451D-951C-95988BFC3F07");
targetTaskKeys.add("sid-7922C598-74FD-4848-95AC-D9790AF68432");

runtimeService.createChangeActivityStateBuilder()
        .processInstanceId(proInstanceId)
        .moveSingleActivityIdToActivityIds("sid-CAD50E6F-7E0C-437D-816B-DDBA1A976A79", targetTaskKeys)
        .changeState();

4.主干流程和子流程的退回(没有试验过),官方提供了以下方法:


moveActivityIdToParentActivityId(String currentActivityId, String newActivityId)

moveActivityIdToSubProcessInstanceActivityId(String currentActivityId, String newActivityId, String callActivityId)

moveActivityIdToSubProcessInstanceActivityId(String currentActivityId,  String newActivityId, String callActivityId,Integer subProcessDefinitionVersion)

标签:网关,驳回,flowable,流程,并行,退回,节点,String
来源: https://blog.51cto.com/u_10976476/2845652

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有