app开发者平台在数字化时代的重要性与发展趋势解析
6940
2022-09-10
【第十八篇】Flowable之多人会签
一、多人会签
1.流程图绘制
多人会签是指一个任务需要多个人来处理,案例讲解
完整的xml内容
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
同时控制也有对应的输出,触发了Task的创建事件
3.3 会签处理任务
启动流程后我们发下在Task中产生了3条任务,我们先通过TaskService来完成其中一个任务,设置一个标志flag为false,来控制会签还没有结束,同时Task中另外两个任务还在
@Test void completeTask1(){ Map
当任务执行完成时会同步触发会签完成表达式中对象方法。有如下的输出
然后当我们在完成一个任务,这时设置flag为true,会发现在这个多人处理中,最多3个人处理在第二个人处理后就结束了
@Test void completeTask1(){ Map
同时来看看表结构中的记录,发现没有了
搞定~
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~