12-jbpm工作流之 分配任务给一个"组的成员"GroupTask

 * 组任务活动分配
 *  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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值