12-jbpm工作流之 分配任務給一個"組的成員"GroupTask
阿新 • • 發佈:2019-02-12
* 組任務活動分配
* 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-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