1. 程式人生 > >12-jbpm工作流之 分配任務給一個"組的成員"GroupTask

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-handlerclass="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