jbpm学习五
来源:互联网 发布:淘宝司法拍卖车辆过户 编辑:程序博客网 时间:2024/05/16 09:17
4.decision节点(判断节点):
主要用于程序判断分流,循环,在jpdl中有两种用法:
第一种用法:基于expr表达式判断
流程发布,启动我不必多说,启动后jbpm4_task表中如下图所示:
执行下面代码,使其向后流转
第二种用法:基于代码DecisionHandlar判断
同上面相同的流程,第二种用法流程图xml配置文件如下所示:
一般来说,Handler写法比较灵活,expr写法比较简单。
主要用于程序判断分流,循环,在jpdl中有两种用法:
第一种用法:基于expr表达式判断
<?xml version="1.0" encoding="UTF-8"?><process name="demo4_decision1" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="235,12,48,48"> <transition name="to 逛故宫" to="逛故宫" g="-59,-17"/> </start> <end name="end1" g="247,322,48,48"/> <task name="逛故宫" g="223,75,92,52"> <transition name="to exclusive1" to="exclusive1" g="-83,-17"/> </task> <!-- JBPM juel表达式 --> <decision name="exclusive1" g="241,148,48,48"> <transition name="to 学生半票" to="学生半票" g="-71,-17"> <!-- user代表JBPM流程变量 --> <condition expr="#{user=='学生'}"/> </transition> <transition name="to 老年人和军人免费" to="老年人和军人免费" g="-119,-17"> <condition expr="#{user=='老年人'||user=='军人'}"/> </transition> <!-- 不写条件,前面条件都不满足,执行这个transition --> <transition name="to 普通人正常售票" to="普通人正常售票" g="-107,-17"> </transition> </decision> <task name="学生半票" g="81,213,92,52"> <transition name="to end1" to="end1" g="-47,-17"/> </task> <task name="老年人和军人免费" g="223,226,120,52"> <transition name="to end1" to="end1" g="-47,-17"/> </task> <task name="普通人正常售票" g="379,214,130,54"> <transition name="to end1" to="end1" g="-47,-17"/> </task></process>
以上是流程图和该流程图对应的xml配置文件,当从‘逛故宫’节点向下走到name=‘exclusivel’这层节点时,出现了desition判断,会进入满足condition条件判断的节点,
如果都不满足,则进入没有配置condition条件的节点(例如上面,当条件既不满足‘学生’也不满足‘老人’或者‘军人’时,就会进入没有配置condition的‘普通人正常售票’节点),如果所有的节点都配置了condition条件,但是都不满足,程序报错。流程发布,启动我不必多说,启动后jbpm4_task表中如下图所示:
执行下面代码,使其向后流转
@Test// 逛故宫public void demo3() {// 1、 获得流程引擎ProcessEngine processEngine = new Configuration().buildProcessEngine();// 2、获得ServiceTaskService taskService = processEngine.getTaskService();// 3、保存变量HashMap<String, Object> variables = new HashMap<String, Object>();variables.put("user", "军人");taskService.setVariables("10002", variables);// 完成任务taskService.completeTask("10002");}可以看到,我向user中传入的是‘军人’,所以应该向后流转到‘老人和军人免费’节点,此时jbpm4_task表中记录如下所示:
第二种用法:基于代码DecisionHandlar判断
同上面相同的流程,第二种用法流程图xml配置文件如下所示:
<?xml version="1.0" encoding="UTF-8"?><process name="demo4_decision2" xmlns="http://jbpm.org/4.4/jpdl"> <start g="235,12,48,48" name="start1"> <transition g="-59,-17" name="to 逛故宫" to="逛故宫"/> </start> <end g="247,322,48,48" name="end1"/> <task g="223,75,92,52" name="逛故宫"> <transition g="-83,-17" name="to exclusive1" to="exclusive1"/> </task> <!-- 基于程序控制 判断 --> <decision g="241,148,48,48" name="exclusive1"> <handler class="learn.MyDecisionHandler"/> <transition g="-71,-17" name="to 学生半票" to="学生半票" /> <transition g="-119,-17" name="to 老年人和军人免费" to="老年人和军人免费" /> <transition g="-107,-17" name="to 普通人正常售票" to="普通人正常售票" /> </decision> <task g="81,213,92,52" name="学生半票"> <transition g="-47,-17" name="to end1" to="end1"/> </task> <task g="223,226,120,52" name="老年人和军人免费"> <transition g="-47,-17" name="to end1" to="end1"/> </task> <task g="386,216,130,54" name="普通人正常售票"> <transition g="-47,-17" name="to end1" to="end1"/> </task></process>可以看到同第一种不同的是,decision判断节点的条件没有分别判断,而是通过learn.MyDecisionHandler这个类来获得后分别对应到下面不同的节点上。
import org.jbpm.api.jpdl.DecisionHandler;import org.jbpm.api.model.OpenExecution;/** * 作为判断执行代码,必须实现DesicionHandler接口 * * @author seawind * */public class MyDecisionHandler implements DecisionHandler {@Overridepublic String decide(OpenExecution openExecution) {// openExecution 用于获取流程变量String user = (String) openExecution.getVariable("user");if ("学生".equals(user)) {return "to 学生半票"; // 返回transition节点name属性} else if ("老年人".equals(user) || "军人".equals(user)) {return "to 老年人和军人免费";} else {return "to 普通人正常售票";}}}向后流转执行代码和第一种方式一样,只不过配置文件从MyDecisionHandler这个类中取得handler条件,在分别判断节点是否符合条件。
一般来说,Handler写法比较灵活,expr写法比较简单。
0 0
- jbpm学习五
- JBPM学习日志(五)
- JBPM学习(五):流程变量
- JBPM--五
- jBPM学习(五)----面向图的程序设计
- jBPM-jPDL学习笔记—框架设计简介(五)
- jBPM-jPDL学习笔记—框架设计简介(五)
- 学习JBPM
- jbpm学习
- jBPM学习
- Jbpm学习
- jbpm学习
- JBPM案例详解(五)
- [jbpm]jBPM(五): 部署jBPM所用表到数据库_2
- jbpm学习笔记(五)--请假流程的设计(2)
- jBPM学习(四)----体验jbpm
- jBPM学习(七)----jBPM相关概念
- JBPM学习---JBPM流程的部署
- 写好Java代码的30条经验总结
- 【HSA】Heterogeneous Systems Architecture
- nyoj277车牌号
- 开始iOS 7中自动布局教程(二)
- JAVA String.format 方法使用介绍
- jbpm学习五
- js正则表达式
- Spring 事务隔离级别
- 子系统设计和FishiGUI的子系统设计
- 如何解决ewebeditor上传图片200k限制??超级精准
- POJ 2486--Apple Tree
- eclipse 无法运行main函数类的解决办法
- 快速获取zip的文件目录
- git学习笔记(1)-git基础