- 浏览: 234839 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 1128java中的float 和double类型会发生精度丢失,为了 ... -
could not read column value from result set: NAME5_1_; 流已被关闭
2013-10-11 15:53 2141最近做流程项目数据库是oracle,获取流程处理人时候出现下面 ... -
Dialect does not support identity key generation
2013-10-10 12:01 2992链接网址:http://kevin12.i ... -
struts2文件下载文件中文名称乱码解决
2013-09-26 14:57 3347链接地址:http://kevin12.iteye.com/b ... -
java 导出excel到客户端(本地)例子 用poi和servlet实现的
2013-08-22 16:05 5688最近做java的web项目,用到了excel导出到客户端(本地 ... -
jbpm4 timer 定时器事件
2013-08-14 11:36 2017最近学习了jbpm4.X的定时器事件,下面是一个简单的测试,上 ... -
jbpm4 timer 定时器配置
2013-08-14 11:20 1566jbpm的定时器支持嵌入到状态节点(State),任务节点(T ... -
jbpm4.4基础知识
2013-08-09 11:24 1319来源:http://blog.163.com/hu ... -
jbpm4会签的学习
2013-08-05 18:01 1083会签,又称会审,也就 ... -
java中的HashSet
2013-08-01 17:48 1352HashSet集合 :不允许有重复的元素并且HashSet中元 ... -
java 中的NaN 和Infinity
2013-07-12 17:58 2920NaN是Not a Number的缩写,即不是一个数字。它不等 ... -
简单的 java 格式化数字用法
2013-07-11 18:42 1587有些时候将后台的数据显示到前台界面上要有一定的格式,比如,保留 ... -
javax.el.ELException: expression factory class not found
2013-06-27 21:43 2438jbpm4web项目部署流程时候出错: 信息: error ... -
<Context path="/files" docBase="D:\upload"></Context>
2013-06-18 11:36 5899发布到tomcat中的项目有 ... -
could not read column value from result set: DBID_; Column 'DBID_' not found.
2013-03-18 12:58 2202最近做项目,将原来项目中关于jbpm4(流程方面)的功能移到一 ... -
java中的时间排序易错点
2013-03-12 11:42 1166最近做流程项目时候发现,流程日志显示的问题: ... -
java解析表达式
2013-03-07 16:21 2034说明:最近做jbpm4流程项目时,在条件节点中用到表达式了,流 ... -
org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbp
2013-02-28 11:18 1989用jbpm4做流程时候将sqlserver数据库改为mysql ... -
mysql数据库遇到:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
2013-02-26 17:31 1697在做web项目时,用到了mysql数据库和ssh架构,登录系统 ...
相关推荐
在jbpm3.2中,流程的每个状态(节点)之间的流转,可以通过定义条件表达式或者采用事件触发的方式,比如在任务完成后触发下一个状态的转换。 jbpm3.2中定义了几个核心的类和接口,例如ActionHandler,这是一个接口...
- **流程引擎**:jbpm的核心是流程引擎,它负责解析流程定义,调度任务,处理流程状态的变迁。 - **持久化机制**:jbpm使用Hibernate作为默认的持久化框架,保证流程实例和历史数据的存储。 - **规则引擎**:jbpm...
本文将深入解析JBPM的数据结构,特别是涉及到的数据库表及其详细字段,以及JBPM如何生成ID。 1. **JBPM_PROCESSDEFINITION** 表: - ID_:此字段是流程模版的唯一标识,用于区分不同的流程定义。 - NAME_:存储...
- 视频教程:"jBPM 4视频教程09.pdf"可能包含了详细的步骤解析和示例代码,而"09.swf"可能是演示流程跟踪的动画。 通过这些知识点的学习,你将能够熟练地运用jBPM设计、部署和管理业务流程,并对流程执行进行有效...
此外,流程图中的连接线表示任务间的顺序关系,可以设置条件表达式来实现条件分支。 流程图设计完成后,jbpm4.4支持导出为XML文件。这个XML文件包含了流程的所有元数据,包括节点位置、连接关系以及流程逻辑。XML...
本文将详细解析JBPM数据库表结构,主要关注与流程配置相关的三张核心表格:JBPM_PROCESSDEFINITION、JBPM_NODE、以及JBPM_TRANSITION。 **1. JBPM_PROCESSDEFINITION 表** JBPM_PROCESSDEFINITION是存储流程模板...
根据提供的文件信息,本文将基于“JBPM工作流开发指南”的标题、描述及部分文本内容进行深入解析,并尝试构建相关的IT知识点。 ### JBPM工作流开发指南 #### 一、JBPM简介 JBPM(JBoss Business Process ...
- `isterminationimplicit_`:布尔值,表示节点终止条件是否默认为隐式,对于理解流程控制流至关重要。 - `startstate_`:外键,指向流程的开始状态,即流程执行的第一个节点。 #### 1.03 JBPM_TRANSITION – ...
4. 在流程实例执行到包含自定义分配逻辑的任务节点时,JBPM会调用你的`AssignmentHandler`来决定实际的Actor。 在上述示例流程中,"复核"和"审批"任务都使用了`ActorsHandel`作为AssignmentHandler,这意味着它们的...
本文将详细解析JBPM数据库中涉及的主要表及其字段含义。 1. **JBPM_PROCESSDEFINITION** 表 - ID_:流程模版的唯一标识,作为主键。 - NAME_:流程模版的名称,用于识别不同的流程。 - VERSION_:流程模版的版本...
本文将深入解析JBPM数据库分析文档中涉及的主要数据库表,这些表是JBPM系统运行的基础,用于存储流程定义、节点、迁移、动作和事件等信息。 1. **JBPM_PROCESSDEFINITION**: - **ID_**: 此字段作为流程模版的唯一...
- **解读:** 此章节深入介绍了JBPM中用于建模的各种构建块,包括流程项目创建、节点类型选择、泳道设计等。 - **重要知识点:** - **流程项目创建:** 如何在Eclipse中创建一个新的JBPM流程项目。 - **节点类型...
例如,一个任务节点可以通过“Sequence Flow”(序列流)连接回自身,并设定相应的条件表达式,只有当条件满足时,流程才会继续循环,否则就结束循环并进行下一步。 jbpm的工作流引擎负责解析bpmn文件,根据定义的...
以下是基于提供的内容对JBPM数据库中关键表格及其字段的详细解析: 1. **JBPM_PROCESSDEFINITION**:这个表存储流程模板的信息。 - **ID_**: 流程模版的唯一标识符。 - **NAME_**: 流程模版的名称。 - **VERSION...
#### 二、JPDL语言解析 JPDL是JBPM中用于定义业务流程的语言。它是一种基于XML的描述语言,可以用来定义流程中的各种元素,如活动(Activity)、决策(Decision)、转换(Transition)等。 - **活动(Activity)**:代表...
6. **表达式**:JBPM支持使用表达式来控制流程的执行逻辑。例如,可以根据某些条件判断来决定流程的分支走向。 7. **异常处理**:在流程定义中,还可以配置异常处理逻辑,以便在发生错误时能够进行适当的处理。 8....
6. **过渡(Transition)**:过渡定义了流程中节点间的流转,可以带有条件表达式,只有满足条件时才会触发。 7. **变量(Variable)**:流程中的数据存储,用于传递信息和控制流程状态。 8. **监听器(Listener)*...