您的位置:首页 > 其它

分配个人任务的三种方式(引用地址有较全面的入门教程)

2016-10-09 10:08 676 查看
地址:http://blog.csdn.net/zjx86320/article/details/50388157

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

     一、流程图

                                            


                                               图一   分配用户任务流程图

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

     1.流程图中配置任务节点

                                 


                                                图二   配置任务节点办理人

     2.测试代码

[java] view
plain copy

       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 = "周江霄";  

    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.测试代码

[java] view
plain copy

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", "周江霄");  

        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 = "周江霄";  

        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类,用来设置任务的办理人

[java] view
plain copy

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("郭靖");  

    }  

      

}  

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

        


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

     3.测试代码

[java] view
plain copy

package cn.gome.l_personTask;  

  

import java.io.InputStream;  

import java.util.List;  

  

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)//  

                        .deploy();  

        System.out.println("部署ID:"+deployment.getId());  

        //启动流程实例  

        ProcessInstance pi = processEngine.getRuntimeService()//  

                    .startProcessInstanceByKey("task");//使用流程定义的key的最新版本启动流程  

        System.out.println("流程实例ID:"+pi.getId());  

        System.out.println("流程定义的ID:"+pi.getProcessDefinitionId());  

    }  

      

    /**查询我的个人任务*/  

    @Test  

    public void findPersonalTaskList(){  

        //任务办理人  

        String assignee = "郭靖";  

        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 = "5408";  

        processEngine.getTaskService().complete(taskId);  

        System.out.println("完成任务:"+taskId);  

    }  

      

    /**将个人任务从一个人分配给另一个人*/  

    @Test  

    public void setAssignee(){  

        //指定任务的办理人  

        String userId = "黄蓉";  

        //任务ID  

        String taskId = "5408";  

        processEngine.getTaskService()//  

                .setAssignee(taskId, userId);  

    }  

      

}  

           总结:

     通过对比,我们发现,分配个人任务的三种方式中,第一种欠灵活,后面两种都还是不错的,可以在项目中灵活的分配个人任务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