任务分配 三种模式
1. 固定分配
指定人去做
2. UEL表达式分配
activiti使用uel表达式,UEL是java EE6规范的一部分,UEL即统一表达式语言
activiti支持两个UEL表达式:UEL-value 和 UEL-method
UEL-value 写法 ${变量}
${assignee1}
测试
//部署流程定义@Testpublic void deployProcess1(){Deployment deploy = repositoryService.createDeployment().addClasspathResource("process/jiaban.bpmn20.xml") //xml 设置了UEL-value.addClasspathResource("process/jiaban.png").name("加班流程").deploy();System.out.println(deploy.getId());System.out.println(deploy.getName());}//启动流程实例@Testpublic void startProcess1(){// UEL表达式分配Map<String,Object> map=new HashMap<>();map.put("assignee1","json");map.put("assignee2","haha");ProcessInstance qingjia = runtimeService.startProcessInstanceByKey("jiaban",map);System.out.println("流程定义ID"+qingjia.getProcessDefinitionId());System.out.println("流程实例ID"+qingjia.getId());System.out.println("流程活动ID"+qingjia.getActivityId());}//查询个人代办任务 -- json@Testpublic void findTaskList1(){String name="json";List<Task> taskList = taskService.createTaskQuery().taskAssignee(name).list();taskList.forEach(item->{System.out.println("流程实例的ID"+item.getProcessInstanceId());System.out.println("任务id"+item.getId());System.out.println("任务负责人"+item.getAssignee());System.out.println("任务名称"+item.getName());});}
UEL-method 实现
userBean是spring容器中的bean 标识调用该bean的getUsername方法
比如
经理审批
${userBean.getUsername(1)}
人事审批
${userBean.getUsername(2)}
实现代码和UEL-value 差不多
3. 监听器分配
使用监听器的方式来指定负责人
那么在流程设计时不需要指定assignee
任务监听器时发生对应的任务相关事件执行自定义java逻辑或表达式
Event的选项包含
Create 任务创建触发
Assignment 任务分配后触发
Delete 任务完成后触发
All 所有事件发生都触发
package com.oa.auth;import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;/*** @User: Json* @Date: 2023/7/24* 这里的代码执行 主要是配合activiti的 设计工具使用* 在设计工具中配置 触发方式**/
public class MyTaskListener implements TaskListener {@Overridepublic void notify(DelegateTask delegateTask) {if(delegateTask.getName().equals("经理审批")){//分配任务delegateTask.setAssignee("jack");}else if(delegateTask.getName().equals("人事审批")){delegateTask.setAssignee("json");}}
}
=====================================