




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JBPM4之重要节点说明一、start节点start表示了一个流程在哪里开始执行。在一个流程至少得有一个start节点。一个start节点中必须有一个外流迁移(transition)并且这个转移在流程开始时就会执行。到目前为止,一个流程有且只有一个start节点。二、state节点state表示了一个等待状态。流程的执行将会等到有通过API提供的外力触发。state节点除了常用的节点内容(name, transition)外没有其他的属性或元素。2.1、state序列如以下实例,展现了一个通过transition链接的state序列此序列的代码如下:1. 2.3. 4. 5. 6.7. 8.
2、9. 10.11. 12. 13. 14.15. 16.17. 你可以通过以下方式启动执行:1. ProcessInstance processInstance = 2. executionService.startProcessInstanceByKey(StateSequence); 当你执行启动此流程后,此流程将会停留在a节点上,可以通过方法signalExecution提供一个外力使其继续执行。如下代码所示:1. Execution executionInA = processInstance.findActiveExecutionIn(a); 2. assertNotNull(exe
3、cutionInA); 3.4. processInstance = executionService.signalExecutionById(executionInA.getId(); 5. Execution executionInB = processInstance.findActiveExecutionIn(b); 6. assertNotNull(executionInB); 7.8. processInstance = executionService.signalExecutionById(executionInB.getId(); 9. Execution execution
4、InC = processInstance.findActiveExecutionIn(c); 10. assertNotNull(executionInC); 2.2、选择方式state下面这个例子将向你展现state如何被用为提供一个选择外力来决定流程的走向。对应的代码如下所示:1. 2.3. 4. 5. 6.7. 8. 9. 10. 11.12. 13.14. 15.16. 我们可以通过以下的方法启动这个流程ProcessInstance processInstance = executionService .startProcessInstanceByKey(StateChoice);
5、 现在,我们假设流程已经执行到了wait for response节点。此流程将会在这里等待直到一个外力触发此流程。由于此state节点有两个流出转移,在外力触发中给的标志名称将会匹配外流转移中的名称来确定流程的流向。所以当我们提供accept时,如下:String executionId = processInstance 1. .findActiveExecutionIn(wait for response) 2. .getId(); 3.4. processInstance = executionService.signalExecutionById(executionId, accep
6、t); 5.6. assertTrue(processInstance.isActive(submit document); 流程将通过名称为accept的外流转移继续执行。同样当我们提供一个名称为reject的触发时,流程会通过名称为reject的外流转移继续执行。三、 decision节点decision节点是一个路径多重选择。也为作为一个决定。一个decision节点有多个流程转移并且当一个流程执行到此节点时,将会自动评估来决定执行哪一个流程转移路线。一个decision节点可以通过以下三种方式来配置:3.1、条件decision。此种方式时在decision节点的transition元
7、素中的conditions元素来判断执行那个一个transition。流程会执行第一个判断结果为true或者没有配置condition元素的transition。condition元素的属性实例:实例代码: 1. 2.3. 4. 5. 6.7. 8. 9. 10. 11. 12. 13. 14. 15. 16.17. 18.19. 20.21. 22.23. 通过以下代码启动流程实例后:1. Map variables = new HashMap(); 2. variables.put(content, good); 3. ProcessInstance processInstance = 4
8、. executionService.startProcessInstanceByKey(DecisionConditions, variables); submit document节点将会执行。四、task节点4.1、 任务分配给单个用户org.jbpm.examples.task.assignee的例子修改一下其中的jpdl文件,代码如下: 部署完流程后,启动流程实例并分配给owner=HanDou的用户:Map variables = new HashMap(); variables.put(owner, HanDou);ProcessInstance processInstance
9、= executionService.startProcessInstanceByKey(TaskAssignee, variables);通过流程实例ID,查找用户为HanDou的任务:String pid = processInstance.getId();List taskList = taskService.findPersonalTasks(HanDou);用户执行当前任务:taskSpleteTask(taskList.get(0).getId();4.2、任务处理器org.jbpm.examples.task.assignmenthandler的例子,jpdl文件源码如下:流程发
10、布启动流程实例后,节点流转到review,调用org.jbpm.examples.task.assignmenthandler.AssignTask类的assign()方法,将传入的assignee的值HanDou作为任务的候选人分配,类AssignTask必须实现AssignmentHandler接口,重写assign(Assignable assignable, OpenExecution execution)方法。其源码如下:public class AssignTask implements AssignmentHandler private static final long ser
11、ialVersionUID = 1L;String assignee;public void assign(Assignable assignable, OpenExecution execution) assignable.setAssignee(assignee);4.3、任务分配给群组用户org.jbpm.examples.task.candidates包中的例子:在流程实例发布时通过org.jbpm.api. IdentityService对象创建群组与用户之间的关系,如测试用例中:/创建一个sales-dept组String dept = identityService.create
12、Group(sales-dept);/创建一个用户,参数为(userId,givenName,familyName)identityService.createUser(johndoe, John, Doe);/创建一个用户与群组间关系,参数为(userId,groupId,role)identityService.createMembership(johndoe, dept, developer);测试类的测试方法注释:public void testGroupCandidateAssignment() /启动流程TaskCandidatesProcessInstance processIn
13、stance = executionService.startProcessInstanceByKey(TaskCandidates);/ 查询群组任务 ,调用方法findGroupTasks( String userId)List taskList = taskService.findGroupTasks(johndoe);Task task = taskList.get(0);/ 将任务委派给johndoe,成为johndoe的assigned任务taskService.takeTask(task.getId(), johndoe);/ 处理完毕后群组任务为空 taskList = tas
14、kService.findGroupTasks(johndoe);assertEquals(0, taskList.size();/查询 johndoe的assigned任务taskList = taskService.findPersonalTasks(johndoe);task = taskList.get(0);/ johndoe 处理任务taskSpleteTask(task.getId();注意点:当群组任务在没有调用taskService# takeTask方法之前,调用taskService#findGroupTasks(userId)是查询不到代办任务的,只有将任务委派给某个用
15、户之后这个用户才可处理任务。4.4、任务分配之泳道以3)的jpdl文件为例,添加泳道的定义(加粗斜体部分),详细如下:task name=review swimlane=sales representative g=96,16,127,52当流程定义在jpdl文件定义完毕后,其处理过程同3)的Java类的调用和处理。4.5、任务分配并传递参数在任务分配的同时,实际需求中往往需要添加其他的参数,比如和任务相关的业务数据,可以通过流程实例ID与业务数据的某标识ID关联,业务数据存入业务数据表,jbpm数据存入jbpm数据表中;与流程相关的参数,还可以通过jBPM的API设置参数。在org.jbpm.examples.task.variables.包中的测试用例TaskVariablesTest类中有:Map variables = new HashMap();variables.put(category, big);variables.put(dollars, 100000);Execution execution = executionService.startProcess
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玻璃光学性能与应用考核试卷
- 纸艺工艺品的商业潜力挖掘考核试卷
- 纺织品进出口业务流程考核试卷
- 破产法与重整重组法律实务考核试卷
- 新型材料项目融资渠道探讨考核试卷
- 电机调速与变频技术实操考核试卷
- 离婚协议子女抚养权变更程序合同
- 跨界电商节活动期间消费者权益保障与风控合同
- 岩土工程地质勘察与施工监理劳务合同
- 医疗保险补充疾病预防协议
- 舰艇损害管制与舰艇损害管制训练
- 围墙拆除重建施工方案
- 2024贵州中考物理二轮中考题型研究 题型八 新情景探究实验专项训练 (含答案)
- 2023年高考历史真题新高考福建卷试题含答案解析
- 四川省绵阳市东辰学校2023-2024学年七年级下学期3月月考语文卷
- DZ/T 0430-2023 固体矿产资源储量核实报告编写规范(正式版)
- 禁止编入列车的机车车辆讲解
- 过期妊娠课件
- 【农业技术推广探究文献综述2300字】
- 新生儿肠胀气课件
- 加油站清明节节前安全教育培训
评论
0/150
提交评论