規則引擎Ilog Jrules開發基礎教程【連載3】-- 開發篇1

3.1 準備BOM

        在編寫任何規則之前必須準備好規則中要用到的詞彙,規則的詞彙在業務對象模型中定義。業務對象模型 (BOM) 定義了規則工件中可使用的操作和實體。規則編寫基於BOM,語法由IRL定義。BOM的定義又依賴於規則執行的XOM(物理對象模型eXecutable Object Model),XOM可以是java類、XMLWSDL。BOM是通過XOM映射定義的虛擬的規則實體。BOMXOM的映射不一定必需是一對一的映射,一個BOM可以定義XOM中不存在的屬性,只要有明確的BOM屬性定義即可,但這樣的屬性只可以在規則內部使用。 

規則:

 如果
    'Customer Info'   age 小於18 
 那麼
    設置 'Customer Info'  的當前 result “REJECT” ;


 物理對象模型:

public class CustomerInfo implements Serializable{

/**

 * @author SHIXIN747

 */

private static final long serialVersionUID = -580320839476217224L;

private String custName;                 //客戶姓名

private int age;                //年齡      

private String sex;                      //性別

private ApplicationInfo applicationInfo; //當前 申請

private List historyLoanList;            //歷史貸款列表信息

private Date birthDay;                   //生日

private double verifiedIncome;           //覈實收入     

private boolean risk;                    //是否存在風險

private String rusult;                   //評估結果

setters  and  getters ……

}

3.1.1 準備XOM

操作過程就是在Rule Studio創建普通的Java

文件-->新建-->其他-->選擇Java項目-->下一步-->輸入項目名稱-->完成。

本教程中新建的XOM代碼如下:

注:若規則項目使用EJB調用,Java類需實現Serializable接口,並生成serialVersionUID。

代碼1

package com.paic.cfs.application;

import java.io.Serializable;

public class ApplicationInfo implements Serializable{                    

/**

 * @author SHIXIN747

 */

private static final long serialVersionUID = 3228480902812648982L;

private String statusCode;        

private String followCode;

private String loanCode;

public String getStatusCode() {

return statusCode;

}

public void setStatusCode(String statusCode) {

this.statusCode = statusCode;

}

public String getFollowCode() {

return followCode;

}

public void setFollowCode(String followCode) {

this.followCode = followCode;

}

public String getLoanCode() {

return loanCode;

}

public void setLoanCode(String loanCode) {

this.loanCode = loanCode;

}

}

代碼2

package com.paic.cfs.customer;

import java.io.Serializable;

import java.util.Date;

import java.util.List;

import com.paic.cfs.application.ApplicationInfo;

public class CustomerInfo implements Serializable{

/**

 * @author SHIXIN747

 */

private static final long serialVersionUID = -580320839476217224L;

private String flag;                     //規則調用標誌

private String custName;                 //客戶姓名

private int age;                //年齡      

private String sex;                      //性別

private ApplicationInfo applicationInfo; //當前 申請

private List historyLoanList;            //歷史貸款列表信息

private Date birthDay;                   //生日

private double verifiedIncome;           //覈實收入     

private boolean risk;                    //是否存在風險

private String rusult;                   //評估結果

public String getFlag() {

return flag;

}

public void setFlag(String flag) {

this.flag = flag;

}

public String getCustName() {

return custName;

}

public void setCustName(String custName) {

this.custName = custName;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public ApplicationInfo getApplicationInfo() {

return applicationInfo;

}

public void setApplicationInfo(ApplicationInfo applicationInfo) {

this.applicationInfo = applicationInfo;

}

public List getHistoryLoanList() {

return historyLoanList;

}

public void setHistoryLoanList(List historyLoanList) {

this.historyLoanList = historyLoanList;

}

public Date getBirthDay() {

return birthDay;

}

public void setBirthDay(Date birthDay) {

this.birthDay = birthDay;

}

public double getVerifiedIncome() {

return verifiedIncome;

}

public void setVerifiedIncome(double verifiedIncome) {

this.verifiedIncome = verifiedIncome;

}

public boolean isRisk() {

return risk;

}

public void setRisk(boolean risk) {

this.risk = risk;

}

public String getRusult() {

return rusult;

}

public void setRusult(String rusult) {

this.rusult = rusult;

}

}

3.1.2 新建規則項目

        操作過程:文件-->新建-->規則項目-->選擇標準規則項目-->輸入項目名(可以是中文)-->完成。同樣也可以導入現有項目到工作空間中。

        新建的規則項目一般新建有4個文件夾,即“規則”、“bom”、“查詢”、“模板”。

        在整個編輯器的下方有一個“規則項目圖”,整個規則項目的開發過程可以遵循圖中的流程操作,熟練之後也可直接在項目上操作。

       

3.1.3 導入XOM,建立關聯關係

        操作過程:導入XOM-->選擇“Java執行對象模型”-->在“項目”標籤下勾選java項目-->確定。

       

        若不是在同一個編輯器中創建的java項目,可以將java項目打成jar包導入規則項目。操作過程:導入XOM-->選擇“Java執行對象模型”-->在“庫”標籤下添加外部jar-->確定。

       

3.1.4 創建BOM

        操作過程:創建XOM-->輸入名稱,選擇“從XOM創建BOM條目” -->下一步-->瀏覽至已導入的XOM,選擇要映射成BOM的類-->下一步-->在用語言描述選項中勾選選擇要映射到BOM中方法-->完成。

                

                 

         

        這樣,就把XOM映射到了BOM中,如下圖所示:

       

        雙擊BOM中的任意類下面的任意屬性,就會顯示BOM的編輯器,如下圖所示:

       

        圖中的“導航”就是gertter方法   “操作”就是setter方法。

        Rule Studio提供了一個專用的編輯器來編寫的BOM,默認映射過來的BOM屬性描述直接映射爲XOM屬性名,若屬性名存在大寫字母,則BOM屬性描述會加以空格分隔。Rule Studio支持把BOM的類和成員映射至業務用戶熟悉的術語和短語。

操作過程:編輯-->在“編輯術語”對話框中輸入業務用戶熟悉的術語或短語-->確定。

       

        修改類的名字同樣如上操作。那麼書寫規則時就可以在規則中直接使用修改後的詞彙。如下:

如果
    '客戶'   年齡 小於18 
 那麼
    設置 '客戶'  的當前 審批結果  REJECT ; 

如果java類的屬性名字足夠好,那麼大可不必做任何修改直接使用。

3.2 定義參數

        如果要在規則中使用已定義好的BOM,需要定義規則集參數。

        操作過程:定義參數-->添加à輸入相應參數-->確定。語言描述就是在規則中顯示的句柄。

        其中方向有“IN_OUT”,“IN”,“OUT”,表示參數的類型,意思和存儲過程中的參數類型差不多。

       

        這樣,就可以在規則中使用已定義的BOM了,因爲ApplicationInfo是作爲CustomerInfo類中的屬性使用的,所以只定義了CustomerInfo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章