Flowable ReceiveTask使用场景分析

 更新时间:2022年10月12日 20:22  点击:294 作者:江南一点雨

1. 使用场景

在之前的案例中,松哥和大家举例最多的 Task 主要是 UserTask 和 ServiceTask,ReceiveTask 虽然也和大家提过但是没有仔细讲过,今天我们就来捋一捋 ReceiveTask 在 Flowable 中到底怎么玩。

接受任务(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 表也空了。

以上就是Flowable ReceiveTask使用场景分析的详细内容,更多关于Flowable ReceiveTask使用场景的资料请关注猪先飞其它相关文章!

原文出处:https://juejin.cn/post/7152404602132889631

[!--infotagslink--]

相关文章

  • 算法之排序算法的算法思想和使用场景总结

    这篇文章主要介绍了算法之排序算法的算法思想和使用场景总结,本文讲解了插入排序、交换排序、选择排序等几大类排序算法的特点、思想和使用场景,需要的朋友可以参考下...2020-04-25
  • swift中defer几个简单的使用场景详解

    在Swift 2.0中,Apple提供了defer关键字,让我们可以实现同样的效果,这篇文章主要介绍了关于swift中defer几个简单的使用场景的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用defer具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧。...2020-06-30
  • Redis中5种数据结构的使用场景介绍

    这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String、Hash、List、Set、Sorted Set做了讲解,需要的朋友可以参考下...2021-01-15
  • springboot2.5.2与 flowable6.6.0整合流程引擎应用分析

    这篇文章主要介绍了springboot2.5.2与 flowable6.6.0整合流程引擎应用分析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-07-28
  • Python多进程与多线程的使用场景详解

    这篇文章主要给大家介绍了关于Python多进程与多线程使用场景的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-05
  • JS前端中的设计模式和使用场景示例详解

    这篇文章主要为大家介绍了JS前端中的设计模式和使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-08-10
  • Flowable ReceiveTask使用场景分析

    这篇文章主要为大家介绍了Flowable ReceiveTask使用场景分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-10-12
  • Flowable 设置任务处理人的四种方式详解

    这篇文章主要为大家介绍了Flowable 设置任务处理人的四种方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-10-12