У наступному прикладі буде описаний процес використання таблиці рішень для виконання rules.There два способи
a) За допомогою API-інтерфейсів електронних таблиць безпосередньо виконувати правила.
б) Перетворення аркуша Excel поширення в файл DRL, а потім виконати правила.
Я опишу другий процес (б).
** Основний клас 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();
// Створіть файл DRL з листової Excel
InputStream є = NULL;
спробувати {
= Це нова FileInputStream(“D:/Робочий простір / DroolsDemo / SRC / Drools / DroolExcel.xls”);
} зловити (FileNotFoundException електронної) {
e.printStackTrace();
}
// Створити екземпляр класу компілятор
SpreadsheetCompiler SC = новий SpreadsheetCompiler();
// Компіляція Excel для створення (.DRL) файл,
StringBuffer DRL = новий StringBuffer(sc.compile(є, InputType.XLS));
// Вставте діалекті значення у файлі DRL
drl.insert(drl.indexOf(“Drools”)+40,”Діалект ”mvel ””+”\п”);
// Перевірте створений файл DRL
System.out.println(“Створити файл DRL показує нижче–: “);
System.out.println(DRL);
// написання рядок у файл DRL
спробувати {
BufferedWriter з = новий BufferedWriter(нові FileWriter(“D:/Робочий простір / DroolsDemo / SRC / Drools / RuleFile.drl”));
out.write(drl.toString());
out.close();
}
зловити (IOException електронної){
System.out.println(“Виняток “);
}
// Почекайте, перш ніж використовувати файл DRL в наступному розділі.
спробувати {
Thread.sleep(10000);
} зловити (InterruptedException електронної) {
e.printStackTrace();
}
// Кінець створення файлу DRL з листа Excel
// Використання файлів 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();
// додати пакети в базі знань (Розгортання знань пакетів).
Остаточний KnowledgeBase KBase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(PKGS);
// Створення сеансових
Остаточний ksession StatefulKnowledgeSession = 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(“ініціалізація повідомлення”);
}
// Сетер і методи отримання
громадських струнного GetMessage() {
повернути повідомлення;
}
громадського недійсними setMessage(Струнний повідомлення) {
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”
коли
MSG:DroolMessage(Повідомлення == “FlightCode”)
потім
msg.test(“7,8”);
кінець
** Нижче вхідного перевершують файлів на основі правила "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
/КП
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.
Thanks,
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
Thanks,
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.
Thanks
/КП
Hi,
Do you know how to use the spread sheet APIs directly to execute the rules?
Thanks,
Nithya
can you please send the excel file ,i want to run and get the result..??
Could you please provide a DRL example where I could get the data from Database and update the fact .
Hi Sunil,
You can use the same program with a little modification.
Please contact me @ techalpineit@gmail.com for further help.
Thanks
/КП
Hi,
Could you please share the excel ? I want to match a string of numbers or rather search string in another string
Thanks
Hi Ananya,
You can use the same data as shown in the sample file and make one for yourself.
Please mail me @ techalpineit@gmail.com for further help.
Thanks
/КП
Здравствуйте,
У той час як я намагаюся виконати, він піднімає файл не знайдено помилку при обробці нижче лінії.
// Використання файлів DRL
kbuilder.add(ResourceFactory.newClassPathResource("RuleFile.drl", DroolMessage.class ), ResourceType.DRL );
Чи не могли б ви запропонувати, що ще мені потрібно зробити.
Regards,
Шекхар Шоу
Привіт Шекхар,
Ви повинні переконатися, що обидва .drl і .class файли доступні. Будь ласка, перевірте і дайте мені знати, якщо ви стикаєтеся будь-яку проблему.
Please mail me @ techalpineit@gmail.com
Thanks
Кошик
hi
it is very good blog i executed. but i want to generate Rule file template automatically without adding any Rule file.