下面的示例代碼將介紹使用決策表的過程中,執行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’ 級以上.
Hi, could you send me DroolExcel.xls file?
thank you!
Hi Daniel,
Thanks for your interest. Please let me know your exact requirement. I will send you the excel sheet.
Cheers
/KP
Hi, could you send me DroolExcel.xls file? I just want to run this code and want to get result
my email
dahalram20@gmail.com
Hi Aakash,
Please send me your exact requirement. I will try my best to help you out.
謝謝,
Techalpine
Hi,
Can you please share the DroolExcel.xls file?
I wanted to execute this program. I am new to Drools and wanted to understand how it works.
My email address: b4umani2003@gmail.com
謝謝,
Mani
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
Hi,
你知道如何使用電子表格的API直接執行規則?
謝謝,
Nithya
你可以請發送Excel文件 ,我想運行並得到結果..??
能否請您提供一個DRL例子,我可以從數據庫獲取數據並更新事實 .
蘇尼爾喜,
可以使用相同的程序用少許修改.
請與我聯繫@ techalpineit@gmail.com 為進一步幫助.
謝謝
/KP
Hi,
能否請你分享的Excel ? 我想匹配一串數字或者說搜索字符串在另一個字符串
謝謝
專一喜,
您可以使用相同的數據,如圖中的樣本文件,做一個為自己.
請寄給我@ techalpineit@gmail.com 為進一步幫助.
謝謝
/KP
您好,
當我試圖執行, 它是提高一個文件中沒有發現錯誤,同時處理以下線.
// 使用DRL文件
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );
能否請你建議我還有什麼需要做的.
Regards,
謝卡爾·肖
您好謝卡爾,
您需要確保,無論是.drl和.class文件都可以. 請讓我知道,如果你面對任何問題.
請寄給我@ techalpineit@gmail.com
謝謝
考希克
嗨
這是非常好的博客我執行. 但我想,不添加任何規則文件自動生成規則文件模板.