会签

  • java代码生成用户任务

UserTask userTask = new UserTask();
// 流程名称
userTask.setName("会签任务");
userTask.setId(IdGenerator.createId());
//使用变量名assignee从变量中获取办理人
userTask.setAssignee("${assignee}");

//设置候选审批人:提供给执行监听器MultiInstanceExecutionListener使用
userTask.setCandidateUsers(candidateUserList);

//设置执行监听器
List<FlowableListener> executionListeners=new ArrayList<>();
FlowableListener flowableListener=new FlowableListener();
//事件:start/end/
flowableListener.setEvent("start");
//类型:delegateExpression(表达式)/class(java类)
flowableListener.setImplementationType("class");
//设置表达式或java类路径
flowableListener.setImplementation("MultiInstanceExecutionListener");
executionListeners.add(flowableListener);
userTask.setExecutionListeners(executionListeners);

//会签规则设置
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// 设置并行执行(每个审批人可以同时执行)
multiInstanceLoopCharacteristics.setSequential(false);
// 设置完成条件
// nrOfInstances--实例总数、 nrOfActiveInstances--还没有完成的数量   nrOfCompletedInstances--完成审批的数量
multiInstanceLoopCharacteristics.setCompletionCondition("${nrOfCompletedInstances/nrOfInstances >= 0.5}");
//直接指定一个数字
//multiInstanceLoopCharacteristics.setLoopCardinality("5");
//审批人集合参数:使用变量assigneeList查找办理人列表
multiInstanceLoopCharacteristics.setInputDataItem("assigneeList");
//迭代办理人列表时,以assignee为名保存到流程变量中
multiInstanceLoopCharacteristics.setElementVariable("assignee");

//设置多实例属性/会签
userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);

生成的XML如下:

<userTask id="xxx" name="会签" flowable:assignee="${assignee}">
  <extensionElements>
	<flowable:executionListener event="start" class="MultiInstanceExecutionListener"></flowable:executionListener>
  </extensionElements>
  <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="assigneeList" flowable:elementVariable="assignee">
	<completionCondition>${nrOfCompletedInstances/nrOfInstances &gt;= 0.5}</completionCondition>
  </multiInstanceLoopCharacteristics>
</userTask>

执行监听器指定会签人员:把候选人以assigneeList为名放到本地变量中

public class MultiInstanceExecutionListener implements ExecutionListener {
    @Override
    public void notify(DelegateExecution delegateTask) {
        //获取监听的对象
        FlowElement currentFlowElement = delegateTask.getCurrentFlowElement();
        if(currentFlowElement instanceof UserTask){
            //用户任务
            UserTask userTask = (UserTask) currentFlowElement;
            //获取任务的候选办理人
            List<String> candidateUsers = userTask.getCandidateUsers();
            //候选办理人设为本地变量(节点所有)
            delegateTask.setVariableLocal("assigneeList", candidateUsers);
        }
    }
}

参考文档:https://flowable.com/open-source/docs/bpmn/ch07b-BPMN-Constructs/#multi-instance-for-each

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值