一.简介
ReceiveTask(接受任务),它的图标如下图所示:
ReceiveTask 可以算是 Flowable 中最简单的一种任务,当该任务到达的时候,它不做任何逻辑,而是被动地等待用户确认。
ReceiveTask 往往适用于一些不明确的阻塞,例如:一个复杂的计算需要等待很多条件,这些条件是需要人为来判断是否可以执行,而不是直接执行,这个时候,工作人员如果判断可以继续了,那么就 确认一下使流程继续向下执行。
基于以上介绍,ReceiveTask 还有一个中文名字叫做等待任务,也就是说,流程走到 ReceiveTask 这个节点的时候,就卡住了,需要用户手动点一下,流程才会继续向下走。
二.实战
1.绘制流程图
ReceiveTask 简单的流程图如下:
ReceiveTask 图标上有一个信封,我们在绘制的时候,首先选择用户任务,截图如下:
然后点击设置按钮,将用户任务切换为 ReceiveTask 即可,截图如下:
绘制完成后,载这个流程图对应的 XML 文件。这个XML文件的内容如下:
<process id="receiveTask_demo" name="接收任务测试流程" isExecutable="true">
<documentation>接收任务测试流程</documentation>
<startEvent id="startEvent" flowable:formFieldValidation="true"></startEvent>
<sequenceFlow id="sid-9E7B327E-EFC8-4D29-8C6F-157D5E1B7A4E" sourceRef="startEvent" targetRef="todaySales"></sequenceFlow>
<receiveTask id="todaySales" name="统计今日销售额"></receiveTask>
<receiveTask id="sendMsg" name="发送今日销售业绩给老板"></receiveTask>
<endEvent id="endEvent"></endEvent>
<sequenceFlow id="s2" sourceRef="todaySales" targetRef="sendMsg"></sequenceFlow>
<sequenceFlow id="s3" sourceRef="sendMsg" targetRef="endEvent"></sequenceFlow>
</process>
2.部署
参考之前的文章部署并启动上面这个流程就可以了。
3.流程分析
当流程启动之后,我们先去数据库中 ACT_RU_TASK 表进行查看,发现该表是空的。也就是说 ReceiveTask 并不会被记录在 ACT_RU_TASK 表中,它被记录在 ACT_RU_EXECUTION 表中,因此在该表中,我们可以查看 ReceiveTask 的记录。
对于 ReceiveTask 的触发方式也很简单,代码如下:
@Test
void test10() {
List<Execution> list = runtimeService.createExecutionQuery().activityId("todaySales").list();
for (Execution execution : list) {
runtimeService.trigger(execution.getId());
}
}
由于 ReceiveTask 的触发需要传入的参数是执行实例 ID 而不是流程实例 ID,所以我们要查询出来当前待触发的执行实例 ID。具体的查询方式就是根据 ReceiveTask 的节点名称去查询。
查询到执行实例 ID 之后,调用 trigger 方法完成触发,使得流程继续向下走。
现在流程进入到发送今日销售业绩给老板这个环节了,继续查询并执行,代码如下:
@Test
void test10() {
List<Execution> list = runtimeService.createExecutionQuery().activityId("sendMsg").list();
for (Execution execution : list) {
runtimeService.trigger(execution.getId());
}
}
这个执行完层后,这个流程就结束了。现在我们去查看 ACT_RU_ACTINST 表已经空了,查看 ACT_RU_EXECUTION 表也空了。
《肖申克的救赎》
生命可以归结为一种简单的选择:要么忙于生存,要么赶着去死。
懦怯囚禁人的灵魂,希望可以感受自由。强者自救,圣者渡人。
希望是件美丽的东西,也许是最好的东西。美好的东西是永远不会死的。
每个人都是自己的上帝。如果你自己都放弃自己了,还有谁会救你?
《熔炉》
我们一路奋战,不是为了能改变世界,而是为了不让世界改变我们。
现实如水母,看似美好无害实质总是致命伤人。
我们来到世界上,都是孤独的旅行,即使身边有人相伴,最终也会各奔东西!
世界上最美丽最珍贵的,反而是听不见且看不清的,只有用心才能感受得到。
《教父》
人可以不断犯错,但绝不能犯要命的错。
不要憎恨你的敌人,那会影响你的判断力。
人并非生来就伟大,而是越活越伟大。
《活着》
人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。
以笑的方式哭,在死亡的伴随下活着。
没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切。
你的命是爹娘给的,你不要命了也得先去问问他们。
《我不是药神》
世界上只有一种病,穷病,这种病你没法治,你也治不过来。
人间最高贵的是善良,是对生命的致敬。
《指环王》
把手握紧,里面什么也没有;把手放开,你得到的是一切。
我宁愿和你共度凡人短暂的一生,也不愿一个人看尽这世界的沧海桑田。
20.幸福的家庭都是相似的,不幸的家庭各有各的不幸。
或许有一天,人类变得萎缩懦弱,舍弃朋友,断绝友谊,但今天决不会这样。
《饮食男女》
22.人生不能像做菜,把所有的材料都准备好了才下锅。
什么叫做“可惜”啊,要心中有个“惜”字儿,才知道可惜。
其实一家人,住在一个屋檐下,照样可以各过各的日子,可是从心里产生的那种顾忌,才是一个家之所以为家的意义。
《让子弹飞》
世界上本没有路,有了腿便有了路。
如果你活着,早晚都会死;如果你死了,你就永远活着。
赚钱嘛,不寒碜