
除了優先級也可以用規則流來指定規則執行順序,如下圖是主規則流中的子規則流,其裡面執行順序和邏輯一目了然。

3.5規則編寫
Ilog Jrules提供的規則形式有四種:普通規則,決策表,決策樹,規則流
3.5.1普通規則
普通規則是最簡單的規則形式,形式和編程語言中的IF…ELSE語句是一樣的,不同的地方在於,規則引擎的IF…ELSE是不可以嵌套的,且每個規則中只允許有一個IF和一個ELSE,例如:
如果
‘customerInfo’ 的age小於18
那麼
設置‘customerInfo’的當前rusult為“REJECT” ;
否則
設置‘customerInfo’的當前rusult為“APPROVE” ;
3.5.2決策表
決策表是以表格的形式展現規則,決策表能羅列出所有的可能情況,並清晰的指出相應的處理方式,而所有可能情況的平面羅列,也能避免在程序語言編寫中,因為邏輯上的層層嵌套而產生遺漏,尤其在if-then-else結構中else部分是可選的情況下。
決策表的條件列和操作列是需要初始化的,之後才可以像填表一樣填寫規則。新建一個決策表之後,選中雙擊決策表,就會在規則編輯器中打開一個空的決策表,決策表分為條件列和操作列,用顏色深淺區分。
操作過程:
定義條件列:將鼠標放於條件列頭右鍵編輯條件列…在測試下面輸入條件,點擊應用輸入標題(標題即列名)確定。
Rule Studio對決策表的條件的輸入的幫助功能支持得不是很好,最好先將條件在普通規則中寫好,去掉”如果”關鍵字,將表達式佔位符用<>括起來,例如:‘customerInfo’的age小於 <一個數字>。這樣一個條件列就準備好了,在其下面的表格中即可以輸入數字類型的參數,輸入不符合定義類型的參數,決策表將會報錯。

設置好條件的決策表:

同樣也可以設置子條件列:
例如:‘customerInfo’的age大於<一個數字>小於 <一個數字>,注意”大於<一個數字>小於 <一個數字>“中間沒有”並且”關鍵字,那麼其形成的條件列如下圖所示:

“否則”的設置:選中條件單元格右鍵添加否則。
定義操作列:將鼠標放於操作列頭右鍵編輯操作列…在測試下面輸入操作輸入標題(標題即列名)確定。
定義操作列和定義條件列大致相同,不同的是在操作中要輸入相應的操作,例如:設置 ‘customerInfo’的當前rusult為<一個字符串>。
可以鼠標點中<輸入一個操作>,即會出現如下提示:

操作表的上方有一排功能圖標,常用的有增加條件列,減少條件列,增加操作列,減少操作列,也可以像excel那樣在內容相同的條件下並同單元格。
“禁用”功能:”禁用”功能只能在操作列使用,因為操作列的操作已經指定,如果在操作列的表格中什麼也不輸入,就會執行參數為空的操作。禁用後則說明也不會執行。圖標是。而在條件列中什麼也不輸入時,規則引擎會忽略掉這個條件的判斷。
決策表的局限:在於操作列定義適用於不同參數的相同操作方法,不能不同條件執行不同的方法。
3.5.3決策樹
決策樹是規則引擎中最靈活的表現形式,任何規則都可以用決策樹來表示。

其中菱形表示條件部分,如同決策表的列頭部分,可以帶參數;箭頭表示時間走向,裡面是填充好了參數的條件;矩形則為要執行的操作部分,可以執行任意個數的操作。
如上決策表的規則,用決策樹表示如下:

3.6 規則常用語法
字符串連接:設置
‘customerInfo’
的當前rusult 為“A” + “B”;
字符串的包含:如果
‘customerInfo’
的cust name 包含
“SHIXIN”
List的size:如果
‘customerInfo’
的 history loan 中的元素數量
小於等於
0
List的循環遍歷:
預定義
指定
‘history_loan’
為
一個application_info
來自(
in
)
‘customerInfo’
的 history loan list ;
時間的比較:
如果
‘customerInfo’的 birth day 等於或早於 2012-06-11
以下文章點擊率最高
Loading…