JBPM4学习总结之7——Task之任务分配器
在定义流程模板的时候同样可以定义一个自己的类来做任务分配器的功能,在代码中分配任务执行者。分配器类需要实现AssignmentHandler(org.jbpm.api.task.AssignmentHandler)接口。
流程图雷同,xml描述如下:
<?xml version="1.0" encoding="UTF-8"?><process name="TaskAssignmentHandler" xmlns="http://jbpm.org/4.4/jpdl"><start name="start1" g="173,51,48,48"><transition name="to task1" to="task1" g="-52,-22" /></start><task name="task1" g="151,157,92,52"><assignment-handler /></field></assignment-handler><transition name="to state1" to="state1" g="-56,-22" /></task><state name="state1" g="155,268,92,52" /></process>
?
而myHandler.AssignmentHandler代码如下
package myHandler;import org.jbpm.api.model.OpenExecution;import org.jbpm.api.task.Assignable;/** * 任务分配处理器 * * @author liuyan * */public class AssignmentHandler implements org.jbpm.api.task.AssignmentHandler {String name;@Overridepublic void assign(Assignable assignable, OpenExecution execution)throws Exception {// 设置任务分配者assignable.setAssignee(name);}}
?
name的值是被注入的,根据注入的name的值将任务指定给它。
测试代码如下:
/** * 指派任务的所有人 */public void test02AssigneeTask() {// 开始process流程ProcessInstance processInstance = executionService.startProcessInstanceByKey("TaskAssignmentHandler");// 流程实例的IDString pid = processInstance.getId();System.out.println(pid);// forkjoin.10001}/** * 按用户名查找 */public void test03FindTaskes(){List<Task> taskList = taskService.findPersonalTasks("liuyan");for (Task task : taskList) {System.out.println(task.getAssignee());}}
?当查找结果时候,会发现liuyan用户拥有一个待处理的任务。当然在分配器类中还可以自己写更复杂的业务判断来指定给相关人员处理Task。