博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jbpm(5)---decision节点的expr方式和handler方式
阅读量:4089 次
发布时间:2019-05-25

本文共 3338 字,大约阅读时间需要 11 分钟。

流程图如下:

问题:填写请假单后,如果请假天数大于3天则经理审批,如果小于3天则主管即可审批。填写请假信息后,下一步节点该如何走,可以通过decision分支节点决定

而decision决策分支节点有两种方式,一种是配置expr表达式方式是,一种是指定Handler类即指定一个java类进行处理。

方式1:通过expr表达式方式

注:表达式的结果不是true或false,而是下一个输出节点的name,如上图的to 主管审批或to 经理审批

配置方式如下:

1.1、发布流程定义

package com.cn.test;import com.cn.util.JbpmUtil;/** * 发布流程定义 * 流程定义processDefinition,流程定义是规则,规则就是没有数据的描述 *  * */public class DeployProcessDefinition {	public static void main(String[] args) {		//发布流程定义		JbpmUtil.delopy("jpdl/qingJia2.jpdl.xml");			}}
1.2、启动流程实例

package com.cn.test;import org.jbpm.api.ExecutionService;import com.cn.util.JbpmUtil;/** * 启动流程实例以及流程流转 * */public class startProcessInstance2 {	public static void main(String[] args) {		ExecutionService executionService=JbpmUtil.getExecutionService();		//1.启动流程实例		executionService.startProcessInstanceById("qingJia2-2");	}}
此时流程节点处于:填写请假单节点

1.3、传递流程变量,供决策分支节点decision进行判断

package com.cn.test;import java.util.HashMap;import java.util.Map;import org.jbpm.api.ExecutionService;import com.cn.util.JbpmUtil;/** * 启动流程实例以及流程流转 * */public class startProcessInstance2 {	public static void main(String[] args) {		ExecutionService executionService=JbpmUtil.getExecutionService();		//1.启动流程实例		//executionService.startProcessInstanceById("qingJia2-2");		Map
map=new HashMap
(); map.put("days", 5); //2.流程流转到decision节点 executionService.signalExecutionById("qingJia2.120001", map); }}
此时,根据decision的expr:#{days>5?'to 经理审批':'to 主管审批'}即传递的流程局部变量days大于5天,则走经理审批,小于等于5天,则走主管审批节点。
查看数据库表结果,显示
 

方式2:通过decision的handler方式:

上面是通过decision的expr方式,那么如果是下面的这个流程图呢,用三元运算符怎么写疑问,太复杂了,所有实际开发中大多采用handler方式进行。

1、在src下新建包com.cn.handler,并创建类MyHandler,代码如下:

package com.cn.handler;import org.jbpm.api.jpdl.DecisionHandler;import org.jbpm.api.model.OpenExecution;public class MyHandler implements DecisionHandler{	/**	 * 	 */	private static final long serialVersionUID = 2921491957122619758L;	/**	 * 返回值:当前输出路径的名称	 * execution参数:当前正在执行的流程实例	 * */	@Override	public String decide(OpenExecution execution) {		Integer score=(Integer) execution.getVariable("score");		if(score>=90){			return "to 优秀";		}else if(score<90 && score>=70){			return "to 中等";		}else if(score<70 && score>=60){			return "to 及格";		}else{			return "to 不及格";		}	}} 2、在流程图decision节点配置Handler,如下图: 3、发布流程定义 package com.cn.test;import com.cn.util.JbpmUtil;/** * 发布流程定义 * 流程定义processDefinition,流程定义是规则,规则就是没有数据的描述 *  * */public class DeployProcessDefinition {	public static void main(String[] args) {		//发布流程定义		JbpmUtil.delopy("jpdl/kaoshi.jpdl.xml");			}} 4、启动流程实例,进行考试 package com.cn.test;import com.cn.util.JbpmUtil;/** * 发布流程定义 * 流程定义processDefinition,流程定义是规则,规则就是没有数据的描述 *  * */public class DeployProcessDefinition {	public static void main(String[] args) {		//发布流程定义		JbpmUtil.delopy("jpdl/kaoshi.jpdl.xml");			}} 会在jbpm4_execution中产生一条数据  5、传递流程局部变量 package com.cn.test;import java.util.HashMap;import java.util.Map;import org.jbpm.api.ExecutionService;import com.cn.util.JbpmUtil;/** * 启动流程实例以及流程流转 * */public class startProcessInstance2 {	public static void main(String[] args) {		ExecutionService executionService=JbpmUtil.getExecutionService();		//1.启动流程实例		//executionService.startProcessInstanceById("kaoshi-1");		Map
map=new HashMap
(); map.put("score", 85); executionService.signalExecutionById("kaoshi.150001", map); }} 运行完后,85分会进入中等,查看数据库表如下:
你可能感兴趣的文章
Android 解决TextView设置文本和富文本SpannableString自动换行留空白问题
查看>>
Android自定义View实现商品评价星星评分控件
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
postgresql减少wal日志生成量的方法
查看>>
swift中单例的创建及销毁
查看>>
获取App Store中App的ipa包
查看>>
UIButton添加block点击事件
查看>>
利用runtime给类别添加属性
查看>>
本地推送
查看>>
UIImage存为本地文件与UIImage转换为NSData
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>