下面咱们来看看正宗的做条件判断的流程是如何工作的。
1. transition下面的condition属性决定流向
流程图如下
Xml描述如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="decision" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="200,38,48,48">
<transition name="to exclusive1" to="exclusive1" g="-79,-22" />
</start>
<decision name="exclusive1" g="204,141,91,48">
<transition name="accecpt" to="ok" g="67,164:-56,-22">
<condition expr="#{con=='good'}" />
</transition>
<transition name="refect" to="refect" g="-56,-22">
<condition expr="#{con=='bad'}" />
</transition>
<transition name="toend" to="toend" g="417,167:-56,-22" />
</decision>
<state name="ok" g="25,236,92,52" />
<state name="refect" g="190,252,92,52" />
<state name="toend" g="358,241,92,52" />
</process>
|
可以看出每一个transition通过condition中的EL表达式来决定应该转向哪个分支。
测试代码如下:
// 判断条件
Map<String, Object> con = new HashMap<String, Object>();
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差不多,无非是少定义几行代码。如下:
<decision expr=”#{con}” name=”start”>
|
测试代码和上面一样,结果亦同。
2. 单独的Java类决定流向
单独使用Java类来处理复杂流程的流向,则该处理类必须实现DecisionHandler接口(org.jbpm.api.jpdl.DecisionHandler)。
先看流程:
大致和第一个差不多
流程xml定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="decisionHandler" xmlns="http://jbpm.org/4.4/jpdl">
<start name="start1" g="201,40,48,48">
<transition name="to exclusive1" to="exclusive1" g="-79,-22" />
</start>
<state name="ok" g="26,234,92,52" />
<state name="delete" g="181,244,92,52" />
<state name="end" g="350,230,92,52" />
<decision name="exclusive1" g="200,133,48,48">
<handler class="myHandler.MyDecisionHandler" />
<transition name="took" to="ok" g="73,159:-56,-22" />
<transition name="todelete" to="delete" g="-56,-22" />
<transition name="toend" to="end" g="396,159:-56,-22" />
</decision>
</process>
|
在流程定义中加入了一个流程处理类MyDecisionHandler,自己实现decide方法。
该类代码如下:
package myHandler;
import org.jbpm.api.jpdl.DecisionHandler;
import org.jbpm.api.model.OpenExecution;
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<String,Object> con = new HashMap<String,Object>();
DesicionVO desicionVO = new DesicionVO();
desicionVO.setName("took");
con.put("con", desicionVO);
// 开始process流程
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具有更加严格的条件判断性。
- 大小: 15.3 KB
- 大小: 13.9 KB
分享到:
相关推荐
【jBPM4学习总结】 jBPM,全称为Java Business Process Management,是一个开源的、灵活且可扩展的业务流程管理框架,涵盖了业务流程管理、工作流和服务协作等多个领域。自2004年10月加入JBoss组织后,jBPM逐渐成为...
相当不错的资料 jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL
JBPM4学习经验总结 JBPM4是Java Business Process Management(业务流程管理)的缩写,它是一个开源的、灵活的、易扩展的可执行流程语言框架。JBPM4学习经验总结包括了JBPM4的概念、配置JBPM4开发环境、JBPM默认的...
**JBPM4 学习使用总结** JBPM4(Java Business Process Management)是Jboss公司推出的一款开源的工作流管理系统,它提供了完整的业务流程自动化解决方案,包括流程设计、部署、执行、监控以及管理等功能。在深入...
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
- `config`:jBPM、Hibernate和log4j的配置文件 - `db`:不同数据库的建表SQL语句 - `lib`:jBPM所需依赖的第三方库 - `doc`:API文档和用户指南 - `designer`:包含Eclipse插件,用于辅助jBPM开发 - `server`:预...
整理的别人JBPM4 学习资料, 工作流学习文档
JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...
JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM...
JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z ...
JBPM4 之 State、Decision、Task 活动详解 JBPM4 是一种业务流程管理系统,用于自动化和管理复杂的业务流程。在 JBPM4 中,有三种基本活动:State、Decision 和 Task,这三种活动是构建复杂业务流程的基础。本文将...
JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM...
JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM...
JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM...
JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_...
JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一)...
JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二)...
**JBPM4学习文档CHM**是一份专为学习和理解JBPM4设计的工作流引擎技术文档,适合那些对工作流框架感兴趣的Java开发者,特别是希望将JBPM与Spring框架集成的人员。JBPM是一个开源的工作流程管理系统,它提供了一整套...
JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请...