Flowable|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 的流程图是下面这样的:
接收任务测试流程
2.2 部署
这个松哥在之前的文章中已经反复介绍过多次了,这里就不再赘述了,大家参考我们之前的文章部署并启动上面这个流程。
2.3 分析
当流程启动之后,按照我们前面文章的分析,我们先去数据库中
ACT_RU_TASK
表进行查看,发现该表空空如也。也就是 ReceiveTask 并不会被记录在 ACT_RU_TASK
表中,他们只是单纯的被记录在 ACT_RU_EXECUTION
表中,因为在该表中,我们可以查看 ReceiveTask 的记录。对于 ReceiveTask 的触发方式也很简单,如下:
@Test
void test10() {
List 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 list = runtimeService.createExecutionQuery().activityId("sendMsg").list();
for (Execution execution : list) {
runtimeService.trigger(execution.getId());
}
}
【Flowable|Flowable 中 ReceiveTask 怎么玩()】这个执行完层后,这个流程就结束了。现在我们去查看
ACT_RU_ACTINST
表已经空了,查看 ACT_RU_EXECUTION
表也空了。好啦,这就是 ReceiveTask 的玩法,没啥难度,下篇文章继续~
推荐阅读
- h5中使用javascript在客户端对图片进行压缩和尺寸处理,附ts代码
- 投稿|LNG,全球危机中最赚钱的生意
- 奇妙之旅-GIS|如何在QGIS中将纬度和经度添加为CSV文件
- 奇妙之旅-GIS|GIS 在地质学中的10个重要性
- 技术分享成就现在的我(中间件兴趣圈荣获CSDN2020博客之星亚军)
- 投稿|从十年第一到卖身求生,又要砸下千亿,他可能是中国汽车业最坎坷的老板了
- 新消费|【招募】DTC出海成长俱乐部线下闭门会,招募品牌决策者,呼唤中国品牌全球化同行人丨钛媒体新消费
- GO语言集成开发工具环境(GoLand 2022激活中文)
- 如何使用流程|如何使用流程 中的 DataObject 并为流程设置租户
- 投稿|红蓝药丸的选择:大脑在缸中还是颅中?