- 浏览: 230787 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lwb314:
你的这个是创建的临时的hive表,数据也是通过文件录入进去的, ...
Spark SQL操作Hive数据库 -
yixiaoqi2010:
你好 我的提交上去 总是报错,找不到hive表,可能是哪里 ...
Spark SQL操作Hive数据库 -
bo_hai:
target jvm版本也要选择正确。不能选择太高。2.10对 ...
eclipse开发spark程序配置本地运行
说明:最近做jbpm4流程项目时,在条件节点中用到表达式了,流程执行到条件节点时,根据条件节点去判断下一步要走哪一个节点,条件中的表达式就需要解析了。
首先说一下流程执行的过程:在条件节点执行之前,会将界面中用来和表达式中比较的值存放到流程变量中(也就是说这个值就代表条件节点表达式中的变量)。在执行到条件节点时候,会根据调节节点中的表达式先解析出变量,再根据变量名称和流程id获取到之前存放到流程变量中的值,根据变量和值通过IK-Expression提供的解析方法解析出结果。
注意:要运用IK-Expression必须引入架包IKExpression2.0.jar。
代码如下:
首先说一下流程执行的过程:在条件节点执行之前,会将界面中用来和表达式中比较的值存放到流程变量中(也就是说这个值就代表条件节点表达式中的变量)。在执行到条件节点时候,会根据调节节点中的表达式先解析出变量,再根据变量名称和流程id获取到之前存放到流程变量中的值,根据变量和值通过IK-Expression提供的解析方法解析出结果。
注意:要运用IK-Expression必须引入架包IKExpression2.0.jar。
代码如下:
package com.sense.workflow.util; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; import org.jbpm.api.ExecutionService; import org.wltea.expression.ExpressionEvaluator; import org.wltea.expression.datameta.Variable; import com.sense.workflow.core.WorkFlowTemplate; public class ConditionExpressionUtil { /***************************IK Expression 表达式解析*****************************************/ /** * Description: 解析jbpm4条件节点中的表达式 * @param expression 表达式 * @param template 流程目标 * @param executionId 流程eid * @return List<变量> */ public static Boolean evaluate3(String expression,WorkFlowTemplate template,String executionId){ ExecutionService es = template.getExecutionService(); //将变量放到流程变量表中(这里只用来测试) // Map<String,Object> var= new HashMap<String, Object>(); // var.put("aa", 20); // var.put("bb", "true"); // es.setVariables(executionId, var); expression = expression.replaceAll(" ", "");//将表达式中所有空格去掉 //从表达式中获取变量名称 List<String> varList = expressionAnalysis(expression); List<Variable> variables = new ArrayList<Variable>(); for (String str : varList) { System.out.println(str); Object value=template.getExecutionService().getVariable(executionId, str); variables.add(Variable.createVariable(str, value)); } //解析表达式 Object b = ExpressionEvaluator.evaluate(expression, variables); return Boolean.valueOf(b.toString()); } /** * Description: 将公式中的参数提取出来 * @param expression 公式 * @return List<变量> */ public static List<String> expressionAnalysis(String expression){ String[] variableArrayTemp= new String[100]; List<String> variableArray= new ArrayList<String>(); //先将表达式中的符号用逗号替换 expression=expression.replaceAll("[+]", ","); expression=expression.replaceAll("[-]", ","); expression=expression.replaceAll("[*]", ","); expression=expression.replaceAll("[/]", ","); expression=expression.replaceAll("[(]", ","); expression=expression.replaceAll("[)]", ","); expression=expression.replaceAll("[>]", ","); expression=expression.replaceAll("[<]", ","); expression=expression.replaceAll("[==]", ","); expression=expression.replaceAll("[=]", ","); expression=expression.replaceAll("[!]", ","); expression=expression.replaceAll("[|]", ","); expression=expression.replaceAll("[&]", ","); expression=expression.replaceAll("[\"]", ","); variableArrayTemp= expression.split(",");//以逗号分割 for (int i = 0; i < variableArrayTemp.length; i++) { //保存以字母开头,并且不等于true和false的 String temp = variableArrayTemp[i]; if(startsWithLetter(temp)){ if(!"true".equals(temp)&&!"false".equals(temp)){ variableArray.add(temp); } } } //去除变量相等的 Set<String[]> vars = new HashSet<String[]>(); for(Iterator<String> iter = variableArray.iterator();iter.hasNext();){ String temp = iter.next(); boolean b = false; for(String[] s:vars){ if(s[0].equals(temp)){ b = true; break; } } if(b){ iter.remove(); }else{ vars.add(new String[]{temp}); } } return variableArray; } /** * Description: 是否以字母打头 * @param s * @return */ private static boolean startsWithLetter(String s) { return Pattern.compile("^[A-Za-z]").matcher(s).find(); } public static void main(String[] args) { // String expression=" tk == \"abc\" && kt == \"abc\" || tt != \"abc\" "; // boolean b=evaluate2(expression, null, null); // System.out.println(b); // (aa<-40||aa>40)|| bb=="true" List<String> varList = expressionAnalysis(""); for (String string : varList) { System.out.println(string); } } }
发表评论
-
BigDecimal实现double精度计算
2014-01-07 16:08 1068java中的float 和double类型会发生精度丢失,为了 ... -
could not read column value from result set: NAME5_1_; 流已被关闭
2013-10-11 15:53 2074最近做流程项目数据库是oracle,获取流程处理人时候出现下面 ... -
Dialect does not support identity key generation
2013-10-10 12:01 2914链接网址:http://kevin12.i ... -
struts2文件下载文件中文名称乱码解决
2013-09-26 14:57 3285链接地址:http://kevin12.iteye.com/b ... -
java 导出excel到客户端(本地)例子 用poi和servlet实现的
2013-08-22 16:05 5631最近做java的web项目,用到了excel导出到客户端(本地 ... -
jbpm4 timer 定时器事件
2013-08-14 11:36 1975最近学习了jbpm4.X的定时器事件,下面是一个简单的测试,上 ... -
jbpm4 timer 定时器配置
2013-08-14 11:20 1529jbpm的定时器支持嵌入到状态节点(State),任务节点(T ... -
jbpm4.4基础知识
2013-08-09 11:24 1282来源:http://blog.163.com/hu ... -
jbpm4会签的学习
2013-08-05 18:01 1056会签,又称会审,也就 ... -
java中的HashSet
2013-08-01 17:48 1319HashSet集合 :不允许有重复的元素并且HashSet中元 ... -
java 中的NaN 和Infinity
2013-07-12 17:58 2831NaN是Not a Number的缩写,即不是一个数字。它不等 ... -
简单的 java 格式化数字用法
2013-07-11 18:42 1550有些时候将后台的数据显示到前台界面上要有一定的格式,比如,保留 ... -
javax.el.ELException: expression factory class not found
2013-06-27 21:43 2394jbpm4web项目部署流程时候出错: 信息: error ... -
<Context path="/files" docBase="D:\upload"></Context>
2013-06-18 11:36 5869发布到tomcat中的项目有 ... -
could not read column value from result set: DBID_; Column 'DBID_' not found.
2013-03-18 12:58 2146最近做项目,将原来项目中关于jbpm4(流程方面)的功能移到一 ... -
java中的时间排序易错点
2013-03-12 11:42 1132最近做流程项目时候发现,流程日志显示的问题: ... -
java解析表达式
2013-03-07 16:21 1987说明:最近做jbpm4流程项目时,在条件节点中用到表达式了,流 ... -
org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbp
2013-02-28 11:18 1938用jbpm4做流程时候将sqlserver数据库改为mysql ... -
mysql数据库遇到:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
2013-02-26 17:31 1626在做web项目时,用到了mysql数据库和ssh架构,登录系统 ...
相关推荐
jBPM4的PVM实现解析
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
IK Expression最初诞生的原因是为了能增强工作流引擎,如jBPM等对流程配置的灵活度。使其能在流程运行期获得同配置期一样灵活地对执行逻辑条件进行变更。经过扩展后的IK Expression还可以适用于各种常规业务系统的...
jbpm4源码jbpm4源码jbpm4源码
IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.0.5不依赖于任何第三方的java库。它做为一...
5.1表JBPM4_DEPLOYMENT 7 5.2 表JBPM4_DEPLOYPROP 7 5.3 表JBPM4_EXECUTION 8 5.4 表JBPM4_HIST_ACTINST 9 5.5 表JBPM4_HIST_DETAIL 9 5.6 表JBPM4_HIST_PROCINST 10 5.7 表JBPM4_HIST_TASK 11 5.8 表JBPM4_HIST_VAR...
jboss jbpm4最新开发包 采用了pvm框架
java源代码分包详解JBPM4 java源代码分包详解JBPM4
jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版
jbpm4。4中表之间的关系,jbpm4 表关系
jBPM4工作流应用开发指南 胡奇写的,十分赞!!
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。
这是jbpm4的安装配置介绍文件,详细的介绍了jbpm4与eclipse的集成
,jbpm4的源码,分支,会签等一些中国特色建立下载《jBPM4工作流应用开发指南.pdf》这本书
jbpm4新手教程
jBPM学习总结,涵盖jBPM4的各个基础知识点,及实例解析。
JBPM4 开发文档 实例 流程 JBPM4 开发文档 实例 流程 JBPM4 开发文档 实例 流程
整理的别人JBPM4 学习资料, 工作流学习文档
风中叶老师讲的JBPM4与Spring整合例子代码 JBPM4 Spring OA工作流系统
JBPM4 表结构概要说明 操作信息变化 各字段详细说明