一、创建流程模型
制作如下流程
给审批用户1一个值表达式。
二、给用户审批2添加监听器
创建一个监听器类
package org.example.flowabledemo2.listener;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
/**
* 自定义flowable监听器
*/
public class MyListener01 implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("MyListener01--------notify-----------执行了" + delegateTask.getEventName());
if (EVENTNAME_CREATE.equals(delegateTask.getEventName())) {
// 用户节点创建,指派审批人
delegateTask.setAssignee("youwangzi");
}
}
}
点击用户审批2,添加任务监听器
将编写好的监听器类添加进去。
三、部署流程定义
保存并导出该流程图,复制到项目中。
部署流程定义。
@Test
void contextLoads() {
DeploymentBuilder deployment = repositoryService.createDeployment();
deployment.addClasspathResource("process01/Example02.bpmn20.xml");
deployment.name("监听器流程图");
Deployment deploy = deployment.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
}
查看结果。
四、启动监听器流程任务
/**
* 发起流程
*/
@Test
public void startProcess() {
String id = "Example02:1:7486526c-2a43-11ef-a3d5-644ed7087863";
// 在启动流程实例时就可以绑定表达式的值
Map<String, Object> variables = new HashMap<>();
variables.put("myAssgin2", "zhangsan");
// 根据流程定义ID启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(id, variables);
}
查看当前任务
使用zhangsan进行审批
/**
* 根据用户查询待办信息
*/
@Test
public void findFlow() {
List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").list();
// 根据id进行审批
for (Task task : list) {
completeTask(task.getId());
}
}
/**
* 根据Id审批任务
*/
public void completeTask(String taskId) {
taskService.complete(taskId);
}
查看控制台,当创建用户审批2时触发了监听器。
查看任务表中,监听器给审批用户2节点分配了审批人。
使用youwangzi账户通过审批,任务结束。