JBPM4学习总结第一季.pdf_第1页
JBPM4学习总结第一季.pdf_第2页
JBPM4学习总结第一季.pdf_第3页
JBPM4学习总结第一季.pdf_第4页
JBPM4学习总结第一季.pdf_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JBPM4学习总结第一季 作者: suhuanzheng7784877 JBPM4学习总结 - 做最棒的软件开发交流社区 第 1 / 45 页 本书由ITeye提供的电子书DIY功能自动生成于 2011-06-27 目 录 1. jbpm 1.1 JBPM4学习总结之1配置环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.2 JBPM4学习总结之2发布流程模板、流程实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 1.3 JBPM4学习总结之3State(状态活动) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 1.4 JBPM4学习总结之4Decision(判断活动) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 1.6 JBPM4学习总结之6Task之任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26 1.7 JBPM4学习总结之7Task之任务分配器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 1.8 JBPM4学习总结之8Task之任务泳道和Task任务变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 1.9 JBPM4学习总结之9子流程(sub-process) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 1.10 JBPM4学习总结之10复杂的子流程(sub-process) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 第 2 / 45 页 1.1 JBPM4学习总结之1配置环境 发表时间: 2011-03-05 1.前言 JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等 领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBPM是公开源代码项目,它使用要遵循 Apache License。 jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它 的名称也改成JBoss jBPM。随着jBPM加入JBoss组织,jBPM也将进入一个全新的发展时代,它的前景是十分光明的。目 前官方网站上最新的版本是JBPM5,不过它还尚未成熟,建议大家不要做实验室里面的小白鼠。 2.配置JBPM4开发环境 JBPM4目前最稳定的版本是4.4。 从 包jbpm-4.4.zip。下载之后解压缩,将里面的一个jbpm.jar和lib下面所有的jar包拷贝到实际项目工程当中。下 面我们安装JBPM的Eclipse插件,让我们的Eclipse具有JBPM的Feature。在已经下载的%JBPM4_PATH%/ install/src/gpd下面就是插件包,利用eclipse的updateSite方式即可安装JBPM4插件,安装完成后。 在Eclipse的New-Other下面会这样的效果。 1.1 JBPM4学习总结之1配置环境 第 3 / 45 页 以上是建立一个工作流程,点击next后输入流程模板的名字,如下图 1.1 JBPM4学习总结之1配置环境 第 4 / 45 页 1.1 JBPM4学习总结之1配置环境 第 5 / 45 页 之后就可以利用可视化编辑器编辑(GEF)流程了,效果如下 加入JPDL4的schema效验,在%JBPM4_PATH%/src/文件夹下面有jpdl-4.0.xsdjpdl-4.4.xsd的xml效 验,将其引入到Eclipse中来,就可以使用快捷键编辑xml流程了。引入步骤如下: Preferences-Myeclipse-files and editors-XML-XML schema- XML schema Source即可添加新 的schema验证了。 1.JBPM默认的配置文件说明 jbpm.cfg.xml:整个工作流引擎总配置文件,它描述了该引擎需要加载的其他配置文件,它相当于一个所有 配置文件的核心管理配置。内容如下: 1.1 JBPM4学习总结之1配置环境 第 6 / 45 页 当然我们可以按照自己定义的总配置文件来加载自定义配置,比如自己新建一个myjbpm.cfg.xml,而真正 开始流程发布的时候就可以显示的在代码中明确加载myjbpm.cfg.xml配置文件,而不去加载默认的配置, 此为后话以后再表。 perties:描述了邮件信息,当流程中引发了邮件处理的时候,会按照其中的配置信息发送相 关邮件。 jbpm.hibernate.cfg.xml:工作流引擎是依靠自身的一些数据库的,这个就是数据库相关的配置信息,因 为JBPM底层就是引用了Hibernate来做持久层维护的,所以此文件就是Hibernate配置文件。内容如下: org.hibernate.dialect.MySQL5InnoDBDialect com.mysql.jdbc.Driver jdbc:mysql:/localhost:3306/ jbpm4demo?useUnicode=truecharacterEncoding=UTF-8 liuyan 111111 update true 1.1 JBPM4学习总结之1配置环境 第 7 / 45 页 1.1 JBPM4学习总结之1配置环境 第 8 / 45 页 1.2 JBPM4学习总结之2发布流程模板、流程实例 发表时间: 2011-03-05 1.发布流程模板 当我们通过流程编辑器编辑好了流程之后就可以将这个流程模板发布到数据库中。我觉得定义一个流程模板更像是定义一 个Java Class类,发布一个流程模板就好像是编译这个类成为class,而流程实例就好像是一个Java类的一个实例对象。 最常用的是用Java代码的方式发布流程还有一个是利用Ant脚本发布流程,不过一般在开发阶段十分少用。 / 加载默认的jbpm.cfg.xml文件 ProcessEngine processEngine = new Configuration().buildProcessEngine(); /* * 发布流程 */ public void test01Deploy() String deployId = repositoryService.createDeployment() .addResourceFromClasspath(“decision.jpdl.xml“).deploy(); System.out.println(deployId); 这样就把流程模板为decision的流程发布到了数据库中,发布成功后,jbpm相关表会变化如下: jbpm4_deployment jbpm4_deployprop jbpm4_lob jbpm4_property 1.2 JBPM4学习总结之2发布流程模板、流程实例 第 9 / 45 页 比较重要的几个服务接口,其他服务接口都是从主接口引擎服务接口ProcessEngine获得的。 / 引擎服务接口 ProcessEngine processEngine = new Configuration().buildProcessEngine(); / 资源服务,流程模板的部署、查询、删除 RepositoryService repositoryService = processEngine.getRepositoryService(); / 执行服务,设置流程实例的发起、执行 ExecutionService executionService = processEngine.getExecutionService(); / 流程管理接口、异步工作相关执行 ManagementService managementService = processEngine.getManagementService(); / 人工任务服务接口,对任务task的查询、提交、删除、保存 TaskService taskService = processEngine.getTaskService(); / 历史记录操作接口 HistoryService historyService = processEngine.getHistoryService(); / 身份验证服务 IdentityService identityService = processEngine.getIdentityService(); 1.根据流程模板发起一个流程实例 定义好了模板后,就可以建立此流程模板的实例对象了,实例对象就是现实中一个个真正的流程事件了。 1.直接发起StateChoice流程实例 / 开始process流程 ProcessInstance processInstance = executionService.startProcessInstanceByKey(“StateChoice“); 2.发起流程时加入流程实例变量 HashMap parm = new HashMap(); parm.put(“MyId“, ); 1.2 JBPM4学习总结之2发布流程模板、流程实例 第 10 / 45 页 parm.put(“MyName“, “liuyan“); parm.put(“MyDate“, new Date(); ProcessInstance processInstance = executionService.startProcessInstanceById(“StateChoice -1“, parm); 这样在发起流程的时候通过一个HashMap将流程变量传到整个流程中,可能以后的某一个节点会用到 “当初”传入的变量。 startProcessInstanceByKey:根据StateChoice找到最新的部署版本去发起流程。 startProcessInstanceById:根据StateChoice的版本(1就是第1版本)去发起流程。 如果传入流程实例的是一个自定义的复杂对象,则该对象必须实现Serializable接口,以便流程实例上下文的变 量持久化。 1.2 JBPM4学习总结之2发布流程模板、流程实例 第 11 / 45 页 1.3 JBPM4学习总结之3State(状态活动) 发表时间: 2011-03-05 流程实例流到State状态活动时,就陷入了一个中断、等待状态,必须得收到外部的干预操作后才能继续运行, 最简单的State流程图如下 流程XML代码如下: 测试代码如下: /* *发起流程实例 */ public void test01StartInstence() / 1.3 JBPM4学习总结之3State(状态活动) 第 12 / 45 页 HashMap parm = new HashMap(); parm.put(“MyId“, ); parm.put(“MyName“, “liuyan“); parm.put(“MyDate“, new Date(); ProcessInstance processInstance = executionService .startProcessInstanceById(“helloworld-1“,parm); System.out.println(processInstance); /* *继续往下执行流程实例 */ public void test02NextInstence() ProcessInstance pi = executionService .signalExecutionById(“helloworld.10001“); System.out.println(pi.isEnded(); 可以看到,通过 ProcessInstance pi = executionService.signalExecutionById(“helloworld.10001“);方法将流程继续执行 下去,这里就是外部干预了,之后流程归入END节点。 下面可以看一下可以选择不同的State的流程,流程图如下: 1.3 JBPM4学习总结之3State(状态活动) 第 13 / 45 页 代码如下: 测试代码如下: / 开始process流程 ProcessInstance processInstance = executionService .startProcessInstanceByKey(“StateChoice“); / 流程实例的ID String eid = processInstance.getProcessInstance().getId(); String pid = processInstance.getId(); processInstance= executionService.createProcessInstanceQuery().processInstanceId(pid).uniqueResult(); processInstance = executionService.signalExecutionById(eid, “ok“); boolean isAction = processInstance.isActive(“OK“); System.out.println(isAction); 可以看出通过executionService.signalExecutionById(eid, “ok“);将流程引到了ok分支。 1.3 JBPM4学习总结之3State(状态活动) 第 14 / 45 页 1.4 JBPM4学习总结之4Decision(判断活动) 发表时间: 2011-03-05 下面咱们来看看正宗的做条件判断的流程是如何工作的。 1.transition下面的condition属性决定流向 流程图如下 Xml描述如下: 1.4 JBPM4学习总结之4Decision(判断活动) 第 15 / 45 页 可以看出每一个transition通过condition中的EL表达式来决定应该转向哪个分支。 测试代码如下: / 判断条件 Map con = new HashMap(); con.put(“con“, “bad“); / 开始process流程 ProcessInstance processInstance = executionService .startProcessInstanceByKey(“decision“, con); / 流程实例的ID String pid = processInstance.getId(); System.out.println(pid); boolean isAction = processInstance.isActive(“refect“); System.out.println(isAction); 这样通过流程变量“con”来决定流程实例未来的走向。上个代码将流程走到了refect节点。 1.decision的expr属性决定流向 decision的expr属性和transition下面的condition差不多,无非是少定义几行代码。如下: 测试代码和上面一样,结果亦同。 2.单独的Java类决定流向 单独使用Java类来处理复杂流程的流向,则该处理类必须实现DecisionHandler接口 (org.jbpm.api.jpdl.DecisionHandler)。 1.4 JBPM4学习总结之4Decision(判断活动) 第 16 / 45 页 先看流程: 大致和第一个差不多 流程xml定义如下: 在流程定义中加入了一个流程处理类MyDecisionHandler,自己实现decide方法。 该类代码如下: package myHandler; import org.jbpm.api.jpdl.DecisionHandler; import org.jbpm.api.model.OpenExecution; 1.4 JBPM4学习总结之4Decision(判断活动) 第 17 / 45 页 import vo.DesicionVO; public class MyDecisionHandler implements DecisionHandler /* * */ private static final long serialVersionUID = -8252198085094966729L; Override public String decide(OpenExecution arg) DesicionVO desicionVO = (DesicionVO) arg.getVariable(“con“); if (“took“.equals(desicionVO.getName() return “took“; else if (“todelete“.equals(desicionVO.getName() return “todelete“; return “toend“; 根据流程实例变量DesicionVO中的数值来决定流程转向哪里。 测试代码如下: /判断条件 Map con = new HashMap(); DesicionVO desicionVO = new DesicionVO(); desicionVO.setName(“took“); con.put(“con“, desicionVO); / 开始process流程 1.4 JBPM4学习总结之4Decision(判断活动) 第 18 / 45 页 ProcessInstance processInstance = executionService .startProcessInstanceByKey(“decisionHandler“,con); / 流程实例的ID String pid = processInstance.getId(); System.out.println(pid); boolean isAction = processInstance.isActive(“ok“); System.out.println(isAction); State和Decision都可以决定分支的流向,他们的区别就是:1.如果Decision活动没有得到条件的满足,那么流 程进行不下去,会发生异常;2.如果State下面的多个活动没有达到满足则默认会走向第一个分支,让整个流程 继续走下去。从而可以看出Decision比State具有更加严格的条件判断性。 1.4 JBPM4学习总结之4Decision(判断活动) 第 19 / 45 页 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) 发表时间: 2011-03-05 当我们需要流程并发处理、执行的时候就需要分支、聚合。当出现fork的时候,流程实例不是仅仅进入其中一个分支,而是所有分支都 会被激活,直到外界接口执行此分支才会往下走,所有的分支节点都聚合到join的时候,整个分支才会继续往下面走,否则,最先到 达join分支的节点会一直等待在join那里等待其他。 流程图如下: 流程描述如下: 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) 第 20 / 45 页 测试代码如下: package code; import java.util.Set; import junit.framework.TestCase; import org.jbpm.api.Configuration; 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) 第 21 / 45 页 import org.jbpm.api.ExecutionService; import org.jbpm.api.ProcessEngine; import org.jbpm.api.ProcessInstance; import org.jbpm.api.RepositoryService; public class Forkjoin extends TestCase / 加载myjbpm.cfg.xml文件 ProcessEngine processEngine = new Configuration().setResource( “myjbpm.cfg.xml“).buildProcessEngine(); / 资源服务,流程模板的部署、查询、删除 RepositoryService repositoryService = processEngine.getRepositoryService(); / 执行服务,设置流程实例的发起、执行 ExecutionService executionService = processEngine.getExecutionService(); /* * 发布流程 */ public void test01Deploy() String deployId = repositoryService.createDeployment() .addResourceFromClasspath(“forkjoin.jpdl.xml“).deploy(); System.out.println(deployId); /* * 发起流程,开始分开流程 */ public void test02startFork() / 开始process流程 ProcessInstance processInstance = executionService .startProcessInstanceByKey(“forkjoin“); 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) 第 22 / 45 页 / 流程实例的ID String pid = processInstance.getId(); System.out.println(pid);/ forkjoin.10001 /* * 判断有三个活动的,等待着的节点 */ public void test03EqualActiveNames() ProcessInstance processInstance = executionService .createProcessInstanceQuery().processInstanceId( “forkjoin.10001“).uniqueResult(); Set activeNames = processInstance.findActiveActivityNames(); System.out.println(activeNames); /* * 执行SendEmail节点 */ public void test04ExeSendEmail() ProcessInstance processInstance = executionService .createProcessInstanceQuery().processInstanceId( “forkjoin.10001“).uniqueResult(); String eid = processInstance.findActiveExecutionIn(“sendEmail“).getId(); processInstance = executionService.signalExecutionById(eid); Set activeNames = processInstance.findActiveActivityNames(); 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) 第 23 / 45 页 System.out.println(activeNames); /* * 执行SendMSN节点 */ public void test04ExeSendMSN() ProcessInstance processInstance = executionService .createProcessInstanceQuery().processInstanceId( “forkjoin.10001“).uniqueResult(); String eid = processInstance.findActiveExecutionIn(“sendMSN“).getId(); processInstance = executionService.signalExecutionById(eid); Set activeNames = processInstance.findActiveActivityNames(); System.out.println(activeNames); /* * 执行QQ节点 */ public void test04ExeQQ() ProcessInstance processInstance = executionService .createProcessInstanceQuery().processInstanceId( “forkjoin.10001“).uniqueResult(); String eid = processInstance.findActiveExecutionIn(“QQ“).getId(); processInstance = executionService.signalExecutionById(eid); Set activeNames = processInstance.findActiveActivityNames(); 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) 第 24 / 45 页 System.out.println(activeNames); /* * 执行drive节点 */ public void test05Exedrive() ProcessInstance processInstance = executionService .createProcessInstanceQuery().processInstanceId( “forkjoin.10001“).uniqueResult(); String eid = processInstance.findActiveExecutionIn(“drive“).getId(); processInstance = executionService.signalExecutionById(eid); Set activeNames = processInstance.findActiveActivityNames(); System.out.println(activeNames.size(); System.out.println(processInstance.isEnded(); 执行test02startFork()发起流程的时候,会有3个state节点同时等待着被处理,test04ExeSendEmail()执行的 后,sendEmail的state继续往下执行,因为此时sendMSN的state并未执行,所以join1的join现在处于等待状 态。test04ExeSendMSN()执行后sendMSN的state被执行了,所以这个时候join1不在处于等待状态了,而直 接往下走到了drive。test04ExeQQ()执行后QQ的state继续往下走,和刚才的情况一样,因为drive还处于中断 等待状态,所有流程一直在join2等待中。test05Exedrive()执行后,大功告成,所有节点都已经执行完 毕,流程走向终结。 1.5 JBPM4学习总结之5Fork-join(分支/聚合活动) 第 25 / 45 页 1.6 JBPM4学习总结之6Task之任务 发表时间: 2011-03-05 1.Task之任务分配人(assignee) Task是一般来处理人机交互的活动,也是工作流中最为复杂的节点,许多元素还有子元素。我们先来看指派分配人。 流程图如下: 流程定义XML如下: 通过流程变量#传入指派人的ID,当然owner类必须实现了序列化接口。 1.6 JBPM4学习总结之6Task之任务 第 26 / 45 页 Owner类代码如下 package vo; import java.io.Serializable; public class AssigneeTaskVO implements Serializable private String name; public String getName() return name; public void setName(String name) = name; 测试代码如下: AssigneeTaskVO assigneeTaskVO = new AssigneeTaskVO(); assigneeTaskVO.setName(“liuyan“); Map map = new HashMap(); map.put(“owner“, assigneeTaskVO); / 开始process流程 ProcessInstance processInstance = executionService .startProcessInstanceByKey(“TaskAssignee“, map); / 流程实例的ID String pid = processInstance.getId(); 1.6 JBPM4学习总结之6Task之任务 第 27 / 45 页 System.out.println(pid);/ forkjoin.10001 List taskList = taskService.findPersonalTasks(“liuyan“); for (Task task : taskList) System.out.println(task.getAssignee(); 2.Task之任务分配人与分配组 利用Task的candidate-groups和candidate-users可以指定分配组或者分配人。流程图雷同,我们来看xml定 义如下: 这里制定了一个组名叫做“tibco”。 下面来看测试代码: /* * 使用身份验证接口建立不同的用户、组、组成员 */ public void test02CreateGroup() identityService.createGroup(“tibco“); identityService.createGroup(“vecinfo“); 1.6 JBPM4学习总结之6Task之任务 第 28 / 45 页 identityService.createUser(“liuyan“, “liuyan“, “素还真“); identityService.createUser(“fcl“, “fcl“, “风采铃“); identityService.createMembership(“liuyan“, “tibco“); identityService.createMembership(“liuyan“, “vecinfo“); identityService.createMembership(“fcl“, “vecinfo“); /* * 发起流程 */ public void test03StartTask() / 开始process流程 ProcessInstance processInstance = executionService .startProcessInstanceByKey(“TaskGroup“); / 流程实例的ID String pid = processInstance.getId(); System.out.println(pid);/ forkjoin.10001 /* * 获得指定人的任务列表 */ public void test04GetAssigneeGroupTask() List taskList1 = taskService.findPersonalTasks(“liuyan“); for (Task task : taskList1) System.out.println(task.getAssignee(); List taskList2 = taskService.findPersonalTasks(“fcl“); for (Task task : taskList2) 1.6 JBPM4学习总结之6Task之任务 第 29 / 45 页 System.out.println(task.getAssignee(); List taskList3 = taskService.findGroupTasks(“liuyan“); for (Task task : taskList3) System.out.println(task.getId();/20002 List taskList4 = taskService.findGroupTasks(“fcl“); for (Task task : taskList4) System.out.println(task.getId(); /* * 争抢获取任务 */ public void test05ExeTask() taskService.takeTask(“20002“, “liuyan“); /* * 完成任务 */ public void test06() taskS pleteTask(“20002“); test02CreateGroup()使用身份验证接口创建了组:tibco和vecinfo,创建了用户:liuyan和fcl,并且建立了人 员与组织的关系。tibco只有liuyan、vecinfo有liuyan和fcl。test04GetAssigneeGroupTask()执行结果可以看 到用户liuyan有task,而fcl没有任何task。如果此时多个人都有task预备任务(把流程中的组名换成vecinfo) 的时候,那么就是以争抢的方式来“夺取”该task来执行,谁先抢到,谁就可以执行任务,抢不到的人无法再 争抢。 1.6 JBPM4学习总结之6Task之任务 第 30 / 45 页 1.7 JBPM4学习总结之7Task之任务分配器 发表时间: 2011-03-05 在定义流程模板的时候同样可以定义一个自己的类来做任务分配器的功能,在代码中分配任务执行者。分配器类需要实 现AssignmentHandler(org.jbpm.api.task.AssignmentHandler)接口。 流程图雷同,xml描述如下: 而myHandler.AssignmentHandler代码如下 package myHandler; import org.jbpm.api.model.OpenExecution; import org.jbpm.api.task.Assignable; /* * 任务分配处理器 1.7 JBPM4学习总结之7Task之任务分配器 第 31 / 45 页 * * author liuyan * */ public class AssignmentHandler implements org.jbpm.api.task.AssignmentHandler String name; Override public void assign(Assignable assignable, OpenExecution execution) throws Exception / 设置任务分配者 assignable.setAssignee(name); name的值是被注入的,根据注入的name的值将任务指定给它。 测试代码如下: /* * 指派任务的所有人 */ public void test02AssigneeTask() / 开始process流程 ProcessInstance processInstance = executionService .startProcessInstanceByKey(“TaskAssignmentHandler“); / 流程实例的ID String pid = processInstance.getId(); System.out.println(pid);/ forkjoin.10001 1.7 JBPM4学习总结之7Task之任务分配器 第 32 / 45 页 /* * 按用户名查找 */ public void test03FindTaskes() List taskList = taskService.findPersonalTasks(“liuyan“); for (Task task : taskList) System.out.println(task.getAssignee(); 当查找结果时候,会发现liuyan用户拥有一个待处理的任务。当然在分配器类中还可以自己写更复杂的业务 判断来指定给相关人员处理Task。 1.7 JBPM4学习总结之7Task之任务分配器 第 33 / 45 页 1.8 JBPM4学习总结之8Task之任务泳道和Task任务变量 发表时间: 2011-03-05 这里的泳道类似于UML中的泳道的概念,类似于组(Group)的概念,当一个业务流程需要很多种角色来共同、分时才 能走完时,就需要泳道的概念引入其中。这种操作和分组操作十分相似。 流程图如下: Xml流程图如下: 1.8 JBPM4学习总结之8Task之任务泳道和Task任务变量 第 34 / 45 页 测试代码如下,和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(); 1.8 JBPM4学习总结之8Task之任务泳道和Task任务变量 第 35 / 45 页 System.out.println(pid);/ TaskSwimlane.20001 /* * 获得指定人的任务列表 */ public void test04GetAssigneeGroupTask() List taskList1 = taskService.findPersonalTasks(“liuyan“); for (Task task : taskList1) System.out.println(task.getAssignee(); List taskList2 = taskService.findGroupTasks(“liuyan“); for (Task task : taskList2) System.out.println(task.getId();/20002 /* * 争抢获取任务 */ public void test05ExeTask() taskService.takeTask(“20002“, “liuyan“); /* * 完成任务 */ public void test06() taskS pleteTask(“20002“); 1.8 JBPM4学习总结之8Task之任务泳道和Task任务变量 第 36 / 45 页 这样将liuyan给了tibco组,凡是tibco组的会员都可以争抢、处理这个task。 Task的任务变量 任务变量和流程变量的概念差不多,不过任务变量比流程变量更微观、更具体。通过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论