* 组任务活动分配
* 1.使用流程变量: candidate-users="#{userIdsString}" 在Expression设置#{userIdsString}(String类型的变量,多用户用","分隔)
* 2.使用类处理AssignmentHandler :assignable.addCandidateUser(userId);
任务分配处理类:
demo源代码下载地址: http://download.csdn.net/detail/zhengyong15984285623/5747773
* 1.使用流程变量: candidate-users="#{userIdsString}" 在Expression设置#{userIdsString}(String类型的变量,多用户用","分隔)
* 2.使用类处理AssignmentHandler :assignable.addCandidateUser(userId);
* 3.processEngine.getTaskService().addTaskParticipatingUser(taskId, userId, Participation.CANDIDATE);
流程图test.png:
流程配置文件test.jpdl.xml: 这儿配置了如何分配任务给候选人(组成员)的实现类,该类实现了AssignmentHandler接口
<assignment-handler class="cn.edu.zust.itee.groupTask.GroupTaskAssignmentHandlerImpl"/>
<?xml version="1.0" encoding="UTF-8"?>
<process name="test" xmlns="http://jbpm.org/4.4/jpdl">
<start g="302,63,48,48" name="start1">
<transition g="-52,-22" name="to task1" to="task1"/>
</start>
<end g="305,315,48,48" name="end1"/>
<task g="281,185,92,52" name="task1">
<assignment-handler class="cn.edu.zust.itee.groupTask.GroupTaskAssignmentHandlerImpl"/>
<transition g="-53,-9" name="to end1" to="end1"/>
</task>
</process>
任务分配处理类:
package cn.edu.zust.itee.groupTask;
import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.task.Assignable;
import org.jbpm.api.task.AssignmentHandler;
/**
* @author 郑勇
* 2013-7-11 17:17
* 任务组处理类
*/
public class GroupTaskAssignmentHandlerImpl implements AssignmentHandler {
@Override
public void assign(Assignable assignable, OpenExecution execution) throws Exception {
System.out.println("分配任务给一个组的成员");
//获取候选人信息
String[] userIds = (String[]) execution.getVariable("userIds");
//给活动分配执行人员组
for(String userId :userIds){
assignable.addCandidateUser(userId);
}
}
}
测试类:
package cn.edu.zust.itee.groupTask;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.task.Participation;
import org.jbpm.api.task.Task;
import org.junit.Test;
/**
* @author 郑勇
* 2013-7-11 17:17
* 组任务活动分配
* 1.使用流程变量: candidate-users="#{userIdsString}" 在Expression设置#{userIdsString}(String类型的变量,多用户用","分隔)
* 2.使用类处理AssignmentHandler :assignable.addCandidateUser(userId);
* 3.processEngine.getTaskService().addTaskParticipatingUser(taskId, userId, Participation.CANDIDATE);
*/
public class GroupTaskVariable {
ProcessEngine processEngine= Configuration.getProcessEngine();
@Test
public void testGroupTask(){
//部署流程定义
//获得当前包中的文件
InputStream in = this.getClass().getResourceAsStream("test.jpdl.xml");
processEngine.getRepositoryService()
.createDeployment()
.addResourceFromInputStream("test.jpdl.xml", in)
.deploy();
//设置流程变量
Map<String,Object> mapVariable = new HashMap<String,Object> ();
mapVariable.put("userIds", new String[]{"经理A","经理B","经理C","经理D","经理E"});
ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("test", mapVariable);
System.out.println("processIntenceId="+pi.getId());
}
//查询个人未办理的任务列表
@Test
public void findMyTaskList(){
//查询任务
String usrid = "经理A";
List<Task> list = processEngine.getTaskService().findPersonalTasks(usrid);
System.out.println("============="+usrid+"未办理的任务列表=============");
//显示任务
for(Task task:list){
System.out.println("id="+task.getId()+",name="+task.getName()+",assignee="+task.getAssignee()+",createTime="+task.getCreateTime());
}
}
//查询组人员未办理的任务列表
@Test
public void findGroupTaskList(){
//查询任务
String userId = "经理A";
// List<Task> list = processEngine.getTaskService().findGroupTasks(usrid);
List<Task> list = processEngine.getTaskService()
.createTaskQuery()
.candidate(userId)
.list();
System.out.println("============="+userId+"未办理的任务列表=============");
//显示任务
for(Task task:list){
System.out.println("id="+task.getId()+",name="+task.getName()+",assignee="+task.getAssignee()+",createTime="+task.getCreateTime());
}
}
//拾取任务(从组任务列表中把任务拾取到个人任务列表中,这样别人就看不到了,因为它变成了我的个人任务列表了)
@Test
public void takeTask(){
String taskId = "760010";
String userId = "经理A";
processEngine.getTaskService().takeTask(taskId, userId);
}
}
demo源代码下载地址: http://download.csdn.net/detail/zhengyong15984285623/5747773