在前面我们已经学习了Urule Pro规则引擎的设计工具的使用了,那么我们现在来深入的了解一下Urule Pro在设计的过程中的一些使用技巧,让我们在规则设计时更高效,更便捷。
1.文件源码
在设计规则文件的时候我们可以查看文件源码
并且文件的源码还可以编辑保存的
注意:
文件源码千万不要随意去修改,很可能导致文件本身错误、引入该文件的文件也错误打不开,所以我们在编辑文件源码的时候一定要小心。
那我们什么时候会去编辑文件源码呢?
例如:
我们在规则设计的时候引入了库文件,当我们规则文件设计好了的时候,我不小心删除了库文件的变量或字段,然后又把之前删除的变量和字段加上。这个时候表面上库文件的信息和原来一模一样,但实际上这个库文件的源码已经发生了改变,所以运用到该变量或字段的规则文件都会报错,找不到该变量或字段的引入。
如图:
1.我们在规则文件中运用到了【员工】的【name】字段
2.然后我们把【员工】变量的【name】字段给删除,再添加【name】字段
表面上库文件没有发生变化,但实际上库文件的源码已经发生了改变,所以运用到该属性字段的规则文件报错打不开了。
问题的原因:
添加变量或属性,都会重新生成uuid,而Urule Pro是通过uuid去找引用到的变量或属性的,所以导致了上面【员工.姓名】没找到。
解决办法:
上图为例,我们可以找到报错打不开的那个规则文件-->点击查看文件源码-->查找没找到的变量或字段,我们先查找”姓名“-->找到它的uuid-->复制uuid-->再打开库文件的源码-->找到该变量的“姓名”字段-->把uuid替换-->保存文件源码-->重新打开规则文件就好了
注意:
在修改源码的时候,一定要记得先copy备份一份源码,以防修改错了,Urule Pro源码修改了没有返回上一次修改的功能
保存源码后,重新打开规则文件就好了
2.向导式规则设计器操作技巧
菜单弹出时不会自动消失,必须要双击空白处才会消失(双击标签页的位置等),这样做是为了更好的避免用户的误操作,因为实际使用时菜单项往往是很多的。
配置条件时,在变量属性后面,有个小方框,可以随便增加+-*/,如下图所示:
配置条件时,运算符号后面,有个小方框,可以增加括号,如下图所示:
配置条件时,想选常量但是选错了变量后,在左边有个小方块,可以随时重新选择常量
可以随意鼠标拖动规则顺序/拖动规则里动作顺序
规则条件中右键菜单里可对条件位置进行上移或下移操作,如下图:
规则条件中右键菜单里可对条件进行复制操作,在条件连接按钮上的菜单里可对条件进行粘贴操作,当然也可以在条件连接按钮上对当前按钮下所有条件进行复制,然后粘贴到另一个条件连接按钮上。
在规则动作上右键,在弹出菜单里可对当前动作进行复制,然后在其它动作上可对复制的动作进行粘贴
选择变量、常量、参数、动作时,如果菜单项多于20个,会自动在菜单顶部添加过滤框,可对当前菜单项进行过滤操作
规则名边有个树形图标,点击它可查看当前规则运行时构建的规则树,有助于我们理解规则的构建
向导式规则集文件右侧有规则文件导航栏,会显示规则名及规则的优先级(如果有定义的话),可点击规则名边的箭头显示或隐藏当前规则,也可以点击规则名快速定位到当前规则,同时规则如果设置了不启用,那么规则名将以灰色显示
3.规则流设计器操作技巧
在工具栏上点击某个规则流节点类型后,可在工作区里点击添加该节点,每次点击增加一个节点
要选中节点,可先点击工具栏上的选择图标,然后再去点击目标节点,即可选中节点,也可以采用拖选方式选择一个或多个节点
选中一个或多个节点后,可点击工具栏上的删除图标删除节点
选中节点后可通过节点上的操作框改变节点大小(节点图标采用的是svg格式,所以允许任意改变图标尺寸)
要在两节点间添加连接线,需先选中工具栏上的连接线图标,然后点击工具栏里的第一个节点,再点击第二个节点,就可以在这两个节点间建立连接线
要选中连接线可采用拖选方式,拖选出来的框只要接触到连接线就会选中目标连接线
选中连接线后,鼠标移到连接线的开始或结束位置,鼠标会变成十字图标,此时按住鼠标移到其它节点上可改变连接线的源节点或目标结点
选中连接线后,连接线上会出现若干可移动的锚点,如下图,通过拖动锚点可改变连接线形状
选中连接后,双击连接线上的锚点,可删除当前锚点,连接线当前段会恢复直线状态
规则流属性面板上左侧有个箭头,点击可展开或收缩面板,以节省操作空间
4.使用遍历集合
一般我们再配置规则时,会遇到向集合需要遍历。当我们集合中存的是变量对象时,循环规则块中我们直接使用集合中存的变量即可。
快速测试结果:
如果集合中我们存放的值并未定义业务变量,需要我们通过集合索引进行获取。
快速测试日志:
5.设计器中比较操作符的说明
比较操作符名称 | 说明 | |
大于、大于等于、小于、小于等于、等于、等于(不区分大小写)、不等于、等于(不区分大小写) | 左边的值与操作符右边的值进行比较 | |
开始于、不开始于、结束于、不结束于 | 左边值是否为右边值的前缀/后缀,例: aa (左值) 开始于aabbcc(右值) ,结果是true aa(左值) 不开始于aabbcc(右值) ,结果是false cc(左值) 结束于 aabbcc(右值) ,结果是true dd (左值) 不结束于 aabbcc(右值) ,结果是true | |
为空、不为空 | 左值是否为空字符串 | |
包含、不包含 | 左值字符串是否包含右值字符串,例: aabbccdd(左值) 包含bb(右值),结果是true aabbccdd(左值) 包含ee(右值),结果是false | |
在集合中、不在集合中 | 左值在不在指定的集合(右值)中,右值是一个集合对象或者是逗号隔开的字符串,字符串比如: aa(左值) 在集合aa,bb,cc,dd中,结果是true | |
匹配正则表达式、不匹配正则表达式 | 左值是否与右值提供的正则表达式匹配,例: aa(左值) 匹配正则表达式`` .*?(aa\ | bb\cc\)*?`` |
在区间值中、不在区间值中 | 左值是否在右值的区间范围,左值是数字类型,右值为数字区间,(和)表示不包含边界数字,[和]表示包含边界数字,省略表示包含。例: 5(左值)在区间值1,10,结果是true 1(左值)在区间值(1,10],结果是false |