jbpm系列之七--人工任务活动Task节点

JBPM最常用的节点之一Task。

任务分配的几种方式

Assignee

此种方法直接在task标签中指定assignee,即分配人。

<?xml version="1.0" encoding="UTF-8"?>
 
<process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="243,29,48,48">
      <transition name="提交到任务A" to="任务A" g="-63,-11"/>
   </start>
   <end name="end1" g="243,393,48,48"/>
   <task assignee="A" name="任务A" g="224,115,92,52">
      <transition name="提交到任务B" to="任务B" g="-77,-11"/>
   </task>
   <task assignee="B"  name="任务B" g="220,221,92,52">
      <transition name="提交到任务C" to="任务C" g="-83,-14"/>
   </task>
   <task assignee="C" name="任务C" g="224,308,92,52">
      <transition name="通过" to="end1" g="-62,-25"/>
   </task>
</process>

Candidate-groups(用户组候选任务):

首先,Candidate-groups是一个用户组,作为一个任务组来接受一个任务。在部署的时候设定这个任务组,并初始化其组中的用户。

在任务到达这个节点后,其中的用户利用List<Task> tasks = taskService.findPersonalTasks("a1")是拿不到这个任务的。必须用List<Task> tasks = taskService.findGroupTasks("a1");来查找这个任务。

或是利用taskService.takeTask("250002", "a1");将任务分配给a1,则只有a1能拿到这个任务。分配后只能用个人Personal的API能拿到这个任务。


接受任务

assignmentHandler(监听分配,在java代码中分配):jpdl代码如下

<process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="243,29,48,48">
      <transition name="提交到任务A" to="任务A" g="-63,-11"/>
   </start>
   <end name="end1" g="243,393,48,48"/>
   <task  name="任务A" g="224,115,92,52">
   	  <assignment-handler class="com.tgb.node.task.handler.AssignTask">
   	  </assignment-handler>
      <transition name="提交到任务B" to="任务B" g="-77,-11"/>
   </task>
   <task   name="任务B" g="220,221,92,52">
   		<assignment-handler class="com.tgb.node.task.handler.AssignTaskB">
   	  </assignment-handler>
      <transition name="提交到任务C" to="任务C" g="-83,-14"/>
   </task>
   <task  name="任务C" g="224,308,92,52">
      <transition name="通过" to="end1" g="-62,-25"/>
   </task>
</process>
java类代码如下:实现AssignmentHandler接口,用assignable动态设置人员

package com.tgb.node.task.handler;

import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.task.Assignable;
import org.jbpm.api.task.AssignmentHandler;

public class AssignTask implements AssignmentHandler {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void assign(Assignable assignable, OpenExecution execution)
			throws Exception {
		assignable.setAssignee("userA");
	}

}

Swimlanes(泳道分配):

在jpdl文件中定义swimlane属性。

将不同的task任务分配给同一个人:将任务A和任务C分配给U1用户。

<?xml version="1.0" encoding="UTF-8"?>

<process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl">
	<swimlane assignee="U1" name="mySwim"/>
   <start g="243,29,48,48" name="start1">
      <transition g="-63,-11" name="提交到任务A" to="任务A"/>
   </start>
   <end g="242,333,48,48" name="end1"/>
   <task g="224,115,92,52" name="任务A"  swimlane="mySwim">
      <transition g="-65,-14" name="提交到任务B" to="任务B"/>
   </task>
   <task assignee="U2" g="427,115,92,52" name="任务B">
      <transition g="-83,-14" name="提交到任务C" to="任务C"/>
   </task>
   <task g="222,207,92,52" name="任务C" swimlane="mySwim">
      <transition g="-62,-25" name="通过" to="end1"/>
   </task>
</process>

即任务A和任务C的指派人都为用户U1。


你可能感兴趣的:(jbpm系列之七--人工任务活动Task节点)