除了优先级也可以用规则流来指定规则执行顺序,如下图是主规则流中的子规则流,其里面执行顺序和逻辑一目了然。
3.5规则编写
Ilog Jrules提供的规则形式有四种:普通规则,决策表,决策树,规则流
3.5.1普通规则
普通规则是最简单的规则形式,形式和编程语言中的IF…ELSE语句是一样的,不同的地方在于,规则引擎的IF…ELSE是不可以嵌套的,且每个规则中只允许有一个IF和一个ELSE,例如:
如果
‘customerInfo’ 的age小于18
那么
设置‘customerInfo’的当前rusult为“REJECT” ;
否则
设置‘customerInfo’的当前rusult为“APPROVE” ;
3.5.2决策表
决策表是以表格的形式展现规则,决策表能罗列出所有的可能情况,并清晰的指出相应的处理方式,而所有可能情况的平面罗列,也能避免在程序语言编写中,因为逻辑上的层层嵌套而产生遗漏,尤其在if-then-else结构中else部分是可选的情况下。
决策表的条件列和操作列是需要初始化的,之后才可以像填表一样填写规则。新建一个决策表之后,选中双击决策表,就会在规则编辑器中打开一个空的决策表,决策表分为条件列和操作列,用颜色深浅区分。
操作过程:
定义条件列:将鼠标放于条件列头右键编辑条件列…在测试下面输入条件,点击应用输入标题(标题即列名)确定。
Rule Studio对决策表的条件的输入的帮助功能支持得不是很好,最好先将条件在普通规则中写好,去掉”如果”关键字,将表达式占位符用<>括起来,例如:‘customerInfo’的age小于 <一个数字>。这样一个条件列就准备好了,在其下面的表格中即可以输入数字类型的参数,输入不符合定义类型的参数,决策表将会报错。
设置好条件的决策表:
同样也可以设置子条件列:
例如:‘customerInfo’的age大于<一个数字>小于 <一个数字>,注意”大于<一个数字>小于 <一个数字>“中间没有”并且”关键字,那么其形成的条件列如下图所示:
“否则”的设置:选中条件单元格右键添加否则。
定义操作列:将鼠标放于操作列头右键编辑操作列…在测试下面输入操作输入标题(标题即列名)确定。
定义操作列和定义条件列大致相同,不同的是在操作中要输入相应的操作,例如:设置 ‘customerInfo’的当前rusult为<一个字符串>。
可以鼠标点中<输入一个操作>,即会出现如下提示:
操作表的上方有一排功能图标,常用的有增加条件列,减少条件列,增加操作列,减少操作列,也可以像excel那样在内容相同的条件下并同单元格。
“禁用”功能:”禁用”功能只能在操作列使用,因为操作列的操作已经指定,如果在操作列的表格中什么也不输入,就会执行参数为空的操作。禁用后则说明也不会执行。图标是。而在条件列中什么也不输入时,规则引擎会忽略掉这个条件的判断。
决策表的局限:在于操作列定义适用于不同参数的相同操作方法,不能不同条件执行不同的方法。
3.5.3决策树
决策树是规则引擎中最灵活的表现形式,任何规则都可以用决策树来表示。
其中菱形表示条件部分,如同决策表的列头部分,可以带参数;箭头表示时间走向,里面是填充好了参数的条件;矩形则为要执行的操作部分,可以执行任意个数的操作。
如上决策表的规则,用决策树表示如下:
3.6 规则常用语法
字符串连接:设置
‘customerInfo’
的当前rusult 为“A” + “B”;
字符串的包含:如果
‘customerInfo’
的cust name 包含
“SHIXIN”
List的size:如果
‘customerInfo’
的 history loan 中的元素数量
小于等于
0
List的循环遍历:
预定义
指定
‘history_loan’
为
一个application_info
来自(
in
)
‘customerInfo’
的 history loan list ;
时间的比较:
如果
‘customerInfo’的 birth day 等于或早于 2012-06-11
以下文章点击率最高
Loading…