本文节选自《疯狂工作流讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.youkuaiyun.com/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.youkuaiyun.com/boxiong86/article/details/78608585
DMN规则匹配表达式
规则引擎中的输入参数与输出结果,可以在inputExpression元素下使用MVEL表达式,这样就意味着在规则匹配以及结果处理上,都使得规则引擎变得很灵活,本小节将以MVEL为基础,讲述Activiti规则引擎在匹配上的原理。
MVEL表达式简介
MVEL是一款基于Java程序的表达式语言,它支持大部分的Java语法,当前版本为2.0。使用MVEL,可以在XML文档中实现获取属性值、进行运算、设置结果等功能,除此之外,还可以对其进行扩展,实现更为复杂的需求。目前很多开源项目都使用了MVEL表达式,例如Drools、Apache Camel等框架。Activiti规则引擎中也使用了MVEL,因此允许在DMN文件使用跟以下代码片断类似的表达式:
person.name == ‘Angus’ && person.age == 30
以上表达式判断person对象的name属性值是否为“Angus”以及age属性值是否为30,表达式的执行结果为true或者false。本小节将先讲述MVEL的简单使用。
执行第一个表达式
下面编写一个最简单的表式,使用MVEL的API进行编译与执行,见代码清单15-13。
代码清单15-13:codes\15\15.5\mvel-test\src\org\crazyit\activiti\FirstTest.java
//进行编译
Serializable compiledExpression = MVEL
.compileExpression("personName == 'Angus'");
//设置执行参数
Map<String, String> params = new HashMap<String, String>();
params.put("personName", "Angus");
//执行表达式并返回结果
Boolean result = MVEL.executeExpression(compiledExpression, params,
Boolean.class);
//控制台输出结果
System.out.println("表达式第一次执行结果:" + result);
//传入其他 参数,结果将为false
params.put("personName", "Paris");