相关定义
会签: 在流程业务管理中,任务是通常都是由一个人去处理的,而多个人同时处理一个任务,这种任务我们称之为会签任务。
串行会签:串行会签也叫顺序会签,指按照提交流程处理人的次序user1、user2、user3依次接收待办任务,并按顺序处理流程。
并行会签:指user1、user2、user3同时接收到流程待办任务,并行处理。
循环基数:会签任务的个数,若设置为3,在执行到会签任务时会出现3个任务。
会签完成条件:达到此条件该会签任务结束。
相关配置
会签任务需要在流程定义配置时设置好的,一下代码是会签任务的基本配置项。
<!--
userTask:该标签标识用户任务
assignee:审批人
id:流程节点唯一编号
name:任务名称
-->
<bpmn2:userTask flowable:assignee="${zhangxiaohei}" id="Activity_1inhrs5" name="会签">
<!--
multiInstanceLoopCharacteristics:该标签标识多实例循环任务,也就是会签任务,会签任务此配置为必须填配置
isSequential:是否串行,控制会签任务是并行执行还是串行执行,默认为 :false
collection:会签任务执行人集合,可以是el表达式通过流程变量传递值
elementVariable:元素变量,主要作用:属性传递
-->
<bpmn2:multiInstanceLoopCharacteristics isSequential="false" flowable:collection="${userList}"
flowable:elementVariable="zhangxiaohei">
<!--
loopCardinality:循环基数,即会签任务的分发个数。可以是el表达式通过流程变量传递值。可选配置,但是和上面的collection属 性两者必须有一个必须使用项。这个属性是number类型并且为必填属性。
-->
<bpmn2:loopCardinality>${userList.size()}</bpmn2:loopCardinality>
<!--
completionCondition:会签完成条件。可选配置,可以是el表达式通过流程变量传递值。若不配置则默认完成条件为:所有会签任务全 部执行完成。这个属性是boolean类型并且为必填属性。
-->
<bpmn2:completionCondition>${nrOfInstances == nrOfCompletedInstances}</bpmn2:completionCondition>
</bpmn2:multiInstanceLoopCharacteristics>
</bpmn2:userTask>
配置项总结
1. 会签任务是一个用户任务
2. 会签任务可以设置并行还是串行
3. 会签任务使用multiInstanceLoopCharacteristics多实例循环维护的,在多实例循环中通过几个属性控制会签任务的运行规则,分别有:
a). isSequential:是否串行,控制会签任务是并行执行还是串行执行,默认为 :false
b). collection:会签任务执行人集合,可以是el表达式通过流程变量传递值
c). <p>
elementVariable:元素变量,主要作用:属性传递。
元素变量一帮和<userTask/>标签的assignee属性匹配,
在解析的过程中会将collection集合中的属性遍历,
在遍历的过程中将集合中的属性依次赋值给elementVariable元素变量,
再通过元素变量传递给<userTask/>的assignee属性,
实现给每一个会签任务设置审批人,整个过程和for循环遍历赋值类似。
</p>
d). <p>
loopCardinality:循环基数,即会签任务的分发个数。可以是el表达式通过流程变量传递值。
这个属性是number类型并且为必填属性,需要注意的是该属性在设置时其大小必须小于等于collection集合大小,
若循环基数等于collection集合大小,在编排任务时候会根据遍历顺序依次从collection集合中获取审批人并设置审批人
若小于collection集合大小,在编排任务时候会根据遍历顺序丢弃掉集合中的部分审批人。
若大于collection集合大小,抛出NoSuchElementException异常,底层使用迭代器Iterator遍历集合属性。
</p>
e). completionCondition:会签完成条件。可选配置,可以是el表达式通过流程变量传递值,但必须为boolean值。若不配置则默认完成条件为:所有会签任务全部执行完成。
部分源码截图
-
loopCardinality标签表达式解析
-
collection使用elementVariable做变量传递,并设置流程变量
-
completionCondition标签表达式解析:要么不配置,配置了就必须为boolean类型值