變量庫文(wén)件
在業務(wù)系統開發過程中(zhōng),會用(yòng)到大量包含Getter和Setter方法的簡單的Java對象,它們被稱之為(wèi)POJO(Plain Ordinary Java Object),或BOM(Business Object Model)對象,這些對象在開發中(zhōng)作(zuò)為(wèi)數據的載體(tǐ),負責數據的傳遞。在URule Pro當中(zhōng),變量庫就是用(yòng)來映射這些POJO對象,從而使得我們可(kě)以在具(jù)體(tǐ)的規則文(wén)件中(zhōng)使用(yòng)它們,從而完成規則與業務(wù)數據的交互。 進入URule Pro規則設計頁(yè),在“庫”節點點擊右鍵,在彈出的菜單中(zhōng)選擇“添加變量庫”就可(kě)以創建變量庫文(wén)件,如下图所示:
創建好變量庫文(wén)件後,可(kě)以看到系統會用(yòng)變量庫編輯器自動打開這個文(wén)件。在這個編輯器中(zhōng),首先需要添加變量的分(fēn)類,然後再添加具(jù)體(tǐ)的變量字段。對應到Java實體(tǐ)對象,就是要添加對應的實體(tǐ)對象信息,再添加這個實體(tǐ)對象所擁有(yǒu)的屬性信息。如下图所示:
添加一個分(fēn)類,輸入名(míng)稱,這個名(míng)稱是對當前分(fēn)類的描述,會在規則中(zhōng)直接引用(yòng)顯示,所以一般我們會使用(yòng)中(zhōng)文(wén)描述來作(zuò)為(wèi)名(míng)稱,類路徑,就是這個分(fēn)類對應的實體(tǐ)類的完整路徑,比如上图中(zhōng)的“com.bstek.entity.Customer”。
無論是變量分(fēn)類還是具(jù)體(tǐ)的變量,都有(yǒu)一個“用(yòng)途”的屬性,可(kě)選值有(yǒu)三個,分(fēn)别是:In、Out、InOut,含義如下表所示:
名(míng)稱 | 描述 |
---|---|
In | 表示該變量隻能(néng)用(yòng)于輸入、不能(néng)用(yòng)于輸出,在規則中(zhōng)可(kě)以用(yòng)于條件判斷,但不能(néng)給這個變量賦值,同時在快速測試中(zhōng),不能(néng)選擇用(yòng)于輸出。 |
Out | 表示該變量隻能(néng)用(yòng)于輸出、不能(néng)用(yòng)于輸入,在規則中(zhōng)既可(kě)以用(yòng)于條件判斷,也可(kě)以給這個變量賦值,但在快速測試中(zhōng),不能(néng)選擇其用(yòng)于輸入,隻能(néng)選擇其作(zuò)為(wèi)輸出。 |
InOut | 表示該變量即可(kě)以作(zuò)為(wèi)輸入、也可(kě)以作(zuò)為(wèi)輸出。 |
變量的類路徑是規則引擎在執行過程中(zhōng)查找對應對象的唯一标識,所以在定義時一定要讓其與實際業務(wù)中(zhōng)對應的POJO對象的完整類路徑一緻,否則在運行時将會出現找不到類的情況,或者使得規則在計算時不會出現我們期望的結果。
變量類路徑也可(kě)以理(lǐ)解為(wèi)一個變量的ID,實際使用(yòng)時,這個類路徑對應的類可(kě)以是不存在的,這樣在代碼中(zhōng)我們可(kě)以使用(yòng)GeneralEntity來模拟這個類對象。在引擎提供的快速測試以及Rest調用(yòng)中(zhōng),所有(yǒu)的變量對象都是通過GeneralEntity模拟運行。
“參數”是系統的保留字,專門用(yòng)于“參數庫”文(wén)件使用(yòng),因此在變量分(fēn)類名(míng)稱定義時,不能(néng)使用(yòng)“參數”。
變量維護的5種方式
手工(gōng)添加字段
點擊上图中(zhōng)的“添加字段”按鈕,即可(kě)在右側表格中(zhōng)多(duō)一個空白行,在新(xīn)增行中(zhōng)分(fēn)别填充【字段名(míng)稱】【标題】【數據類型】等内容,說明如下:
名(míng)稱 | 描述 |
---|---|
字段名(míng)稱 | 字段屬性名(míng)稱,能(néng)常定義為(wèi)通俗易懂的英文(wén)表示,符合java的駝峰命名(míng)法,且在該字段列表中(zhōng)是唯一的,多(duō)數在後台程序調用(yòng)時會用(yòng)到 |
标題 | 字段的中(zhōng)文(wén)說明,在規則設計器中(zhōng)顯示,在當前變量中(zhōng)應該保持唯一性 |
數據類型 | 在格表中(zhōng)下拉選擇合适的數據類型:String字符串,Integer短整型,Long長(cháng)整型,Float短浮點型,Double長(cháng)浮點型,BigDecimal金融浮點型,Date日期,Map集合,List集合,Object對象型 |
用(yòng)途 | 同上【添加變量】中(zhōng)的說明 |
默認值 | 同下【變量字段默認值】中(zhōng)的說明 |
根據類路徑生成字段
這時,需要先定義變量的分(fēn)類,如果當前定義的類路徑對應的類在當前應用(yòng)中(zhōng)存在的話(通常需要程序員的協助,先定義好變量,然後在“Jar文(wén)件熱部署功能(néng)”中(zhōng)上傳到服務(wù)器)),那麽可(kě)以在當前變量分(fēn)類所在行點擊右鍵,在彈出的菜單中(zhōng)選擇“根據類路徑生成字段”,系統就會通過Java的反射功能(néng)生成當前類對應的所有(yǒu)字段信息。上图中(zhō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("名(míng)稱")
private String name;
@Label("年齡")
private int age;
@Label("出生日期")
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)房")
private boolean house;
//省略上述所有(yǒu)屬性對應的getter與setter方法......
}
在這個類當中(zhōng),可(kě)以看到每個屬性都有(yǒu)一個名(míng)為(wèi)Label的annotation,它是一個由URule Pro提供的用(yòng)來描述字段屬性的annotation,這裏描述的值,在生成變量時會自動寫到變量的“标題”當中(zhōng),這裏的标題将會在規則中(zhōng)直接引用(yòng),讓标題有(yǒu)意義,對于規則的清晰表達很(hěn)有(yǒu)價值。
如果這個類在當前所在的項目當中(zhōng),所以可(kě)以直接通過反射生成所有(yǒu)的屬性,生成後的效果如下:
可(kě)以看到上图中(zhōng)Label這個annotation對應的描述寫入到變量的“标題”當中(zhōng)。
這到裏,變量庫文(wén)件就定義好了,可(kě)以根據需要在一個文(wén)件中(zhōng)添加多(duō)個變量 分(fēn)類,相應對應到多(duō)個POJO類。
根據數據庫表生成字段
- 在使用(yòng)該功能(néng)前,應首先在【數據源配置】功能(néng)中(zhōng),定義一個數據源,并保證可(kě)用(yòng)
- 右鍵目标變量“根據數據庫表生成字段”,彈出如下畫面:選擇數據源,填寫“表名(míng)稱”,點擊“刷新(xīn)字段”按鈕,如下图所示:
- 點擊确認後,再指定“用(yòng)途”後,如下所示:
根據JSON生成字段
選中(zhōng)目标變量後,右鍵行“根據JSON生成字段”彈出如下窗口:
- 輸入合格的JSON數據
{
"name":"張三",
"sex":"男",
"age":"30"
}
- 點擊下一步,進入“對象樹”窗口
- 點擊下一步,進入“字段列表”窗口
- 點擊【确認】按鈕後,回到如下窗口,然後按需調整“标題”、“數據類型”、“用(yòng)途”、“默認值”的單元格内容
說明:在實際生産(chǎn)中(zhōng),可(kě)能(néng)某些用(yòng)戶會存在根據‘一個json數據’快速生成變量的需求,那麽此時“JSON生成字段”的功能(néng)特征就能(néng)用(yòng)上。
excel導入
變量字段默認值
字段默認值,默認為(wèi)空。如果字段設置默認值,當調用(yòng)規則時,用(yòng)到當前字段,發現為(wèi)空時将會使用(yòng)默認值。
這樣就省去了以前需要判斷字段是否有(yǒu)值的條件判斷。如不需要默認值,保持原樣不設置默認值即可(kě)。
默認值功能(néng)在調用(yòng)規則傳入變量、變量類型的參數 、規則中(zhōng)動态生成實例時,均有(yǒu)效。
但如果用(yòng)Java API調用(yòng)規則,參數是變量類型,傳入前需要調用(yòng) Utils.assignVariableObjectDefaultValue(參數,session);
再觸發執行規則。
參考如下代碼:
//從Spring中(zhōng)獲取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);
改變表格行顯示順序
在上图中(zhōng),通過右鍵表格數據行的【上移】【下移】項,來改變顯示的先後順序,有(yǒu)将常用(yòng)的字段順序放在前面,有(yǒu)利于規則設計人員在規則文(wén)件設計畫面中(zhōng)快速選擇,以提升工(gōng)效。