flowable 任务多实例

*业务场景:
收集每个员工的绩效考核信息;
收集一次组织活动的信息;
一个合同需要三个经理审批,可以是顺序的也可以是并行的;
一个合同计划审批有30个人审批,只需要其中70%的人审批通过即可。等等 *

1、任务多实例四个内置变量

属性解释
nrOfInstances一共有多少个实例
nrOfCompletedInstances已经完成的实例个数
nrOfActiveInstances未完成的实例个数

这些值可以通过调用 execution.getVariable(x) 方法来检索。

此外,每个创建的执行都将有一个执行局部变量(对其他执行不可见,也不存储在流程实例级别):

loopCounter指示该特定实例的 for-each 循环中的索引。可以使用Flowable elementIndexVariable属性重命名 loopCounter 变量

2、配置多实例

2.1、配置参数
在这里插入图片描述
2.2、配置候选人
在这里插入图片描述
2.3、配置结束条件
在这里插入图片描述

3、启动设置userList

public ReturnVo add(Leave leave, String sessionId) {
        ReturnVo returnVo = new ReturnVo(ReturnCode.FAIL, "添加失败");
        try {
            String leaveId = UUIDGenerator.generate();
            leave.setId(leaveId);
            StartProcessInstanceVo startProcessInstanceVo = new StartProcessInstanceVo();
            startProcessInstanceVo.setBusinessKey(leaveId);
            User user = SecurityUtils.getCurrentUserObject();
            startProcessInstanceVo.setCreator(user.getId());
            startProcessInstanceVo.setCurrentUserCode(user.getId());
            startProcessInstanceVo.setFormName("请假流程");
            startProcessInstanceVo.setSystemSn("flow");
            startProcessInstanceVo.setProcessDefinitionKey("leave");
            Map<String, Object> variables = new HashMap<>();
            variables.put("days", leave.getDays());
            startProcessInstanceVo.setVariables(variables);
            //设置三个人作为多实例的人员
            List<String> userList = new ArrayList<>();
            userList.add("00000005");
            userList.add("00000006");
            variables.put("userList", userList);

            ReturnVo<ProcessInstance> returnStart = flowableProcessInstanceService.startProcessInstanceByKey(startProcessInstanceVo);
            if (returnStart.getCode().equals(ReturnCode.SUCCESS)){
                String processInstanceId = returnStart.getData().getProcessInstanceId();
                leave.setProcessInstanceId(processInstanceId);
                this.LeaveService.insertLeave(leave);
                returnVo = new ReturnVo(ReturnCode.SUCCESS, "添加成功");
            }else {
                returnVo = new ReturnVo(returnStart.getCode(), returnStart.getMsg());
            }
        } catch (Exception e) {
            logger.error("LeaveController-add:", e);
            e.printStackTrace();
        }
        return returnVo;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flowable支持多实例任务,即在流程中可以创建多个相同类型的任务,并分配给不同的执行人或候选人。在Flowable中,多实例任务可以使用多种方式进行分发,例如: 1. 顺序分发:按照指定的顺序将任务分配给不同的执行人或候选人。这种方式适用于需要按照固定顺序逐一执行任务的场景。 2. 并行分发:将任务同时分配给多个执行人或候选人,让他们并行执行任务。这种方式适用于需要同时处理多个任务的场景。 3. 动态分发:根据流程变量或其他条件动态地将任务分配给不同的执行人或候选人。这种方式适用于需要根据流程上下文动态调整任务分配的场景。 在Flowable中,可以使用以下方式配置多实例任务的分发方式: 1. 使用SequentialMultiInstanceBehavior配置顺序分发。 2. 使用ParallelMultiInstanceBehavior配置并行分发。 3. 使用DelegateExpression或者JavaDelegate配置动态分发。 例如,下面是一个使用ParallelMultiInstanceBehavior配置并行分发的示例代码: ```xml <userTask id="parallelTask" name="Parallel Task" activiti:candidateUsers="${users}"> <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${collection}"> <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.6}</completionCondition> <parallelMultiInstanceBehavior /> </multiInstanceLoopCharacteristics> </userTask> ``` 这个示例中,用户任务parallelTask会被分配给activiti:candidateUsers和activiti:collection中指定的多个用户或实体,并使用ParallelMultiInstanceBehavior进行并行分发。同时,使用completionCondition指定了任务完成的条件,即当完成任务的数量达到总任务数的60%时,该任务就会被标记为完成。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值