变量库文件

在业务系统开发过程中,会用到大量包含Getter和Setter方法的简单的Java对象,它们被称之为POJO(Plain Ordinary Java Object),或BOM(Business Object Model)对象,这些对象在开发中作为数据的载体,负责数据的传递。在URule Pro当中,变量库就是用来映射这些POJO对象,从而使得我们可以在具体的规则文件中使用它们,从而完成规则与业务数据的交互。 进入URule Pro规则设计页,在“库”节点点击右键,在弹出的菜单中选择“添加变量库”就可以创建变量库文件,如下图所示:

创建好变量库文件后,可以看到系统会用变量库编辑器自动打开这个文件。在这个编辑器中,首先需要添加变量的分类,然后再添加具体的变量字段。对应到Java实体对象,就是要添加对应的实体对象信息,再添加这个实体对象所拥有的属性信息。如下图所示:

添加一个分类,输入名称,这个名称是对当前分类的描述,会在规则中直接引用显示,所以一般我们会使用中文描述来作为名称,类路径,就是这个分类对应的实体类的完整路径,比如上图中的“com.bstek.entity.Customer”。

无论是变量分类还是具体的变量,都有一个“用途”的属性,可选值有三个,分别是:In、Out、InOut,含义如下表所示:

名称 描述
In 表示该变量只能用于输入、不能用于输出,在规则中可以用于条件判断,但不能给这个变量赋值,同时在快速测试中,不能选择用于输出。
Out 表示该变量只能用于输出、不能用于输入,在规则中既可以用于条件判断,也可以给这个变量赋值,但在快速测试中,不能选择其用于输入,只能选择其作为输出。
InOut 表示该变量即可以作为输入、也可以作为输出。

变量的类路径是规则引擎在执行过程中查找对应对象的唯一标识,所以在定义时一定要让其与实际业务中对应的POJO对象的完整类路径一致,否则在运行时将会出现找不到类的情况,或者使得规则在计算时不会出现我们期望的结果。

变量类路径也可以理解为一个变量的ID,实际使用时,这个类路径对应的类可以是不存在的,这样在代码中我们可以使用GeneralEntity来模拟这个类对象。在引擎提供的快速测试以及Rest调用中,所有的变量对象都是通过GeneralEntity模拟运行。

参数”是系统的保留字,专门用于“参数库”文件使用,因此在变量分类名称定义时,不能使用“参数”。

变量维护的5种方式

img

手工添加字段

​ 点击上图中的“添加字段”按钮,即可在右侧表格中多一个空白行,在新增行中分别填充【字段名称】【标题】【数据类型】等内容,说明如下:

名称 描述
字段名称 字段属性名称,能常定义为通俗易懂的英文表示,符合java的驼峰命名法,且在该字段列表中是唯一的,多数在后台程序调用时会用到
标题 字段的中文说明,在规则设计器中显示,在当前变量中应该保持唯一性
数据类型 在格表中下拉选择合适的数据类型:String字符串,Integer短整型,Long长整型,Float短浮点型,Double长浮点型,BigDecimal金融浮点型,Date日期,Map集合,List集合,Object对象型
用途 同上【添加变量】中的说明
默认值 同下【变量字段默认值】中的说明

根据类路径生成字段

这时,需要先定义变量的分类,如果当前定义的类路径对应的类在当前应用中存在的话(通常需要程序员的协助,先定义好变量,然后在“Jar文件热部署功能”中上传到服务器)),那么可以在当前变量分类所在行点击右键,在弹出的菜单中选择“根据类路径生成字段”,系统就会通过Java的反射功能生成当前类对应的所有字段信息。上图中com.bstek.entity.Customer类源码如下所示:

package com.bstek.entity;
import java.util.Date;
import com.bstek.urule.model.Label;
/**
 * @author Jacky.gao
 * @since 2016年9月29日
 */
public class Customer {
    @Label("名称")
    private String name;
    @Label("年龄")
    private int age;
    @Label("出生日期")
    private Date birthday;
    @Label("等级")
    private int level;
    @Label("手机号")
    private String mobile;
    @Label("性别")
    private boolean gender;
    @Label("是否有车")
    private boolean car;
    @Label("婚否")
    private boolean married;
    @Label("是否有房")
    private boolean house;
    //省略上述所有属性对应的getter与setter方法......
}

在这个类当中,可以看到每个属性都有一个名为Label的annotation,它是一个由URule Pro提供的用来描述字段属性的annotation,这里描述的值,在生成变量时会自动写到变量的“标题”当中,这里的标题将会在规则中直接引用,让标题有意义,对于规则的清晰表达很有价值。

如果这个类在当前所在的项目当中,所以可以直接通过反射生成所有的属性,生成后的效果如下:

可以看到上图中Label这个annotation对应的描述写入到变量的“标题”当中。

这到里,变量库文件就定义好了,可以根据需要在一个文件中添加多个变量 分类,相应对应到多个POJO类。

根据数据库表生成字段

  • 在使用该功能前,应首先在【数据源配置】功能中,定义一个数据源,并保证可用
  • 右键目标变量“根据数据库表生成字段”,弹出如下画面:选择数据源,填写“表名称”,点击“刷新字段”按钮,如下图所示:

img

  • 点击确认后,再指定“用途”后,如下所示:

img

根据JSON生成字段

​ 选中目标变量后,右键行“根据JSON生成字段”弹出如下窗口:

img

  • 输入合格的JSON数据
{
    "name":"张三",
     "sex":"男",
     "age":"30"
}
  • 点击下一步,进入“对象树”窗口
  • 点击下一步,进入“字段列表”窗口

img

  • 点击【确认】按钮后,回到如下窗口,然后按需调整“标题”、“数据类型”、“用途”、“默认值”的单元格内容

img

说明:在实际生产中,可能某些用户会存在根据‘一个json数据’快速生成变量的需求,那么此时“JSON生成字段”的功能特征就能用上。

excel导入

img

变量字段默认值

字段默认值,默认为空。如果字段设置默认值,当调用规则时,用到当前字段,发现为空时将会使用默认值。

这样就省去了以前需要判断字段是否有值的条件判断。如不需要默认值,保持原样不设置默认值即可。

默认值功能在调用规则传入变量、变量类型的参数 、规则中动态生成实例时,均有效。

但如果用Java API调用规则,参数是变量类型,传入前需要调用 Utils.assignVariableObjectDefaultValue(参数,session);再触发执行规则。

参考如下代码:

        //从Spring中获取KnowledgeService接口实例
        KnowledgeService service=(KnowledgeService)Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
        //通过KnowledgeService接口获取指定的知识包ID"213"
        KnowledgePackage knowledgePackage=service.getKnowledge("213");
        //通过取到的KnowledgePackage对象创建KnowledgeSession对象
        KnowledgeSession session=KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);

        GeneralEntity employee=new GeneralEntity("rete.test.Employee");
        employee.put("id","0001");
        employee.put("name","马克");
        employee.put("salary",111000);
        //根据变量库设置的默认值设置变量实例
        Utils.assignVariableObjectDefaultValue(employee,session);

        Map<String,Object> parameter=new HashMap<String,Object>();
        parameter.put("currentEmployee", employee);

        //开始规则流并设置参数
        session.startProcess("flow-test",parameter);

改变表格行显示顺序

​ 在上图中,通过右键表格数据行的【上移】【下移】项,来改变显示的先后顺序,有将常用的字段顺序放在前面,有利于规则设计人员在规则文件设计画面中快速选择,以提升工效。

results matching ""

    No results matching ""