變量庫文件

在業務系統開(kāi)發過程中,會(huì)用到大(dà)量包含Getter和(hé)Setter方法的簡單的Java對象,它們被稱之為(wèi)POJO(Plain Ordinary Java Object),或BOM(Business Object Model)對象,這些(xiē)對象在開(kāi)發中作(zuò)為(wèi)數(shù)據的載體(tǐ),負責數(shù)據的傳遞。在URule Pro當中,變量庫就是用來(lái)映射這些(xiē)POJO對象,從而使得(de)我們可(kě)以在具體(tǐ)的規則文件中使用它們,從而完成規則與業務數(shù)據的交互。 進入URule Pro規則設計(jì)頁,在“庫”節點點擊右鍵,在彈出的菜單中選擇“添加變量庫”就可(kě)以創建變量庫文件,如下圖所示:

創建好變量庫文件後,可(kě)以看到系統會(huì)用變量庫編輯器(qì)自動打開(kāi)這個(gè)文件。在這個(gè)編輯器(qì)中,首先需要添加變量的分類,然後再添加具體(tǐ)的變量字段。對應到Java實體(tǐ)對象,就是要添加對應的實體(tǐ)對象信息,再添加這個(gè)實體(tǐ)對象所擁有(yǒu)的屬性信息。如下圖所示:

添加一個(gè)分類,輸入名稱,這個(gè)名稱是對當前分類的描述,會(huì)在規則中直接引用顯示,所以一般我們會(huì)使用中文描述來(lái)作(zuò)為(wèi)名稱,類路徑,就是這個(gè)分類對應的實體(tǐ)類的完整路徑,比如上(shàng)圖中的“com.bstek.entity.Customer”。

無論是變量分類還(hái)是具體(tǐ)的變量,都有(yǒu)一個(gè)“用途”的屬性,可(kě)選值有(yǒu)三個(gè),分别是:In、Out、InOut,含義如下表所示:

名稱 描述
In 表示該變量隻能用于輸入、不能用于輸出,在規則中可(kě)以用于條件判斷,但(dàn)不能給這個(gè)變量賦值,同時(shí)在快速測試中,不能選擇用于輸出。
Out 表示該變量隻能用于輸出、不能用于輸入,在規則中既可(kě)以用于條件判斷,也可(kě)以給這個(gè)變量賦值,但(dàn)在快速測試中,不能選擇其用于輸入,隻能選擇其作(zuò)為(wèi)輸出。
InOut 表示該變量即可(kě)以作(zuò)為(wèi)輸入、也可(kě)以作(zuò)為(wèi)輸出。

變量的類路徑是規則引擎在執行(xíng)過程中查找對應對象的唯一标識,所以在定義時(shí)一定要讓其與實際業務中對應的POJO對象的完整類路徑一緻,否則在運行(xíng)時(shí)将會(huì)出現找不到類的情況,或者使得(de)規則在計(jì)算(suàn)時(shí)不會(huì)出現我們期望的結果。

變量類路徑也可(kě)以理(lǐ)解為(wèi)一個(gè)變量的ID,實際使用時(shí),這個(gè)類路徑對應的類可(kě)以是不存在的,這樣在代碼中我們可(kě)以使用GeneralEntity來(lái)模拟這個(gè)類對象。在引擎提供的快速測試以及Rest調用中,所有(yǒu)的變量對象都是通(tōng)過GeneralEntity模拟運行(xíng)。

參數(shù)”是系統的保留字,專門(mén)用于“參數(shù)庫”文件使用,因此在變量分類名稱定義時(shí),不能使用“參數(shù)”。

變量維護的5種方式

img

手工添加字段

​ 點擊上(shàng)圖中的“添加字段”按鈕,即可(kě)在右側表格中多(duō)一個(gè)空(kōng)白行(xíng),在新增行(xíng)中分别填充【字段名稱】【标題】【數(shù)據類型】等內(nèi)容,說明(míng)如下:

名稱 描述
字段名稱 字段屬性名稱,能常定義為(wèi)通(tōng)俗易懂的英文表示,符合java的駝峰命名法,且在該字段列表中是唯一的,多(duō)數(shù)在後台程序調用時(shí)會(huì)用到
标題 字段的中文說明(míng),在規則設計(jì)器(qì)中顯示,在當前變量中應該保持唯一性
數(shù)據類型 在格表中下拉選擇合适的數(shù)據類型:String字符串,Integer短(duǎn)整型,Long長整型,Float短(duǎn)浮點型,Double長浮點型,BigDecimal金融浮點型,Date日期,Map集合,List集合,Object對象型
用途 同上(shàng)【添加變量】中的說明(míng)
默認值 同下【變量字段默認值】中的說明(míng)

根據類路徑生(shēng)成字段

