对预定义值的支持
预定义值功能是 v4.3.0+
版本新增的功能,主要为了简化规则编写,支持局部参数的定义与使用,提升用户编写规则体验。
使用说明
如果想在当前规则文件中定义一个局部参数,可以在预定义值列表点击 "+",添加预定义值。设置局部参数名称、类型、以及值的来源。
预定义好的局部参数就可以在当前的规则文件中使用了。
- 类型:支持基础类型和引入变量库的复杂变量。
- 值的来源:支持输入的静态值、变量或变量属性、参数、常量、方法、函数等。
- 源自(from): 指将值的来源的整个一个对象赋值给这个定义的局部参数
- 来自(in): 指值的来源设置的是一个集合,类似于循环规则块指定循环集合的设置中的指定集合对象的功能,并且可以直接设置遍历过滤条件。
- 预定义值列表中,前面预定义局部参数,在后面的预定义中可以使用。可以通过拖拽改变先后顺序。
复杂对象的值获取
对于复杂对象嵌套的情况,使用预定义值的方式获取子对象值,将会变得非常简单。 定义一个子对象类型的局部参数,值源自(from) 主对象的子对象属性即可
集合循环遍历以及多循环嵌套的使用
在 v4.3.0
以前的版本,循环遍历一个集合只能使用循环规则块进行遍历集合,具体可以参照 设计器使用技巧一文中的使用遍历集合说明
在 v4.3.0+
版本后,集合的循环遍历可以通过预定义值的功能实现。
- 当值为 来自(in) 时,需要指定一个集合对象,类似于循环规则块指定循环集合的设置中的指定集合对象的功能。
- 当值为 来自(in) 时,指定的是一个变量库定义的一个变量时,类似于循环规则块指定变量类型,将从当前工作区中找到所有这种类型的变量并组装成一个集合进行遍历。
- 预定义一个 来自(in) 的局部参数,就相当于一个For循环体,下面的预定义条目和规则都在这个循环当中。
上图的执行逻辑如下:
类型[String] "一个拼接字符串" = "ANLIN" ; 类型[String] "拼接后员工姓名" = "用户"."姓名" + "一个拼接字符串" ; 类型[用户明细] "用户的详细信息" = "用户"."详细信息" ; For ("标签" : "用户的详细信息"."标签列表" ){ if ("标签"."是否有效" == "有效"){ 类型[标签] "标签信息" = "标签" ; 类型[String] "默认地址" = [Map]("标签信息"."描述信息").get("有效") ; //执行规则文件中的所有规则块 //UA0001规则块 if(...){ ... }else{ ... } //UA0002规则块 if(...){ ... } } }
预定义列表中有多个 来自(in) 时,就相当于多个For循环嵌套,这种将大大简化循环嵌套的编写过程。
For (item : List ){
For (...){
//执行规则文件中的所有规则块
}
}
预定义优先级
当规则文件中添加了预定义值条目的时候,预定义优先级就生效了,把一个添加了预定义值的规则文件看成一个整体,比如同一个知识包中的多个添加了预定义值的规则文件,会根据预定义设置优先级的大小,从高到低执行。