跳到主要内容

流程添加监听事件


添加说明

像前面我们绘制的完流程后流程能正常走下去,当是如果我们的流程走到某个节点时要执行其他业务时我们改怎么处理,这时候我们就会用到流程的监听事件了

代码所需

调用监听时我们需要添加监听的代码 首先找到流程workflow的listener文件目录

添加量监听文件

1. 任务监听代码展示

package cn.ewsd.workflow.listener;

import cn.ewsd.workflow.service.MyVariableService;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;

import java.util.ArrayList;
import java.util.List;


//第一:任务监听有三种事件类型 sysUser.group(uuid)
//1. create :在任务创建且所有任务属性设置完成之后才触发。
//2.assignment :在任务被分配给某个班里人之后触发,它是在create事件触发前被触发。
//3.complete:在配置了监听器的上一个任务完成是触发,也就是说运行期任务删除之前触发。
//第二:任务监听器的三种监听器执行类型
//1.class:需要类的全路径
//2.expression:定义一个表达式,类似EL的语法
//delegateExpression:指的是一个实现监听接口
public class WorkflowCaseTaskListener implements TaskListener {

//流程监听器中的线条状态
private Expression state;

@Override
public void notify(DelegateTask delegateTask) {

//得到servletAPI
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(requestAttributes.getRequest().getServletContext());

RuntimeService runtimeService = ctx.getBean(RuntimeService.class);
MyVariableService myVariableService = ctx.getBean(MyVariableService.class);
ProcessInstance pi = runtimeService.createProcessInstanceQuery().
processInstanceId(delegateTask.getProcessInstanceId()).singleResult();
//获取启动人
String startUserId = pi.getStartUserId();
//获取数据的uuid
String uuid = pi.getBusinessKey();

// 设置各个节点处理人
String taskName = delegateTask.getName();
List<String> list = null;
switch (taskName) {
case "申请人":
// list = myVariableService.getUserNameIdByPostAndGwmingcheng("科室负责人", "项目管理办公室主任", bm);
break;
case "审核人":
// list = myVariableService.getLeaferIdByUserNameId(startUserId);
break;
}

if (null == list || 0 == list.size()) {
list = new ArrayList<>();
//防止查询不到任务处理人直接设置为自己
list.add(startUserId);
}
list.add("ewsd0001");

//设置下一处理人
delegateTask.addCandidateUsers(list);
}

}

2. 执行监听代码展示

package cn.ewsd.workflow.listener;

import cn.ewsd.workflow.service.MyVariableService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class WorkflowCaseExecutionListener implements ExecutionListener {

/流程监听器中的线条状态
private Expression state;

@Override
@Transactional
public void notify(DelegateExecution delegateExecution) {
//得到servletAPI
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(requestAttributes.getRequest().getServletContext());
String uuid=delegateExecution.getProcessInstanceBusinessKey();
MyVariableService myVariableService = ctx.getBean(MyVariableService.class);
// myVariableService.updateWorkflowCaseStaus(uuid,"已完成");
}
}

界面操作

我们找到用户事件 用户事件一般可以添加俩中类型监听执行监听和任务监听

然后我们找到结束事件和条件事件 它们只能添加 执行监听

1. 任务监听添加

选择一个用户事件点击任务监听的编辑按钮

点击新增

点击‘确定’

Java类名添加 代码中的包名加监听文件的类名

添加参数就是要执行监听是要传入的参数

点击‘配置参数’

点击‘新增’

类型未表达式

名称与代码中定义的要一致不然找不到

完成后点击保存

依次点击确定 这样我就完成添加任务监听监听事件

2. 执行监听添加

执行监听和任务监听基本一样

点击结束事件 编辑添加监听

Java类名添加 代码中的包名加监听文件的类名

添加参数就是要执行监听是要传入的参数

点击‘配置参数’

点击‘新增’

类型未表达式

名称与代码中定义的要一致不然找不到

完成后点击保存

依次点击确定 这样我就完成添加执行监听监听事件