這時(shí),需要先定義變量的分類,如果當前定義的類路徑對應的類在當前應用中存在的話(huà)(通(tōng)常需要程序員的協助,先定義好變量,然後在“Jar文件熱部署功能”中上(shàng)傳到服務器(qì))),那(nà)麽可(kě)以在當前變量分類所在行(xíng)點擊右鍵,在彈出的菜單中選擇“根據類路徑生(shēng)成字段”,系統就會(huì)通(tōng)過Java的反射功能生(shēng)成當前類對應的所有(yǒu)字段信息。上(shàng)圖中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("出生(shēng)日期")
    private Date birthday;
    @Label("等級")
    private int level;
    @Label("手機号")
    private String mobile;
    @Label("性别")
    private boolean gender;
    @Label("是否有(yǒu)車(chē)")
    private boolean car;
    @Label("婚否")
    private boolean married;
    @Label("是否有(yǒu)房(fáng)")
    private boolean house;
    //省略上(shàng)述所有(yǒu)屬性對應的getter與setter方法......
}

在這個(gè)類當中,可(kě)以看到每個(gè)屬性都有(yǒu)一個(gè)名為(wèi)Label的annotation,它是一個(gè)由URule Pro提供的用來(lái)描述字段屬性的annotation,這裏描述的值,在生(shēng)成變量時(shí)會(huì)自動寫到變量的“标題”當中,這裏的标題将會(huì)在規則中直接引用,讓标題有(yǒu)意義,對于規則的清晰表達很(hěn)有(yǒu)價值。

如果這個(gè)類在當前所在的項目當中,所以可(kě)以直接通(tōng)過反射生(shēng)成所有(yǒu)的屬性,生(shēng)成後的效果如下:

可(kě)以看到上(shàng)圖中Label這個(gè)annotation對應的描述寫入到變量的“标題”當中。

這到裏,變量庫文件就定義好了,可(kě)以根據需要在一個(gè)文件中添加多(duō)個(gè)變量 分類,相應對應到多(duō)個(gè)POJO類。

根據數(shù)據庫表生(shēng)成字段

  • 在使用該功能前,應首先在【數(shù)據源配置】功能中,定義一個(gè)數(shù)據源,并保證可(kě)用
  • 右鍵目标變量“根據數(shù)據庫表生(shēng)成字段”,彈出如下畫(huà)面:選擇數(shù)據源,填寫“表名稱”,點擊“刷新字段”按鈕,如下圖所示:

img

  • 點擊确認後,再指定“用途”後,如下所示:

img

根據JSON生(shēng)成字段

​ 選中目标變量後,右鍵行(xíng)“根據JSON生(shēng)成字段”彈出如下窗口:

img

  • 輸入合格的JSON數(shù)據
{
    "name":"張三",
     "sex":"男",
     "age":"30"
}
  • 點擊下一步,進入“對象樹(shù)”窗口
  • 點擊下一步,進入“字段列表”窗口

img

  • 點擊【确認】按鈕後,回到如下窗口,然後按需調整“标題”、“數(shù)據類型”、“用途”、“默認值”的單元格內(nèi)容

img

說明(míng):在實際生(shēng)産中,可(kě)能某些(xiē)用戶會(huì)存在根據‘一個(gè)json數(shù)據’快速生(shēng)成變量的需求,那(nà)麽此時(shí)“JSON生(shēng)成字段”的功能特征就能用上(shàng)。

excel導入

img

變量字段默認值

字段默認值,默認為(wèi)空(kōng)。如果字段設置默認值,當調用規則時(shí),用到當前字段,發現為(wèi)空(kōng)時(shí)将會(huì)使用默認值。

這樣就省去了以前需要判斷字段是否有(yǒu)值的條件判斷。如不需要默認值,保持原樣不設置默認值即可(kě)。

默認值功能在調用規則傳入變量、變量類型的參數(shù) 、規則中動态生(shēng)成實例時(shí),均有(yǒu)效。

但(dàn)如果用Java API調用規則,參數(shù)是變量類型,傳入前需要調用 Utils.assignVariableObjectDefaultValue(參數(shù),session);再觸發執行(xíng)規則。

參考如下代碼:

        //從Spring中獲取KnowledgeService接口實例
        KnowledgeService service=(KnowledgeService)Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
        //通(tōng)過KnowledgeService接口獲取指定的知識包ID"213"
        KnowledgePackage knowledgePackage=service.getKnowledge("213");
        //通(tōng)過取到的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);

        //開(kāi)始規則流并設置參數(shù)
        session.startProcess("flow-test",parameter);

改變表格行(xíng)顯示順序

​ 在上(shàng)圖中,通(tōng)過右鍵表格數(shù)據行(xíng)的【上(shàng)移】【下移】項,來(lái)改變顯示的先後順序,有(yǒu)将常用的字段順序放在前面,有(yǒu)利于規則設計(jì)人(rén)員在規則文件設計(jì)畫(huà)面中快速選擇,以提升工效。

results matching ""

    No results matching ""