Activity5工作流(六)

分配个人任务的三种方式

​ 用户任务(UserTask)即用户操作的任务, 个人任务是用户任务的一种,这篇博文将简单地介绍下分配个人任务的三种方式。

​ 一、流程图

img

​ 图一 分配用户任务流程图

​ 二、方式一:直接指定办理人

​ 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.流程图中配置任务节点变量

img

​ 图三 配置任务节点变量

​ 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");  
    }  
      
} 

流程图中配置任务节点监听

img

​ 图四 流程图中配置任务节点监听

发布了0 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/superviser3000/article/details/89965027