跳到主要内容

流程监听开发使用


前言

流程图片1.png

当我们如上图绘制好流程图之后,保存后就可以部署流程,完成一个简单的流程图,但是如果我们要在对应的的流程环节添加特殊的处理数据及效果,在现有的功能就无法到,这时候我们就需要流程监听来实现这一效果了。

对应代码

当我们要在流程中添加代码话首先要在对应的流程位置添加对应的监听代码

流程图片2.png

流程图片3.png 如上图所示就是我们添加的流程对应的任务监听和执行监听

监听对应的代码我们一般存放在/misboot-workflow/src/main/java/com/misboot/workflow/listener的目录下面。

流程使用监听的位置

在流程代码添加到对应的位置我们就可以在流程设计界面设计将对应的流程监听添加进去

流程图片4.png

如上图所示我选找到对应的监听位置点击进入设计界面添加监听依次执行下面图片的步骤

流程图片5.png

流程图片6.png

上图是几种对应的流程监听执行的时机 一般我选择第一条(在流程进入该环节执行该监听) 其他选项根据具体的想要的效果取执行

流程图片7.png

对应的流程监听路径见下图

流程图片8.png

监听添加完成关闭设计界面 进入主界面 及完成监听的添加

流程图片9.png

warning

添加监听是要注意对应的任务监听界面只能添加任务监听,而执行监听也一样不然正常调用监听步骤会出现流程报错。 对应的流程环节可以添加多个监听这些不会互相影响监听之间互补干扰。

传值说明

当流程监听设置完成之后我们也可以在流程界面传值到代码里面这样不同的值表面不同同一个监听设置在不同的流程及环节步骤。

流程图片10.png

上图我们回到流程设计页面找到一条对应的流程监听来设置对应传值

流程图片11.png

流程图片12.png

流程图片13.png

warning

监听设置的传值与代码中添加的值要一致,代码设置几个值,对应的监听就要设置对应个数的值,不然会报错,一般都是每个流程监听值设置一个值,以防止漏写出现错误流程报错的情况。

代码说明

最后就是对于流程监听代码的中常用的代码进行解释及说明

public class LiuchenTaskListener implements TaskListener {
//流程监听器中的线条状态
private Expression nValue; //用于流程设计界面传值可以写多个也可以不写

@Override
public void notify(DelegateTask delegateTask) {
String nStateValue = nValue.getExpressionText(); //代码中解析设计界面传过来的值

//得到servletAPI 以下5行代码为流程监听常用的代码 是获取监听中对应的流程的详细信息
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();//获取启动人
String uuid = pi.getBusinessKey(); //获取对应的业务uuid
String taskName = delegateTask.getName();//获取对应的节点名
// List<String> list = new ArrayList<String>();
// 下面是监听代码填写你想要的业务及效果
switch (taskName) {
case "发起人":

break;
case "审核人":

break;
case "批准人":

break;
}
// delegateTask.addCandidateUsers(list);//设置下一处理人
}
}
public class LiuchenExecutionListener implements ExecutionListener {
//流程监听器中的线条状态
private Expression nValue; //用于流程设计界面传值可以写多个也可以不写

@Override
@Transactional
public void notify(DelegateExecution delegateExecution) {
String nStateValue = nValue.getExpressionText();//代码中解析设计界面传过来的值
//得到servletAPI 以下4行代码为流程监听常用的代码 是获取监听中对应的流程的详细信息
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(requestAttributes.getRequest().getServletContext());
String uuid=delegateExecution.getProcessInstanceBusinessKey(); //获取对应的业务uuid
MyVariableService myVariableService = ctx.getBean(MyVariableService.class);

// 下面是监听代码填写你想要的业务及效果
if ("state.1".equals(nStateValue)){

}else if ("state.2".equals(nStateValue)){

}else if ("state.3".equals(nStateValue)){

}else if ("state.4".equals(nStateValue)){

}

}
}