流程引擎(flowable)之接收任务

  • Post author:
  • Post category:其他


接收任务(ReceiveTask)是bpm2.0规范的一种任务,是一种等待任务,它会等待对应消息的到达。 当流程流转到接收任务,流程状态会保存到数据库中(ACT_RU_EXECUTION表会维护该任务)。

bpm配置

				<bpmn2:receiveTask id="Activity_1pao7ht" name="这是一个接收任务"></bpmn2:receiveTask>

任务运行流程

当执行流进入ReceiveTask时会先执行执行监听器,然后整个执行流进入wait等待状态,而且在act_ru_task中不没有当前正在进行中的任务,当执行流执行trigger()方法时才会触发正在睡眠的ReceiveTask,进入下一个节点。

任务执行代码:

//获取执行管理对象	
RuntimeService runtimeService = configuration.getRuntimeService();
				//通过processInstanceId流程实例id和activityId任务节点id到执行实例表(ACT_RU_EXECUTION)中查询挂起的接收任务
        List<Execution> executions = runtimeService.createExecutionQuery()
                .processInstanceId("5")
                .activityId("Activity_0g2747s")
                .listPage(0, 1);
				// 调用trigger方法唤醒流程并进入到下一个节点
        for (Execution execution : executions) {
            runtimeService.trigger(execution.getId());
        }

总结:

ReceiveTask的执行过程优点类似java中的wait和notify方法,当ReceiveTask任务的【前驱任务】执行完成后会删除act_ru_task中的任务记录并将任务挂起类似于wait,实际开发中当接收到通知时调用runtimeService.trigger唤醒任务并进入【后继任务】。在公司业务中其实也有此任务的使用场景,以银数项目为例:【等待落实方款条件】任务节点,流程引擎服务监听到金融网关通过kafka传输的行内反馈信息,触发trigger方法,设置流程变量,流程正常流转。目前公司使用UserTask任务完成此节点任务显然是不合适的,虽然在功能上可以实现,但我认为专用的场景使用特定的任务有利于日后的功能扩展。



版权声明:本文为H_g_y_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。