这里的泳道类似于UML中的泳道的概念,类似于组(Group)的概念,当一个业务流程需要很多种角色来共同、分时才能走完时,就需要泳道的概念引入其中。这种操作和分组操作十分相似。
流程图如下:
Xml流程图如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="TaskSwimlane" xmlns="http://jbpm.org/4.4/jpdl">
<swimlane name="myswimlane" candidate-groups="tibco"></swimlane>
<start name="start1" g="57,44,48,48">
<transition name="to task1" to="task1" g="242,67:-52,-22" />
</start>
<task name="task1" g="197,172,92,52" swimlane="myswimlane">
<transition name="to state1" to="state1" g="242,339:-56,-22" />
</task>
<state name="state1" g="52,311,92,52" />
</process>
测试代码如下,和Group测试代码类似
/**
* 使用身份验证接口建立不同的用户、组、组成员
*/
public void test02CreateGroup() {
identityService.createGroup("tibco");
identityService.createUser("liuyan", "liuyan", "素还真");
identityService.createMembership("liuyan", "tibco");
}
/**
* 发起流程
*/
public void test03StartTask() {
// 开始process流程
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("TaskSwimlane");
// 流程实例的ID
String pid = processInstance.getId();
System.out.println(pid);// TaskSwimlane.20001
}
/**
* 获得指定人的任务列表
*/
public void test04GetAssigneeGroupTask() {
List<Task> taskList1 = taskService.findPersonalTasks("liuyan");
for (Task task : taskList1) {
System.out.println(task.getAssignee());
}
List<Task> taskList2 = taskService.findGroupTasks("liuyan");
for (Task task : taskList2) {
System.out.println(task.getId());//20002
}
}
/**
* 争抢获取任务
*/
public void test05ExeTask(){
taskService.takeTask("20002", "liuyan");
}
/**
* 完成任务
*/
public void test06(){
taskService.completeTask("20002");
}
这样将liuyan给了tibco组,凡是tibco组的会员都可以争抢、处理这个task。
Task的任务变量
任务变量和流程变量的概念差不多,不过任务变量比流程变量更微观、更具体。通过
Map<String,Object> vars = taskService.getVariables(tasked,varName); |
获得任务变量Map;
通过
taskService.setVariables(tasked,new HashMap<String,Object>()); |
对任务变量进行赋值。