当前位置: 首页 > 后端技术 > Java

ReceiveTask在Flowable中是如何工作的?

时间:2023-04-01 16:32:32 Java

在之前的案例中,宋哥和大家引用频率最高的Tasks主要是UserTask和ServiceTask。虽然ReceiveTask已经向您提及,但还没有详细讨论。今天我们就来看看ReceiveTask在Flowable中是如何工作的。1.使用场景接受任务(ReceiveTask)。接触过Flowable的朋友应该都看过或者听说过。它的图标如下:ReceiveTask可以说是Flowable中最简单的任务。任务到来时,不做任何逻辑,只是被动等待用户Trigger。ReceiveTask往往适用于一些模棱两可的阻塞。例如,一个复杂的计算需要等待很多条件。这些条件需要人工判断是否可以执行,而不是直接执行。这时候如果工作人员判断可以继续执行,那么Trigger让流程继续往下执行。基于上面的介绍,ReceiveTask还有一个中文名字叫做waitingtask,也就是说,当进程到达ReceiveTask节点时,卡住了,需要用户手动点击,进程才能继续往下走。2.实践2.1画流程图下面画一个简单的流程图,看看ReceiveTask长什么样。流程图如下:ReceiveTask图标上有一个信封。小伙伴们在作图的时候,先选择用户任务:然后点击设置按钮,将用户任务切换为ReceiveTask:作图完成后,我们下载这个流程图对应的XML文件。看一下,带有ReceiveTask的流程图如下:"flowable:formFieldValidation="true">2.2部署松歌在上一篇文章中已经介绍过多次,这里不再赘述。以上流程请参考我们之前的文章进行部署和启动2.3分析流程启动后,按照我们之前的文章进行分析,首先查看数据库中的ACT_RU_TASK表,发现该表为空。即ReceiveTask不会记录在ACT_RU_TASK表中,它们只是记录在ACT_RU_EXECUTION表中,因为在这个表中,我们可以查看到ReceiveTask的记录。ReceiveTask的触发方法也很简单,如下:@Testvoidtest10(){Listlist=runtimeService.createExecutionQuery().activityId("todaySales").list();for(Executionexecution:list){runtimeService.触发(执行。getId());}}因为ReceiveTask的触发需要传入执行实例ID而不是流程实例ID,所以我们需要查询当前要触发的执行实例ID。具体查询方式是根据ReceiveTask的节点名查询。查询到执行实例ID后,调用trigger方法完成触发,让流程继续往下走。好了,现在流程进入了将今天的销售结果发送给老板的环节。老方法继续查询执行:@Testvoidtest10(){Listlist=runtimeService.createExecutionQuery().activityId("sendMsg").list();for(Executionexecution:list){runtimeService.trigger(execution.getId());}}这一层执行完毕,流程结束。现在我们去查看ACT_RU_ACTINST表是否为空,并查看ACT_RU_EXECUTION表是否也为空。好了,ReceiveTask就是这样玩的,不难,下篇继续~