規則引擎的功能和特點是在不改變流程,不重新部署工程的情況下,動態的配置策略信息,修改策略邏輯.達到動態的業務配置目的。
舉一個簡單的例子.一個銷售機構銷售一種商品,當該商品的數量小於100的時候不需要運輸部門負責運輸,則不需要通知運輸部門。但是當大於100的時候則需要運輸部門負責運輸,但有的時候這個100的數量是可變的,有的時候是150,有的時候甚至是200。但是這個數量如果寫在了Code裏,就寫死了。這個時候我們就可以通過業務規則引擎來幫助我們在流程外配置這個屬性。
實現業務規則引擎DEMO:
這裏的schValue代表的是貨物的數量, 業務規則引擎會根據這個數量來判transportDEP的動作,確認該訂單是否達到了需要運輸部門運輸的標準。然後建立訂單計劃這個規則包以供其他外部程序調用。
在這個例子中我們需要用到的規則元素就是schValue和transportDEP,規則元素添加完成後,我們就可以進行業務規則的配置了。
設置以下3中情況:
1:當schValue(貨物數量)爲90時,發送給運輸部門的信息。
2:當schValue(貨物數量)爲200時,發送給運輸部門的信息。
2:當schValue(貨物數量)爲300時,發送給運輸部門的信息。
當決策變爲:貨物數量大於200的時候,那麼需要運輸部門參與,規則配置如下
當決策變爲:貨物數量大於300的時候,那麼需要運輸部門參與,規則配置如下
從上面的規則配置中我們可以看出,如果在某個流程的節點上,我們的決策發生了變化,那我們只需要靈活調整相應的業務規則即可,而不需要去改Code。
使用Java類調用規則包
首先在eclipse的java工程中,點擊屬性設置其路徑。在其屬性窗口的Java Build Path中設置Libraries,通過Add External JARs…加入VisualRules安裝目錄的lib下的engine.jar、jakarta.jar,在通過Add External Class Folder…加入VisualRules安裝目錄下的rules目錄。如下所示:
添加Java測試類
在java工程中添加一個java類,名爲TestHello.java,其內容編輯如下:
import com.flagleader.engine.RuleEngine;
import com.flagleader.engine.RuleEngineFactory;
public class TestHello {
public static void main(String[] args) {
try {
RuleEngine engine = RuleEngineFactory.newInstance().getRuleEngine();
engine.put("schValue", "200");傳入參數
engine.excute("訂單計劃"); //規則包名稱 System.out.println(engine.getString("transportDEP"));傳出參數
} catch (Exception e) {
e.printStackTrace() ;
}
}
}
從上述代碼中可以看出,只需加入上述的代碼,即可完成調用規則包的工作。而流程和節點中的業務人員只需要維護業務規則即可,任何業務決策的改變都不需要來改動代碼