Flowable触发同一流程图中,由消息启动的事件子流程

项目需求:

业务场景中,需要在主流程的某个节点,启动一个消息启动的事件子流程,要求主流程触发子流程后,主流程不等子流程完成,直接继续流转。

实现思路:

由于要异步启动子流程,所以需要引入一个中间无抛出事件,在中间无抛出事件中写监听器,触发事件子流程启动。

在这里插入图片描述

代码实现

按照常规思路,message启动的流程需要使用以下代码触发:

runtimeService.startProcessInstanceByMessage("messageName", variables);

以上代码无法启动事件子流程,会报错,提示找不到Message。

触发当前流程的事件子流程,需要先找到当前实例中的message,再接收消息,所以代码实现如下:

public void sendMessage(String messageName, DelegateExecution delegateExecution){
      Execution execution = runtimeService.createExecutionQuery().processInstanceId(delegateExecution.getProcessInstanceId()).messageEventSubscriptionName(messageName).singleResult();
      Map<String, Object> variables = delegateExecution.getVariables();
      runtimeService.messageEventReceived(messageName, execution.getId(), variables);
}

故,完整实现流程如下:
1、左侧(主流程)的中间无抛出事件中写监听器,监听器表达式:

${triggerProcessListener.sendMessage("message1", execution)}

其中message1需在主流程上提前定义,点击流程画布空白处,在下方消息定义中设置好即可。

2、triggerProcessListener的写法如下:

import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.runtime.Execution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class TriggerProcessListener {
    @Autowired
    private RuntimeService runtimeService;

    public void sendMessage(String messageName, DelegateExecution delegateExecution){
        Execution execution = runtimeService.createExecutionQuery().processInstanceId(delegateExecution.getProcessInstanceId()).messageEventSubscriptionName(messageName).singleResult();
        Map<String, Object> variables = delegateExecution.getVariables();
        runtimeService.messageEventReceived(messageName, execution.getId(), variables);
    }
}

3、右侧Message启动事件,设置消息引用为message1。

如上设置,即可在流程经过左侧中间无抛出事件时,触发启动右侧事件子流程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值