ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
使用监听器的方式来指定负责人,那么在流程设计时就不需要指定assignee。 任务监听器是发生对应的任务相关事件时执行自定义 java 逻辑或表达式。 <br/> 使用监听器分配负责人的步骤如下: **1. 指定监听器属性** :-: ![](https://img.kancloud.cn/58/db/58dbf83d53243532bc0884038d25e274_410x161.png) ![](https://img.kancloud.cn/ef/bc/efbc4e9e391e2ab24a116ada37f87bbb_1195x135.png) `evection-listener.bpmn` ```java // Event可选值: public interface BaseTaskListener extends Serializable { String EVENTNAME_CREATE = "create"; // 任务创建后触发 String EVENTNAME_ASSIGNMENT = "assignment"; // 任务分配后触发 String EVENTNAME_COMPLETE = "complete"; // 任务完成后触发 String EVENTNAME_DELETE = "delete"; // 任务删除后触发 String EVENTNAME_ALL_EVENTS = "all"; // 所有事件发生都触发 } Type可选值: Class Expression Delegate Expression ``` 我就不用上面的图形化操作了,直接在XML中指定。 ```xml ... <userTask activiti:exclusive="true" id="_4" name="创建出差申请单"> <extensionElements> <!-- event=all,class就是指定的监听器 --> <activiti:taskListener class="com.example.learn.flowable.listener.MyTaskListener" event="all" /> </extensionElements> </userTask> <userTask activiti:exclusive="true" id="_5" name="总经理审批"> <extensionElements> <activiti:taskListener class="com.example.learn.flowable.listener.MyTaskListener" event="all" /> </extensionElements> </userTask> ... ``` **2. 定义监听器** ```java public class MyTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { //判断当前的任务名称是 创建出差申请单 并且是 create 事件 if ("创建出差申请单".equals(delegateTask.getName()) && "create".equals(delegateTask.getEventName())) { //设置该任务负责人为 张三 delegateTask.setAssignee("张三"); } } } ``` **3. 测试** ```java public class ListenerDemo { /** * 1. 先进行流程部署 */ @Test public void testDeployment() { //1、获取ProcessEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2、获取RepositoryServcie RepositoryService repositoryService = processEngine.getRepositoryService(); //3、部署流程 Deployment deploy = repositoryService.createDeployment() .name("测试监听器") //部署名称 .addClasspathResource("bpmn/evection-listener.bpmn") .deploy(); //流程部署id=15001 System.out.println("流程部署id=" + deploy.getId()); //流程部署名称=测试监听器 System.out.println("流程部署名称=" + deploy.getName()); } /** * 2. 启动流程,创建流程实例 */ @Test public void startDemoListener() { //获取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取RunTimeService RuntimeService runtimeService = processEngine.getRuntimeService(); //根据流程key启动流程实例 runtimeService.startProcessInstanceByKey("evection-listener"); } } ``` ```sql # 创建出差申请单这个节点就会分配一个负责人为张三 mysql> select * from act_ru_task; +------+------+---------------+---------------+------------------+----------------+-----------------+--------------+-----------... | ID_ | REV_ | EXECUTION_ID_ | PROC_INST_ID_ | PROC_DEF_ID_ | NAME_ | PARENT_TASK_ID_ | DESCRIPTION_ | TASK_D... +------+------+---------------+---------------+------------------+----------------+-----------------+--------------+-----------... | 5005 | 1 | 5002 | 5001 | evection-listener:1:15004 | 创建出差申请单 | NULL | NULL | _4 | NULL | 张三 | ... +------+------+---------------+---------------+------------------+----------------+-----------------+--------------+-----------... ``` **** 参考文档:https://tkjohn.github.io/flowable-userguide/#taskListeners