【第十八篇】Flowable之多人会签

网友投稿 6812 2022-09-10

【第十八篇】Flowable之多人会签

【第十八篇】Flowable之多人会签

一、多人会签

1.流程图绘制

多人会签是指一个任务需要多个人来处理,案例讲解

完整的xml内容

3 ${mulitiInstanceCompleteTask.completeTask(execution)}

2. 流程说明

1.在用户任务节点绑定了一个-,监听​​create​​​行为,该-我们是通过UEL表达式来实现的,​​mulitiInstanceTaskListener​​是我们注入到Spring容器中的对象

对应的监听的代码如下:

@Component("mulitiInstanceTaskListener")public class MulitiInstanceTaskListener implements Serializable { public void completeListener(DelegateExecution execution){ System.out.println("任务:"+execution.getId()); System.out.println("persons:" + execution.getVariable("persons")); System.out.println("person" + execution.getVariable("person")); }}

2.在Multi instance中的配置

Loop cardinality:设置为3表示只循环3次,也就是三个人会签Collection:表示要循环的集合,我们给的是persons,后面需要在流程变量中赋值Element variable:表示循环的变量Completion condition:表示任务结束的条件,也就是多人会签的结束条件,在此处我们用的是UEL表达式,​​mulitiInstanceCompleteTask​​表示的是我们注入到Spring容器中的对象

​​mulitiInstanceCompleteTask​​对象的完整代码为:

@Component("mulitiInstanceCompleteTask")public class MulitiInstanceCompleteTask implements Serializable { /** * 完成任务是需要触发的方法 * @param execution * @return * false 表示会签任务还没有结束 * true 表示会签任务结束了 */ public boolean completeTask(DelegateExecution execution) { System.out.println("总的会签任务数量:" + execution.getVariable("nrOfInstances") + "当前获取的会签任务数量:" + execution.getVariable("nrOfActiveInstances") + " - " + "已经完成的会签任务数量:" + execution.getVariable("nrOfCompletedInstances")); //有一个人同意就通过 Boolean flag = (Boolean) execution.getVariable("flag"); System.out.println("当前意见:"+flag); return flag; }}

上面的三个变量是Flowable中自带的可用变量

nrOfInstances:该会签环节中总共有多少个实例nrOfActiveInstances:当前活动的实例的数量,即还没有完成的实例数量。nrOfCompletedInstances:已经完成的实例的数量

3.案例演示

3.1 部署流程

/** * Deploy */ @Test void testDeploy() throws Exception { Deployment deploy = repositoryService.createDeployment() .addClasspathResource("会签案例.bpmn20.xml") .name("会签案例") .deploy(); System.out.println("deploy.getId() = " + deploy.getId()); System.out.println("deploy.getName() = " + deploy.getName()); System.out.println("部署开始的时间:" + new Date()); //TimeUnit.MINUTES.sleep(3); }

3.2 启动流程

在启动流程实例的时候,我们需要设置相关的参数,在流程定义的时候设置的persons在此处我们就需要设置了,设置为Arrays.asList(“张三”,“李四”,“王五”,“赵六”),这里设置了4个元素,在流程定义里定义了3个,表示只会循环3次,启动流程后,在Task中可以看到只有3个任务

@Test void startFlow() throws Exception{ Map map = new HashMap<>(); // 设置多人会签的数据 map.put("persons", Arrays.asList("张三","李四","王五","赵六")); ProcessInstance processInstance = runtimeService .startProcessInstanceById("myProcess:1:ba1518fc-b22d-11ec-9313-c03c59ad2248",map); }

同时控制也有对应的输出,触发了Task的创建事件

3.3 会签处理任务

启动流程后我们发下在Task中产生了3条任务,我们先通过TaskService来完成其中一个任务,设置一个标志flag为false,来控制会签还没有结束,同时Task中另外两个任务还在

@Test void completeTask1(){ Map map = new HashMap<>(); map.put("flag",false); taskService.complete("71337501-b22e-11ec-a534-c03c59ad2248",map); System.out.println("complete ...."); }

当任务执行完成时会同步触发会签完成表达式中对象方法。有如下的输出

然后当我们在完成一个任务,这时设置flag为true,会发现在这个多人处理中,最多3个人处理在第二个人处理后就结束了

@Test void completeTask1(){ Map map = new HashMap<>(); map.put("flag",true); // 设置为true 结束多人会签 taskService.complete("713570d4-b22e-11ec-a534-c03c59ad2248",map); System.out.println("complete ...."); }

同时来看看表结构中的记录,发现没有了

搞定~

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python获取指定文件夹下的文件和文件夹(python获取一个文件夹下的所有文件)
下一篇:DOS命令详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~