activti使用并行子流程-配置

 在工作使用了activiti工作流程进行业务场景。

系统发布了一个任务,可以进行审核,如果不需要审核则直接下发签收、处置。在下发处置的时候可以由多个用户进行处置,多个用户全部处置并且复核完毕,才能把处置反馈的数据进行整编,归档。

这样呢,肯定是需要用到activiti中的并行子流程。

子流程大家肯定熟悉的,并行子流程呢,我这边简单记录一下实现的方式。

我这边用的activti版本是5.22.0

流程编辑器使用了 activiti-modeler 版本也是5.22.0

完整的流程图:

开始配置并行子流程:

重要说明,集合(多实例):

        现在配置成SubprocessUserList,这个只是一个名称,在定义流程变量的时候需要传入key为SubprocessUserList的对象,必须为集合对象,Map、List、Set随意,流程它会自己遍历SubprocessUserList,有多少条会生成多少子流程任务。比如我传了一个List<String>{张三、李四},那么就会生成两个子流程任务。

元素变量:

        元素变量就是在启动子流程后,上面的List<String>{张三、李四},怎么把张三、李四放入到签收节点,就是用这个变量。看签收节点的图

当启动子流程的时候,传入的List<String>{张三、李四},会识别到SubprocessUser,自动放入到ASSIGNEE_(处理人中)。

完成条件:

        在多实列的情况下需要设置这个,因为多个任务是并行执行的,真正结束并行的条件是什么?并行实列全部完成、只需要完成一半、或者百分之八十。完成条件就是用来控制这个的。我这边设置的是${nrOfCompletedInstances/nrOfInstances==1}。

nrOfCompletedInstances(已完成实例数)和nrOfInstances(总实列数)是流程自己定义的,不需要我们去干预,流程会自己生成完成数。

然后子流程中反馈节点的代理人我也设置的和签收一样,这个大家可以按照自己的需要自己去设置。

复核节点我这边设置一个全新的参数,这个需要我们自己额外设置,如下图:

到这里,所有的配置已经完毕了,其他普通的节点配置、网关判断网上其他资料也很多,请大家可以先把基础的使用学完再看这篇。

最后,流程保存、发布。

代码使用: 

        流程配置发布完毕后,我们也需要用起来。在代码里面配置流程的必要参数,启动流程。

启动流程: 

@Override
    public ResultObj startNccpSynergyProcess() {
        //流程的key
        String processDefinitionKey = "nccpSynergyProcess";
        String businessKey = "NccpSynergyProcess-test";
        //设置流程参数
        HashMap<String, Object> variables = new HashMap<>();
        try {
            //设置不需要审核
            variables.put("ExamineGateway", -1);
            //设置子流程个数
            List<String> list = new ArrayList<>();
            list.add("张三");
            list.add("李四");
            list.add("王五");
            variables.put("SubprocessUserList", list);
            //设置checkUsers复核人员
            variables.put("checkUsers", "复核人员");
            //设置troopsUsers整编人员
            variables.put("troopsUsers", "整编人员");
            //设置documentationUsers归档人员
            variables.put("documentationUsers", "归档人员");
            log.info("流程参数设置完毕,开始启动流程!!!");
            //启动流程
            this.runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
            return ResultObj.START_PROCESS_SUCCESS;

        } catch (Exception e) {
            e.printStackTrace();
            log.info("流程启动失败", e);
            this.runtimeService.deleteProcessInstance(processDefinitionKey, businessKey);
            return ResultObj.START_PROCESS_ERROR;
        }


    }

首先,我设置了子流程的集合是一个List,我设置了张三、李四、王五。

variables.put("SubprocessUserList", list);  流程参数通常都是使用Map进行传递。我put的Key就是上面配置的《集合(多实例)SubprocessUserList》。

也在流程启动的时候设置了

variables.put("checkUsers", "复核人员");       
//设置不需要审核,流程启动自动进入子流程
variables.put("ExamineGateway", -1);

最后把流程变量Map放入,启动流程。

流程任务完成:

当我们启动流程后,会生成3条签收任务,我们看数据库:

生成了3条任务,处理人分别是张三、李四、王五。

然后加速跳到,3个人全部处理完毕后,再看数据库表:

会自动有三条反馈任务、因为我们前面反馈节点代理设置的变量和签收节点一致。然后我们全部处理完毕。

现在复核人员会分别收到三条反馈后的复核任务。由于我们设置的《完成条件》是${nrOfCompletedInstances/nrOfInstances==1},意味着需要复核人员全部通过复核,子流程才能结束。

全部复核后,就走到了整编节点。这样的话,我们整个并行子流程就结束了。

总结:

并行子流程和普通的子流程还是有一些差异的,并行子流程和并行节点、并行网关都差不多,都依赖于传入一个Collection集合。还需要根据自己业务场景设置完成条件,整体而言配置流程的时候需要细心。

最后也很希望和大家在网络上交流知识!!!!

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值