【flowable】十三、flowable会签
flowable会签会签的意思是,在流程任务管理中,任务通常是由一个人或者多个人同时去处理的,这种任务叫做会签任务。类似于并行网关。按数量通过:达到一定数量的处理后,会签通过按比例通过:达到一定比例的处理后,会签通过一票否决:只有一个人不同意时,会签通过一票通过:只有一个同意时,会签通过Flowable实现会签是基于多实例任务的,将节点设置成多实例,通过在userTask节点的属性配置。可以选择、
flowable会签
1、会签
会签的意思是,在流程任务管理中,任务通常是由一个人或者多个人同时去处理的,这种任务叫做会签任务。类似于并行网关。
2、会签类型
按数量通过:达到一定数量的处理后,会签通过
按比例通过:达到一定比例的处理后,会签通过
一票否决:只有一个人不同意时,会签通过
一票通过:只有一个同意时,会签通过
Flowable实现会签是基于多实例任务的,将节点设置成多实例,通过在userTask节点的属性配置。
3、多实例类型
可以选择并行会签(parallel)
、顺序会签(sequential)
,其中并行会签的意思是 多个人同时执行任务。顺序会签是按顺序执行任务。
4、集合多实例
会签人员的集合变量,可以随意命名。
5、元素变量多实例
循环集合多实例集合的变量名,可以随意命名。注意没有${}
// 类似于这样的
for (String assignee : userList) {
}
6、分配用户
分配用户的变量名称和元素变量的名称需要保持一致
7、完成条件多实例
默认流程变量:
nrOfInstances:会签中总共的实例数量
nrOfCompletedInstances:已经完成的实例数量
nrOfActiviteInstances:当前活动的实例数量,即还未完成的实例数量
所以该项可设置,例如:
${nrOfInstances == nrOfCompletedInstances}:表示所有人都需要完成任务会签才结束
${nrOfCompletedInstances == 1}:表示一个人完成任务,会签结束
其他条件可以一次类推实现
8、demo
这里设置的完成条件:${nrOfCompletedInstances == 2}
,即2个人完成任务后,会签结束。
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
<process id="会签" name="会签" isExecutable="true">
<startEvent id="sid-5D778986-A0DE-4D4E-9B67-BEF2C4366998" flowable:formFieldValidation="true"></startEvent>
<userTask id="sid-CA82212E-61D4-488D-BC8B-05D92CD1EE67" flowable:assignee="${assignee}" flowable:formFieldValidation="true">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
<multiInstanceLoopCharacteristics isSequential="false" flowable:collection="${userList}" flowable:elementVariable="assignee">
<completionCondition>${nrOfCompletedInstances == 2}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<sequenceFlow id="sid-FFB112DA-5E2E-4786-8648-92CD5D07A96F" sourceRef="sid-5D778986-A0DE-4D4E-9B67-BEF2C4366998" targetRef="sid-CA82212E-61D4-488D-BC8B-05D92CD1EE67"></sequenceFlow>
<endEvent id="sid-A14D3EA7-7E7C-4B6F-9F74-898FB7A7A2AD"></endEvent>
<sequenceFlow id="sid-E01B5521-5658-4AD4-8E6A-1790F1DBABCB" sourceRef="sid-CA82212E-61D4-488D-BC8B-05D92CD1EE67" targetRef="sid-A14D3EA7-7E7C-4B6F-9F74-898FB7A7A2AD"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_会签">
<bpmndi:BPMNPlane bpmnElement="会签" id="BPMNPlane_会签">
<bpmndi:BPMNShape bpmnElement="sid-5D778986-A0DE-4D4E-9B67-BEF2C4366998" id="BPMNShape_sid-5D778986-A0DE-4D4E-9B67-BEF2C4366998">
<omgdc:Bounds height="30.0" width="30.0" x="178.00000737607468" y="185.00000149011612"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-CA82212E-61D4-488D-BC8B-05D92CD1EE67" id="BPMNShape_sid-CA82212E-61D4-488D-BC8B-05D92CD1EE67">
<omgdc:Bounds height="80.0" width="100.0" x="315.0" y="160.00000149011612"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-A14D3EA7-7E7C-4B6F-9F74-898FB7A7A2AD" id="BPMNShape_sid-A14D3EA7-7E7C-4B6F-9F74-898FB7A7A2AD">
<omgdc:Bounds height="28.0" width="28.0" x="555.0" y="186.00000149011612"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-E01B5521-5658-4AD4-8E6A-1790F1DBABCB" id="BPMNEdge_sid-E01B5521-5658-4AD4-8E6A-1790F1DBABCB">
<omgdi:waypoint x="414.94999999992945" y="200.00000149011612"></omgdi:waypoint>
<omgdi:waypoint x="555.0" y="200.00000149011612"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-FFB112DA-5E2E-4786-8648-92CD5D07A96F" id="BPMNEdge_sid-FFB112DA-5E2E-4786-8648-92CD5D07A96F">
<omgdi:waypoint x="207.95000675825347" y="200.00000149011612"></omgdi:waypoint>
<omgdi:waypoint x="314.99999999983766" y="200.00000149011612"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
部署并启动流程:
/**
* 部署流程
*/
@Test
public void deployment() {
//获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RepositoryService部署流程
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("会签流程").addClasspathResource("会签.bpmn20.xml").deploy();
System.out.println(deploy.getId());
}
/**
* 启动流程定义
*/
@Test
public void startProcess() {
//获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RuntimeService启动流程
RuntimeService runtimeService = processEngine.getRuntimeService();
//启动流程定义时需要配置集合多实例,会签人员的集合变量userList
Map<String, Object> variables = new HashMap<>();
variables.put("userList", Arrays.asList("张三","李四 ", "王五"));
//参数是act_re_procdef表的主键
runtimeService.startProcessInstanceById("会签:1:102504", variables);
}
成功启动后,act_ru_task
表中,会签的流程会有三条任务,因为userList变量集合只设置了三个人
完成流程:
先完成一条任务
/**
* 完成任务
*/
@Test
public void completeTask() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
//为了方便,直接去库里找到该数据
taskService.complete("105019");
}
完成成功后流程并不会往下一个节点走,任务表里还有两个任务,因为设置的完成条件:${nrOfCompletedInstances == 2}
,需要2个人完成任务后,会签才结束。
再完成一条任务:
/**
* 完成任务
*/
@Test
public void completeTask() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
//为了方便,直接去库里找到该数据
taskService.complete("105024");
}
完成后,再查看act_ru_task
表,已经没有当前任务数据了,因为已经满足会签任务结束的条件,按照流程的设计,流程执行到下一个节点,也就是结束节点。
然后,更多的实例情况,可以自行设置会签任务的完成条件来测试
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)