分配个人任务的三种方式
用户任务(UserTask)即用户操作的任务, 个人任务是用户任务的一种,这篇博文将简单地介绍下分配个人任务的三种方式。
一、流程图
图一 分配用户任务流程图
二、方式一:直接指定办理人
1.流程图中配置任务节点
图二 配置任务节点办理人
2.测试代码
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //部署流程定义,启动流程实例 @Test public void testTask() throws Exception { // 1 发布流程 InputStream inputStreamBpmn = this.getClass().getResourceAsStream("taskProcess.bpmn"); InputStream inputStreamPng = this.getClass().getResourceAsStream("taskProcess.png"); processEngine.getRepositoryService()// .createDeployment()// .addInputStream("userTask.bpmn", inputStreamBpmn)// .addInputStream("userTask.png", inputStreamPng)// .deploy(); // 2 启动流程 //启动流程实例的同时,设置流程变量 ProcessInstance pi = processEngine.getRuntimeService()// .startProcessInstanceByKey("taskProcess"); System.out.println("pid:" + pi.getId()); } //查询我的个人任务列表 @Test public void findMyTaskList(){ String userId = "zhangsan111"; List<Task> list = processEngine.getTaskService()// .createTaskQuery()// .taskAssignee(userId)//指定个人任务查询 .list(); for(Task task:list ){ System.out.println("id="+task.getId()); System.out.println("name="+task.getName()); System.out.println("assinee="+task.getAssignee()); System.out.println("createTime="+task.getCreateTime()); System.out.println("executionId="+task.getExecutionId()); } } //完成任务 @Test public void completeTask(){ String taskId = "3209"; processEngine.getTaskService()// .complete(taskId);// System.out.println("完成任务"); }
说明:在上面的例子中,周江霄是个人任务的办理人;但是这样分配任务的办理人不够灵活,因为项目开发中任
务的办理人不要放置XML文件中。
三、方式二:直接指定办理人
1.流程图中配置任务节点变量
图三 配置任务节点变量
2.测试代码
package cn.gome.k_personTask; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.junit.Test; public class TaskTest { //流程引擎对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定义+启动流程实例*/ @Test public void deployementAndStartProcess(){ InputStream inputStreamBpmn = this.getClass().getResourceAsStream("task.bpmn"); InputStream inputStreampng = this.getClass().getResourceAsStream("task.png"); //部署流程定义 Deployment deployment = processEngine.getRepositoryService()// .createDeployment()//创建部署对象 .addInputStream("task.bpmn", inputStreamBpmn)//部署加载资源文件 .addInputStream("task.png", inputStreampng) .name("个人任务演示") .deploy(); System.out.println("部署ID:"+deployment.getId()); //启动流程实例 /** * 启动流程实例的同时,设置流程变量,使用流程变量的方式设置下一个任务的办理人 * 流程变量的名称,就是在task.bpmn中定义#{userID}的userID * 流程变量的值,就是任务的办理人 */ Map<String, Object> variables = new HashMap<String, Object>(); variables.put("userID", "zhangsan111"); ProcessInstance pi = processEngine.getRuntimeService()// .startProcessInstanceByKey("task",variables);//使用流程定义的key的最新版本启动流程 System.out.println("流程实例ID:"+pi.getId()); System.out.println("流程定义的ID:"+pi.getProcessDefinitionId()); } /**查询我的个人任务*/ @Test public void findPersonalTaskList(){ //任务办理人 String assignee = "zhangsan111"; List<Task> list = processEngine.getTaskService() .createTaskQuery() .taskAssignee(assignee)//个人任务的查询 .list(); if(list!=null && list.size()>0){ for(Task task:list){ System.out.println("任务ID:"+task.getId()); System.out.println("任务的办理人:"+task.getAssignee()); System.out.println("任务名称:"+task.getName()); System.out.println("任务的创建时间:"+task.getCreateTime()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("#######################################"); } } } /**完成任务*/ @Test public void completeTask(){ //任务ID String taskId = "5209"; processEngine.getTaskService() .complete(taskId); System.out.println("完成任务:"+taskId); } }
四、方式三:使用类
1.TaskListenerImpl类,用来设置任务的办理人
package cn.gome.l_personTask; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.TaskListener; public class TaskListenerImpl implements TaskListener{ /**设置任务的办理人(个人任务和组任务)*/ @Override public void notify(DelegateTask delegateTask) { //指定个人任务 delegateTask.setAssignee("zhangsan"); } }
流程图中配置任务节点监听
图四 流程图中配置任务节点监听