A swimlane is a process role(角色). It is a mechanism to specify that multiple tasks in the process should be done by the same actor.(多个任务被同一个用户执行) So after the first task instance is created for a given swimlane, the actor should be remembered in the process for all subsequent(后来的) tasks that are in the same swimlane. A swimlane therefore has one assignment and all tasks that reference a swimlane should not specify an assignment.
泳道是用来处理一个流程中的多个任务必须由同一个人来处理的机制。所以,当一个流程的第一个任务实例被创建到指定的泳道后,第一个任务实例中的执行人被保存,该泳道中的后续任务的处理人都是第一个任务的处理人。所以一个泳道有一个人员被分配,并且泳道中的任务不需要再分配人员。
流程图如下:
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>()); |
对任务变量进行赋值。