决策集概述
决策集也称规则集,在URule Pro当中是由一组普通规则和循环规则构成的规则集合,是使用频率最高、使用方式最为灵活的一种业务规则实现方式。
在URule Pro中决策集有两种类型:一种是普通规则;一种是循环规则。所谓的普通规则是指一种由如果、那么、否则三个部分构成的规则;而循环规则顾名思义就是可循环的规则,它允许指定一个集合类型的对象,对这个集合中每个对象进行循环迭代,在循环体中则是若干个由如果、那么、否则构成的普通规则。
规则的定义采用向导方式,一步一步通过鼠标点击就可以完成其中的普通规则与循环规则的配置,配合高度可视化的向导式规则设计器,可以最大限度将业务规则可视化,降低规则配置的复杂度。
创建一个决策集,
![](https://img-blog.csdnimg.cn/img_convert/6f7a5b311427276becb46d706b8bb960.png)
![](https://img-blog.csdnimg.cn/img_convert/272e621139c6a51823bc98a8428cf73f.png)
在决策集的设计器中,通过顶部的工具栏,点击“添加规则”按钮可以添加一个普通的由如果、那么、否则构成的普通规则;点击“添加循环规则”按钮可以添加一个可以循环的规则。之前介绍的变量、常量、参数、动作四种类型的库文件,在向导式规则里可以根据需要导入使用。
![](https://img-blog.csdnimg.cn/img_convert/eb89e5eed18c84329e93d9e5dee49d94.png)
添加需要的库文件
![](https://img-blog.csdnimg.cn/img_convert/3b0d2bd7648ea36efe12578d92aa51fe.png)
根据业务需求设计你的规则集
假设,一家公司,盈利500万以上时,会给员工发放固定的奖金外还有一定份额的项目奖金
如果利润>500万 去除每个人应得的部分奖金外
老板拿取85%,经理拿取8% 剩余的其他员工均分
![](https://img-blog.csdnimg.cn/img_convert/40329f73106983418a973ea2d04c5452.png)
变量库
![](https://img-blog.csdnimg.cn/img_convert/5191f393d4a2035455cf763a89328937.png)
规则集的编写
首先是“如果”部分,在如果部分当中可以添加若干条件,添加完条件后,就可以通过鼠标点击以向导方式设置条件
![](https://img-blog.csdnimg.cn/img_convert/51113be5bb97ad2e242daf058262c722.png)
然后点击,‘请选择类型’选择你要用到的数据,这里我会用到变量库,所以我选择的是变量
![](https://img-blog.csdnimg.cn/img_convert/78c79ca6b2dba699419f33df2f1c21f2.png)
![](https://img-blog.csdnimg.cn/img_convert/0325401cba79bfe03a9fcb524b631bcb.png)
设计决策集里面的规则
一旦选择某种类型值之后,我们就可以进入下一步操作,同时在URule Pro当中无论条件左值还是条件右值都可以进行无限多级简单的加、减、乘、除等运算操作
条件配置完成后,可以为“那么”或“否则”部分添加动作,那么部分的动作只有条件满足时才会执行,如果未配置条件,那就意味着无条件执行,也就是说未配置条件会直接执行那么部分的动作;否则部分的动作在条件不满足时执行。不加动作意味着什么也不干,动作可以有多个,多个动作添加完成后可以通过拖曳改变顺序。
变量赋值也就是给当前导入的变量库或参数库的值进行赋值,值类型可以是一个普通的输入值,也可以是一些复杂的值类型或它们的加、减、乘、除组合,及添加括号定义算术运行优先级。
![](https://img-blog.csdnimg.cn/img_convert/b6cd7b9c86c4d2e743da558340785221.png)
这里面用到了一个属性值,允许调试信息输出,默认值为false,就是一个日志输出,具体想了解属性可以看下面内容
中文属性名 | 值类型 | 描述 |
优先级 | 数字 | 当有多个规则满足条件时,这个值用来决定这些满足条件规则中动作的执行顺序,值越大,执行顺序越靠前。如不设置这个值,那按条件满足的顺序执行,也就是说如果不配置优先级属性规则的执行顺序是不确定的。 |
生效日期 | 字符串 | 当规则设置了生效日期,表示这个规则只有在当前系统日期为大于等于生效日期时才会生效,否则即使条件满足也不会触发当前规则,如不设置,则不会对规则执行产生影响。该属性的值要求是一个日期格式的字符串,格式为:yyyy-MM-dd HH:mm:ss |
失效日期 | 字符串 | 与生效日期对应,当规则设置失效日期时,一旦当前系统日期大于或等于失效日期,即使条件满足规则也不会触发执行,如不设置,则不会对规则执行产生影响。属性的值要求是一个日期格式的字符串,格式为:yyyy-MM-dd HH:mm:ss |
是否启用 | 布尔值 | 默认值为true,也就是启用当前规则;如设置为false,即使条件满足规则也不会触发执行,如不设置,则不会对规则执行产生影响。 |
允许调试信息输出 | 布尔值 | 默认为false,表示不输出调试信息,设置为true后,规则在执行时会在控制台输出规则条件的匹配信息、规则动作的执行信息;如果规则计算过程出现异常,还会在控制台输出计算出现异常的位置,以便于我们快速定义规则错误位置。需要注意的是,如果项目的urule.debug属性设置为false时,规则的这个属性会被覆盖,也就是说即使设置为true也不会输出任何信息。 |
互斥组 | 字符串 | 系统会自动将此属性相同的规则划为一组,且这个组中只有一个规则会执行,待执行的规则如设置了优先级,则优先级最高的规则执行,否则随机;需要注意的是,互斥组属性仅在当前规则集文件默认模式下有用,在顺序模式下互斥组属性将不起作用。 |
执行组 | 字符串 | 系统会自动将此属性相同的规则划为一组,默认情况下,引擎不会执行这个组里的规则,需要我们在定义规则动作时利用系统内置的函数显示的指定要激活执行的执行组名,这样系统才会尝试匹配并执行组里的规则。 |
允许循环触发 | 布尔值 | 当执行“更新工作区对象”动作时,某些规则可以会再次满足条件,这时这个属性就是用来决定这种类型的规则是否允许再次触发执行。关于“更新工作区对象”请参考“更新工作区“章节介绍 |
在使用过程当中,如果一个规则配置了执行组,也配置了互斥组属性,那么这个规则对应的执行组属性被激活后,其中配置了互斥组属性的规则将按互斥组属性执行原则执行。
测试决策集
点击快速测试
![](https://img-blog.csdnimg.cn/img_convert/d603756d787480722fc4262206a4121a.png)
选择输入输出数据
![](https://img-blog.csdnimg.cn/img_convert/f172494beed578687e92595236099a8e.png)
点击添加,选中你要输入的变量或者参数,然后点击确定
![](https://img-blog.csdnimg.cn/img_convert/7c67e3587f85aacce82b715375201f1e.png)
![](https://img-blog.csdnimg.cn/img_convert/5b0f84185449ec8aedb437adb7a2d828.png)
![](https://img-blog.csdnimg.cn/img_convert/8548b9138616474e9eeb6cf03c947184.png)
![](https://img-blog.csdnimg.cn/img_convert/3d0062641ad1c2275d54069cdb96b1ab.png)
输出数据的添加方式和输入一样
![](https://img-blog.csdnimg.cn/img_convert/9ca025bdb24aad1c334c087d4541b2e0.png)
填写你的参数,然后点击开始测试
![](https://img-blog.csdnimg.cn/img_convert/6981d82a18354b2c3fc5a0bfb725477a.png)
![](https://img-blog.csdnimg.cn/img_convert/e3cb974f9c487b9ece8556ae3a5a08c4.png)
总结:
决策集使用频率最高、使用方式最为灵活的一种业务规则实现方式;如果业务给出的是零散的逻辑规则,则使用决策集最为合适。