JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人

时间:2023-03-09 16:45:43
JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人

JBPM入门系列文章:

JBPM4入门——1.jbpm简要介绍

JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件

JBPM4入门——3.JBPM4开发环境的搭建

JBPM4入门——4.封装流程管理的工具类(JbpmUtil)

JBPM4入门——5.流程定义的发布、查询、删除

JBPM4入门——6.流程实例的创建和执行

JBPM4入门——7.等待节点的单条线手动执行

JBPM4入门——8.等待节点的分支执行

JBPM4入门——9.自动节点单线执行

——————————————华丽分割线————————————————

1.画流程图:decision02.jpdl.xml  并指定decision的handler class 的值:指向一个handler类

JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人

当程序走到decision这个节点后。会通过一个处理程序的类来进行业务逻辑的判断:com.test.handler.Demohandler

而不用再用三目运算符来进行复杂的判断、

如果判断条件简单(就两个条件)就直接用三目运算符

如果判断条件通过一个流程变量能判断的话也可以直接在后台中判断。

如果判断条件比较复杂的话就用handler:通过一个处理程序的类来专门做判断流程走向的处理


JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人
 
2.写handler类来处理该流程实例

package com.test.handler;

import org.jbpm.api.jpdl.DecisionHandler;
import org.jbpm.api.model.OpenExecution; public class Demohandler implements DecisionHandler{ @Override
public String decide(OpenExecution execution) {
Integer score = (Integer) execution.getVariable("score");
if(score > 0 && score < 25 ){
return "to 菜鸟";
}else if(score >= 25 && score < 50){
return "to 程序猿";
}else if(score >= 50 && score < 75){
return "to 攻城狮";
}else if(score >= 75 && score < 100){
return "to 牛人";
}
return null;
} }

以上handler会获取score这个流程变量的值。来进行逻辑处理的判断

3.写测试类

package com.test.test;

import java.util.HashMap;
import java.util.Map;
import com.test.util.JbpmOprations;
import com.test.util.JbpmUtil; public class Decision02Test { public static void main(String[] args) {
//发布流程定义
JbpmOprations.deploy("jpdl/decision02.jpdl.xml"); //放置流程变量
Map<String,Object> varMap = new HashMap<String,Object>();
varMap.put("score", 99); //启动该流程实例
JbpmUtil.getExecutionService()
.startProcessInstanceByKey("decision02",varMap);
}
}

以上测试代码执行后:score为99、根据常理会执行到牛人的那条线

执行完后查看后台数据库表的信息:

JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人

  • JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人
  • 大小: 54.5 KB
  • JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人
  • 大小: 95.5 KB
  • JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人
  • 大小: 109.8 KB