Jbpm 分派任务的几种方式

来源:互联网 发布:软件自动化研究生 编辑:程序博客网 时间:2024/06/06 02:00

1、在图里直接指定:assigne=”王经理”
这里写图片描述

2、设定变量:assigne=${manager}
这里写图片描述

给变量设值

Map<String, Object> variables = new HashMap<String, Object>();        variables.put("manager", "王经理");        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("task",variables);

3、使用AssignmentHandlerImpl

public class AssignmentHandlerImpl implements AssignmentHandler{    private static final long serialVersionUID = 1L;    //计算此任务的办理人,并分配任务    @Override    public void assign(Assignable assignable, OpenExecution execution) throws Exception {        System.out.println("AssignmentHandlerImpl============");        //计算办理人        String userId = "李经理";        //分派任务        assignable.setAssignee(userId);    }}

然后在流程文件.xml

<?xml version="1.0" encoding="UTF-8"?><process name="task" xmlns="http://jbpm.org/4.4/jpdl">   <start g="38,16,48,48" name="start1">      <transition name="to 审批2" to="审批2" g="-52,-22"/>   </start>   <task assignee="${manager}" g="16,180,92,52" name="审批">      <transition g="-50,-22" name="to end1" to="end1"/>   </task>   <task name="审批2" g="16,96,92,52">      **<assignment-handler class="com.itcast.h_task.AssignmentHandlerImpl"></assignment-handler>**      <transition name="to 审批" to="审批" g="-45,-22"/>   </task>   <end g="38,264,48,48" name="end1"/></process>

4、把原来指派给李经理的,又重新分配给王经理:

/** * 任务指派 * @author Administrator * */public class ProcessDecisition {    private static ProcessEngine processEngine = Configuration.getProcessEngine();    /*{        //从src下开始查找        this.getClass().getResourceAsStream("/test.txt");        //从当前类的包中        this.getClass().getResourceAsStream("test.txt");        //从src下开始查找        this.getClass().getClassLoader().getResourceAsStream("test.txt");    }    */    @Test    public void testProcess() throws Exception {        //部署        String deployId = processEngine.getRepositoryService()        .createDeployment()        .addResourceFromClasspath("task/task.jpdl.xml")        .addResourceFromClasspath("task/task.png")        .deploy();        System.out.println("部署完毕:deployId=="+deployId);        Map<String, Object> variables = new HashMap<String, Object>();        variables.put("manager", "王经理");        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("task",variables);        System.out.println("启动完毕:processInstanceId=="+pi.getId());        System.out.println("正在执行的活动名称=="+pi.findActiveActivityNames());    }    /**     * 分配任务, 把李经理的任务给王经理     * @throws Exception     */    @Test    public void testAssignTask() throws Exception {        String taskId = "330010";        String userId = "王经理";        processEngine.getTaskService().assignTask(taskId, userId);    }}

5、组任务:
这里写图片描述
这里写图片描述

/** * 组任务指派 * @author Administrator * */public class ProcessDecisition {    private static ProcessEngine processEngine = Configuration.getProcessEngine();    /*{        //从src下开始查找        this.getClass().getResourceAsStream("/test.txt");        //从当前类的包中        this.getClass().getResourceAsStream("test.txt");        //从src下开始查找        this.getClass().getClassLoader().getResourceAsStream("test.txt");    }    */    @Test    public void testProcess() throws Exception {        //部署        String deployId = processEngine.getRepositoryService()        .createDeployment()        .addResourceFromClasspath("task/group.jpdl.xml")        .addResourceFromClasspath("task/group.png")        .deploy();        System.out.println("部署完毕:deployId=="+deployId);        Map<String, Object> variables = new HashMap<String, Object>();        variables.put("manager", "王经理");        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("group",variables);        System.out.println("启动完毕:processInstanceId=="+pi.getId());        System.out.println("正在执行的活动名称=="+pi.findActiveActivityNames());    }    //查询个人任务列表    @Test    public void findGroupTaskList() throws Exception {        String userId = "陈工";        //List<Task> tasks = processEngine.getTaskService().findGroupTasks(userId);        List<Task> tasks = processEngine.getTaskService()                .createTaskQuery()                .candidate(userId)                .page(0, 100)                .list();        for(Task task : tasks){            System.out.println("任务信息:taskId=="+task.getId()                     + ", Assignee=="+task.getAssignee()                    + ",name=="+task.getName()                    + ",createTime=="+task.getCreateTime()                    + ",ExecutionId=="+task.getExecutionId()                    );        }    }    //查询个人任务列表    @Test    public void findPersonalTaskList() throws Exception {        String userId = "陈工";        //List<Task> tasks = processEngine.getTaskService().findPersonalTasks(userId);        List<Task> tasks = processEngine.getTaskService()                .createTaskQuery()                .assignee(userId)                //.page(0, 100)                .list();                //.findPersonalTasks(userId);        for(Task task : tasks){            System.out.println("任务信息:taskId=="+task.getId()                     + ", Assignee=="+task.getAssignee()                    + ",name=="+task.getName()                    + ",createTime=="+task.getCreateTime()                    + ",ExecutionId=="+task.getExecutionId()                    );        }    }    //拾取任务,,拾取之后,其它工程师就看不到    @Test    public void testTakeTask() throws Exception {        String taskId = "340010";        String userId = "陈工";        processEngine.getTaskService().takeTask(taskId, userId);    }}

6、组任务使用变量:
这里写图片描述

Map<String, Object> variables = new HashMap<String, Object>();        //variables.put("manager", "王经理");        variables.put("userIds", "a陈工,a李工,a旷工,a苏工,a曾工");        ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("group",variables);

7、组任务使用AssignmentHandlerImpl

public class AssignmentHandlerImpl implements AssignmentHandler{    private static final long serialVersionUID = 1L;    //计算此任务的办理人,并分配任务    @Override    public void assign(Assignable assignable, OpenExecution execution) throws Exception {        System.out.println("AssignmentHandlerImpl============");        //计算办理人        //String userId = "李经理";        //分派任务        //assignable.setAssignee(userId);        assignable.setAssignee("aa");        assignable.setAssignee("bb");        assignable.setAssignee("cc");        assignable.setAssignee("dd");    }}

配置文件

<process name="group" xmlns="http://jbpm.org/4.4/jpdl">   <start g="38,16,48,48" name="start1">      <transition name="to 维修2" to="维修2" g="-52,-22"/>   </start>   <!-- <task candidate-users="陈工,李工,钱工,牛工" g="16,180,92,52" name="维修">      <assignment-handler class="com.itcast.h_task.AssignmentHandlerImpl"></assignment-handler>       <transition g="-50,-22" name="to end1" to="end1"/>   </task> -->   <task  g="16,180,92,52" name="维修">      <assignment-handler class="com.itcast.h_task.AssignmentHandlerImpl"></assignment-handler>       <transition g="-50,-22" name="to end1" to="end1"/>   </task>   <end g="38,264,48,48" name="end1"/>   <task name="维修2" g="16,96,92,52" candidate-users="${userIds}">      <transition name="to 维修" to="维修" g="-45,-22"/>   </task></process>

8、总结:
这里写图片描述

0 0
原创粉丝点击