设为首页收藏本站

JEECG官方网站-企业级JAVA快速开发平台

 找回密码
 立即注册

关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 最新动态 - 技术支持 - 师徒架构班

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务 QQ: 3102411850、418799587 商务热线: 18611788525 客服电话: 010-64808099 官方邮箱: jeecgos@163.com

查看: 2672|回复: 0

jbpm学习笔记(九) task活动之泳道的概念

[复制链接]

424

主题

31

好友

1万

积分

管理员

Rank: 12Rank: 12Rank: 12

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 荣誉管理 JEECG团队成员

发表于 2014-9-2 17:52:37 |显示全部楼层
  任务泳道的概念:在实际的业务应用中,经常会遇到这样一种场景:流程定义中的多个任务需要被分配或候选给同一个群用户。那么我们可以统一将这个“同一群用户”定义为“一个泳道”。同一流程定义中的任何一个任务都可以应用泳道。属于同一个泳道的任务将会被分配或候选给这个泳道中的所有用户。

泳道的概念也可以理解为流程定义的“全局用户组”。在某些情况下,泳道可能与后面提到的身份认证组件中的权限角色相似,但是实际上他们并不是同一个东西。
先来熟悉一下简单的例子,jpdl如下:
Xml代码

  • <?xml version="1.0" encoding="UTF-8"?>
  • <process name="taskSwimlane" xmlns="http://jbpm.org/4.4/jpdl">
  •     <!-- 在这里定义泳道,泳道是为流程定义的子元素 -->
  •     <swimlane name="checkManagers" candidate-groups="order_managers" />
  •     <start>
  •         <transition to="checkOrder" />
  •     </start>
  •     <!-- 以下2个任务的分配工作,都交给上面定义的泳道完成 -->
  •     <task name="checkOrder" swimlane="checkManagers">
  •         <transition to="repeatCheckOrder" />
  •     </task>
  •     <task name="repeatCheckOrder" swimlane="checkManagers">
  •             <transition to="end" />
  •     </task>
  • <end name="end" />
  • </process>

<?xml version="1.0" encoding="UTF-8"?><process name="taskSwimlane" xmlns="http://jbpm.org/4.4/jpdl">        <!-- 在这里定义泳道,泳道是为流程定义的子元素 -->        <swimlane name="checkManagers" candidate-groups="order_managers" />        <start>                <transition to="checkOrder" />        </start>        <!-- 以下2个任务的分配工作,都交给上面定义的泳道完成 -->        <task name="checkOrder" swimlane="checkManagers">                <transition to="repeatCheckOrder" />        </task>        <task name="repeatCheckOrder" swimlane="checkManagers">                         <transition to="end" />        </task> <end name="end" /></process>上面定义的泳道“check”引用了一个用户组 managers。在流程运行前,这个用户组需要被创建出来,利用身份认证服务 IdentityService:
Java代码

  • identityService.createGroup("order_managers");
  •         // 创建用户 afei并加入managers组
  • identityService.createUser("afei", "du", "yunfei");
  • identityService.createMembership("afei", "order_managers");

identityService.createGroup("order_managers");                // 创建用户 afei并加入managers组identityService.createUser("afei", "du", "yunfei");identityService.createMembership("afei", "order_managers");在发起流程实例后,用户afei将成为任务 checkOrder的唯一候选者。首先,让afei接受这个任务:
注意,使用findGroupTasks才能看到task,用findPersonalTasks是出不来的。
taskService.takeTask(taskId,”afei”);
接受这个任务将使afei成为任务的分配者,同时泳道“check”也会发生变化,afei在这个流程实例中会被固化为分配者。
接下来,afei可以完成任务了:
taskService.completeTask(taskId);
完成此任务后流程实例将会流转到下一个任务“repeatCheckOrder”。这个任务也引用了之前的泳道。因此,任务会直接分配给afei。可以通过如下代码验证:

Java代码

  • tasks = taskService.findPersonalTasks("afei"); // 断言afei直接拿到了任务
  •         System.out.println("tasks.size(): " + tasks.size());
  •         task = tasks.get(0);
  •         // 断言是否为预期的任务和分配者
  •         assertEquals("repeatCheckOrder", task.getName());
  •         assertEquals("afei", task.getAssignee());
  •         // taskService.takeTask(task.getId(), "afei");
  •         taskService.completeTask(task.getId());

tasks = taskService.findPersonalTasks("afei"); // 断言afei直接拿到了任务                System.out.println("tasks.size(): " + tasks.size());                task = tasks.get(0);                // 断言是否为预期的任务和分配者                assertEquals("repeatCheckOrder", task.getName());                assertEquals("afei", task.getAssignee());                // taskService.takeTask(task.getId(), "afei");                taskService.completeTask(task.getId());注意:假如此时takeTask也是不对的,因为已经被afei给take了。

下一张,任务变量!


专业解答JEECG疑难杂症,JEECG常见问题汇总在:http://t.cn/RvYsEF6
您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|JEECG官方技术论坛 ( 京ICP备12013567号-3 )  

GMT+8, 2019-5-24 11:28 , Processed in 1.372802 second(s), 22 queries , Gzip On.

JEECG Open Source

© 2001-2012 Comsenz Inc.

回顶部