一、知识点
会签:指同一个审批节点设置多个人,如ABC三人,三人会同时收到审批,需全部同意之后,审批才可到下一审批节点;
或签:指同一个审批节点设置多个人,如ABC三人,三人会同时收到审批,只要其中任意一人审批即可到下一审批节点。
所以不管是会签还是或签它都是多实例节点,而会签又可以分为并行与串行。
三条垂直线表示实例将并行执行,而三条水平线表示顺序【串行】执行。
- nrOfInstances : 实例总数
- nrOfActiveInstances:当前活动的实例的数量。对于串行而言该值始终为1
- nrOfCompletedInstances:已经完成的实例数
- loopCounter 循环计数器
二、实现或签
这样设置完后该节点就是多实例节点了,点击该节点后可以看到需要填写一些参数
Loop Cardinality:循环基数,表示会签的人数。
Collection:集合。会签人数的集合,通常为list,和loop cardinality二选一。
Element Variable:元素变量。选择Collection时必选,为collection集合每次遍历的元素。
Completion Condition:完成条件。比如我们这里设置nrOfCompletedInstances == 1
具体把审批人变量的值设置到节点上还是得靠Assignee,所以注意上图的参数设置。
部署流程定义和启动流程请参考之前的博文,就不赘述了。
public ResultReturn startProcessInstanceByKey(String processDefinitionKey, String businessKey,String initiator) {
try {
Map<String,Object> map = new HashMap<>();
//设置流程发起人
identityService.setAuthenticatedUserId("initiator");
List<String> userList = new ArrayList<>(4);
userList.add("userOne");
userList.add("userTwo");
userList.add("userThree");
map.put("userList",userList);
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey,map);
if (ObjectUtil.isNull(processInstance)) {
return ResultReturnUtil.error(ResponseEnums.PROCESS_INSTANCE_START_FAIL);
} else {
String processInstanceId = processInstance.getProcessInstanceId();
return ResultReturnUtil.success(processInstanceId);
}
}catch (Exception e){
log.error(e.getMessage());
throw new ProcessException(ResponseEnums.PROCESS_INSTANCE_START_FAIL.getMsg());
}
}
然后发起流程
来到Camunda监控平台看一下
我们去模拟审批一次
回到监控平台,可以发现该流程实例已经完成了
三、实现会签
前文也提到会签和或签只是该节点的完成条件不一样。
意思就是当已完成实例数等于实例总数该节点就算完成
${nrOfInstances == nrOfCompletedInstances}