工作流之Camunda开发记录(三)---- 监听器的基本使用

前情纪要

前面我记录了camunda的基本使用
传送门
还有用户任务和服务任务 以及 全局变量的使用
传送门
目前camunda已经可以正常运行,但是不正常的时候我们怎么办,就需要用到监听,需要程序帮我们盯着他看,到底执行到哪了,到哪坏了,方便事后查错(ps:我就是干这个用)还有前端实时显示目前工作流执行情况

监听器简介

监听器顾名思义,就是监听的机器(/手动滑稽),言归正传 这里我用到的监听大概有三种
分别是
start:启动监听 不能加在序列流上面
end:结束监听 不能加在序列流上面
take:执行监听 只能加在序列流上面

设计概要

我前面有提到过 前端给我传他的json结构 我解析成camunda需要的结构,就在这个解析的过程添加监听器
下面我会列出单节点的监听以及部分代码

代码部分

首先我们先看一下xml文件的格式 我列出一个开始节点

   <bpmn:startEvent id="StartEvent_1">
   <-- 这里是监听器开始 -->
      <bpmn:extensionElements>
        <-- 这里是数组 可以加多个监听 -->
        <-- 其中class属性是监听器的实现类、event是监听类型 -->
        <camunda:executionListener class="com.****.workflow.listener.StartEndListener" event="start" />
      </bpmn:extensionElements>
      <-- 到这里监听器部分结束  -->
      <bpmn:outgoing>Flow_17ib737</bpmn:outgoing>
    </bpmn:startEvent>

可以看到一个节点可以添加多个监听器
解释概要上面我已经加了注释 看起来是很简单的 其余的节点大同小异
我们看一下监听器类长什么样

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.DelegateTask;
import org.springframework.stereotype.Component;

@Component
public class StartEndListener extends BaseWorkflowListener{
    @Override
    public void notify(DelegateExecution execution) throws Exception {
        String eventName = execution.getEventName();
        listenerLogic(eventName);
    }

    @Override
    public void notify(DelegateTask delegateTask) {
    }
}


public abstract class BaseWorkflowListener implements IWorkflowListener{
    @Override
    public void notify(DelegateExecution execution) throws Exception {
        String eventName = execution.getEventName();
        listenerLogic(eventName);
    }
    @Override
    public void notify(DelegateTask delegateTask) {
    }
    protected void listenerLogic(String eventName) {
        if("create".equals(eventName)){
            System.out.println("create===========流程启动");
        }else if("assigment".equals(eventName)){
            System.out.println("assigment===========流程部署");
        }else if("complete".equals(eventName)){
            System.out.println("complete===========流程完成");
        }else if("delete".equals(eventName)){
            System.out.println("delete===========流程结束");
        }else if("start".equals(eventName)){
            System.out.println("start===========流程启动");
        }else if("end".equals(eventName)){
            System.out.println("end===========流程结束");
        }else if("take".equals(eventName)) {
            System.out.println("take===========流程执行");
        }
    }
}

/**
 * 监听器
 */
public interface IWorkflowListener extends TaskListener, ExecutionListener {
}

这里需要实现camunda的接口 然后有实现方法 看了我前面的全局变量部分是不是很熟悉这个方法参数
是的他又来了DelegateExecution 这个神奇的东西 又可以操作各种变量 以及取到很多工作流相关的信息
其中最重要的就是取到事件类型 这样我们可以判断到底执行了什么事件,方便进行相关操作

注意事项来了

这里是大字
我使用的过程中,因为xml完全是自己拼出来的json转的,所以节点顺序是自己控制的
我使用过程中发现 <bpmn:outgoing> 必须在监听器后面,其他going同理

到这里基本监听器的使用就OK了

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值