乐趣区

关于workflow:Flowable-中-ReceiveTask-怎么玩

在之前的案例中,松哥和大家举例最多的 Task 次要是 UserTask 和 ServiceTask,ReceiveTask 尽管也和大家提过然而没有认真讲过,明天咱们就来捋一捋 ReceiveTask 在 Flowable 中到底怎么玩。

1. 应用场景

接受任务(Receive Task),接触过 Flowable 的小伙伴应该是见过或者据说过,它的图标如下图:

ReceiveTask 能够算是 Flowable 中最简略的一种工作,当该工作达到的时候,它不做任何逻辑,而是被动地期待用户 Trigger。

ReceiveTask 往往实用于一些不明确的阻塞,例如:一个简单的计算须要期待很多条件,这些条件是须要人为来判断是否能够执行,而不是间接执行,这个时候,工作人员如果判断能够持续了,那么就 Trigger 一下使流程持续向下执行。

基于以上介绍,ReceiveTask 还有一个中文名字叫做期待工作,也就是说,流程走到 ReceiveTask 这个节点的时候,就卡住了,须要用户手动点一下,流程才会持续向下走。

2. 实际

2.1 绘制流程图

咱们绘制一个简略的流程图来看下 ReceiveTask 到底是啥样子,流程图如下:

ReceiveTask 图标上有一个信封。

小伙伴们绘制的时候,首先抉择用户工作:

而后点击设置按钮,将用户工作切换为 ReceiveTask 即可:

绘制实现后,咱们下载这个流程图对应的 XML 文件。

来看看,带 ReceiveTask 的流程图是上面这样的:

<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.2 部署

这个松哥在之前的文章中曾经重复介绍过屡次了,这里就不再赘述了,大家参考咱们之前的文章部署并启动下面这个流程。

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 表也空了。

好啦,这就是 ReceiveTask 的玩法,没啥难度,下篇文章持续~

退出移动版