`
suhuanzheng7784877
  • 浏览: 702546 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47708
社区版块
存档分类
最新评论

JBPM4学习总结之4——Decision(判断活动)

    博客分类:
  • jbpm
阅读更多

下面咱们来看看正宗的做条件判断的流程是如何工作的。

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.       decisionexpr属性决定流向

decisionexpr属性和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);

StateDecision都可以决定分支的流向,他们的区别就是:1.如果Decision活动没有得到条件的满足,那么流程进行不下去,会发生异常;2.如果State下面的多个活动没有达到满足则默认会走向第一个分支,让整个流程继续走下去。从而可以看出DecisionState具有更加严格的条件判断性。
  • 大小: 15.3 KB
  • 大小: 13.9 KB
分享到:
评论

相关推荐

    jBPM4学习总结

    【jBPM4学习总结】 jBPM,全称为Java Business Process Management,是一个开源的、灵活且可扩展的业务流程管理框架,涵盖了业务流程管理、工作流和服务协作等多个领域。自2004年10月加入JBoss组织后,jBPM逐渐成为...

    jBPM开发资料 jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

    相当不错的资料 jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

    JBPM4学习经验总结

    JBPM4学习经验总结 JBPM4是Java Business Process Management(业务流程管理)的缩写,它是一个开源的、灵活的、易扩展的可执行流程语言框架。JBPM4学习经验总结包括了JBPM4的概念、配置JBPM4开发环境、JBPM默认的...

    JBPM4 学习使用总结

    **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采购申请系统——08_JBPM流程节点.7z JBPM...

    jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

    - `config`:jBPM、Hibernate和log4j的配置文件 - `db`:不同数据库的建表SQL语句 - `lib`:jBPM所需依赖的第三方库 - `doc`:API文档和用户指南 - `designer`:包含Eclipse插件,用于辅助jBPM开发 - `server`:预...

    JBPM4 学习资料

    整理的别人JBPM4 学习资料, 工作流学习文档

    JBPM采购申请系统——06_JBPM版本控制及Token对象.7z

    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数据库.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 JBPM采购申请系统——02_Eclipse与JBPM.7z ...

    JBPM4之State、Decision 、Task活动.doc

    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采购申请系统——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采购申请系统——12_JBPM异步(一).7z JBPM...

    JBPM采购申请系统——07_JBPM中的脚本语言.7z

    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_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差异(一).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差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二)...

    Jbpm4学习文档chm

    **JBPM4学习文档CHM**是一份专为学习和理解JBPM4设计的工作流引擎技术文档,适合那些对工作流框架感兴趣的Java开发者,特别是希望将JBPM与Spring框架集成的人员。JBPM是一个开源的工作流程管理系统,它提供了一整套...

    JBPM采购申请系统——19_JBPM采购申请系统(三).7z

    JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请...

Global site tag (gtag.js) - Google Analytics