如何使用Drools決策表的電子表格格式,執行規則?

下面的示例代碼將介紹使用決策表的過程中,執行rules.There兩種方法

一) 使用試算表的API直接執行規則.
b) 成drl文件轉換為Excel試算表,然後執行規則.

我將介紹第二個過程 (b).







** 主要的Java類是“DroolExcelDemo.java”。首先,它會轉換成Excel工作表 (.DRL) 文件,然後執行規則.




package DROOLS;

進口java.io.BufferedWriter;
進口java.io.FileInputStream;
進口java.io.FileNotFoundException;
進口java.io.FileWriter;
進口java.io.IOException異常;
進口的java.io.InputStream;
進口的java.util.Collection;

進口org.drools.KnowledgeBase;
進口org.drools.KnowledgeBaseFactory;
進口org.drools.builder.KnowledgeBuilder;
進口org.drools.builder.KnowledgeBuilderFactory;
進口org.drools.builder.ResourceType;
進口org.drools.decisiontable.InputType;
進口org.drools.decisiontable.SpreadsheetCompiler;
進口org.drools.definition.KnowledgePackage;
進口org.drools.event.rule.DebugAgendaEventListener;
進口org.drools.event.rule.DebugWorkingMemoryEventListener;
進口org.drools.io.ResourceFactory;
進口org.drools.runtime.StatefulKnowledgeSession;

/**
* 這個類將創建一個的drl文件從Excel工作表
* 然後執行規則.
*/
公共類DroolExcelDemo的 {
公共靜態無效的主要(最後的字符串[] 參數) {
// 創建知識生成器
最後KnowledgeBuilder kbuilder KnowledgeBuilderFactory.newKnowledgeBuilder();

// 從Excel工作表中創建drl文件
InputStream是= NULL;
嘗試 {
是=新的文件輸入流(“ð:/工作區/ DroolsDemo的/ src目錄/流口水/ DroolExcel.xls的”);

} 抓 (FileNotFoundExceptionË) {
e.printStackTrace();
}
// 創建編譯器類的實例
SpreadsheetCompiler SC =新SpreadsheetCompiler();

// 編譯的excel生成的 (.DRL) 文件
StringBuffer的DRL =新的StringBuffer(sc.compile(是, InputType.XLS));

// 將方言價值drl文件
drl.insert(drl.indexOf(“流口水”)+40,”方言”MVEL ””+”\Ň”);

// 檢查生成的drl文件
System.out.println(“生成DRL文件下方顯示–: “);
System.out.println(DRL);

// 寫入字符串轉換成一個drl文件
嘗試 {
的BufferedWriter出新的BufferedWriter(新的FileWriter中(“ð:/工作區/ DroolsDemo的/ src目錄/流口水/ RuleFile.drl的”));
out.write(drl.toString());
out.close();
}
抓 (IOException異常Ë){
System.out.println(“例外 “);
}
// 在下一節中使用drl文件前的等待.
嘗試 {
視頻下載(10000);
} 抓 (InterruptedException的Ë) {
e.printStackTrace();
}
// 從Excel工作表中創建的drl文件結束

// 使用DRL文件
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

// 檢查製造商的錯誤
如果 ( kbuilder.hasErrors() ) {
System.out.println(“kbuilder有誤。”);
System.out.println( kbuilder.getErrors().的toString());
}
// 得到編譯的軟件包 (這是序列化)
最後收集PKGS = kbuilder.getKnowledgePackages();

// 添加軟件包的知識庫 (部署知識包).
最後知識庫kbase KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(PKGS);

// 創建有狀態會話
最終StatefulKnowledgeSession ksession的kbase.newStatefulKnowledgeSession();

// 設置事件偵聽器
ksession.addEventListener(新DebugAgendaEventListener());
ksession.addEventListener(新DebugWorkingMemoryEventListener());

// 創建消息文本
DroolMessage messagetxt新DroolMessage();
messagetxt.setMessage(“航班號”);

DroolMessage messagetxt1新DroolMessage();
messagetxt1.setMessage(“FlightCode”);

// 插入到會話和消防規則
System.out.println(“插入會話”);
ksession.insert(messagetxt);
ksession.insert(messagetxt1);
System.out.println(“發射前規則”);
ksession.fireAllRules();
System.out.println(“燒成後的規則”);
ksession.dispose();
System.out.println(“後處理”);
}
}








* *第二個文件是“DroolMessage.java’ POJO類. 它擁有上述主要的Java類設置的值.

package DROOLS;
/**
* This is a POJO for messages.It will be used by the drl file.
* The message values will be set from the DroolExcelDemo class
*/
public class DroolMessage {
// Create variable
private String message;

// 生成器
公共DroolMessage() {
System.out.println(“初始化信息”);
}
// setter和getter方法
公共字符串GETMESSAGE的() {
返回消息;
}
公共無效setMessage(String消息) {
this.message =消息;
}
// 測試方法測試的規則的執行
公共無效測試(字符串測試) {
System.out.println(“解析的開始和結束位置: “+測試);
}
}

** 以下是規則文件所產生的“DroolExcelDemo.java’ 類.

package DROOLS;
//generated from Decision Table
dialect "mvel"
import DroolMessage;
// rule values at B12, header at B7
rule "DroolExcelRule_12"
when
msg:DroolMessage(message == "FlightNumber")
then
msg.test("1,6");
end

// 在B13的規則值, 在B7頭
排除 “DroolExcelRule_13”
何時
味精:DroolMessage(消息== “FlightCode”)
然後
msg.test(“7,8”);
結束

** 下面是輸入基於Excel的規則文件“DroolExcelDemo.java’ 級以上.


15 認為「如何使用Drools決策表的電子表格格式,執行規則?

    1. KAUSHIK 文章作者

      Hi Daniel,

      Thanks for your interest. Please let me know your exact requirement. I will send you the excel sheet.

      Cheers
      /KP

    1. KAUSHIK 文章作者

      Hi Aakash,

      Please send me your exact requirement. I will try my best to help you out.

      謝謝,
      Techalpine

  1. KAUSHIK 文章作者

    Hi Manideepa,

    The excel sample is already shown in the post. You can use it as it is. If you have some other requirement, do let me know. I would love to help you sort the issues.

    謝謝
    /KP

  2. 專一

    Hi,

    能否請你分享的Excel ? 我想匹配一串數字或者說搜索字符串在另一個字符串

    謝謝

  3. 謝卡爾·肖

    您好,
    當我試圖執行, 它是提高一個文件中沒有發現錯誤,同時處理以下線.

    // 使用DRL文件
    kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

    能否請你建議我還有什麼需要做的.

    Regards,
    謝卡爾·肖

  4. 拉胡爾·潘迪


    這是非常好的博客我執行. 但我想,不添加任何規則文件自動生成規則文件模板.

============================================= ============================================== 在亞馬遜上購買最佳技術書籍,en,電工CT Chestnutelectric,en
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share