Следећи пример код ће описати процес коришћења одлуку табелу да изврши рулес.Тхере су два начина
a) Користите АПИ ширење листова директно да изврши правила.
б) Конвертовање екцел ширење лист у ДРЛ датотеку, а затим изврши правила.
Ја ћу описати други процес (б).
** Главни јава класа 'ДроолЕкцелДемо.јава "Прво ће се конвертовати у екцел лист. (.дрл) датотеку, а затим изврши правила.
package DROOLS;
увоз јава.ио.БуффередВритер;
увоз јава.ио.ФилеИнпутСтреам;
увоз јава.ио.ФилеНотФоундЕкцептион;
увоз јава.ио.ФилеВритер;
увоз јава.ио.ИОЕкцептион;
увоз јава.ио.ИнпутСтреам;
увоз јава.утил.Цоллецтион;
увоз орг.дроолс.КновледгеБасе;
увоз орг.дроолс.КновледгеБасеФацтори;
увоз орг.дроолс.буилдер.КновледгеБуилдер;
увоз орг.дроолс.буилдер.КновледгеБуилдерФацтори;
увоз орг.дроолс.буилдер.РесоурцеТипе;
увоз орг.дроолс.децисионтабле.ИнпутТипе;
увоз орг.дроолс.децисионтабле.СпреадсхеетЦомпилер;
увоз орг.дроолс.дефинитион.КновледгеПацкаге;
увоз орг.дроолс.евент.руле.ДебугАгендаЕвентЛистенер;
увоз орг.дроолс.евент.руле.ДебугВоркингМемориЕвентЛистенер;
увоз орг.дроолс.ио.РесоурцеФацтори;
увоз орг.дроолс.рунтиме.СтатефулКновледгеСессион;
/**
* Ова класа ће креирати ДРЛ датотеку из екцел листа
* а затим изврши правила.
*/
публиц цласс ДроолЕкцелДемо {
публиц статиц воид маин(коначни Стринг[] аргс) {
// Направи Креатор знања
коначни КновледгеБуилдер кбуилдер = КновледгеБуилдерФацтори.невКновледгеБуилдер();
// Направи ДРЛ датотеку из екцел листа
ИнпутСтреам је = нулл;
пробати {
је = нови ФилеИнпутСтреам(“Д:/Воркспаце / ДроолсДемо / срц / Дроолс / ДроолЕкцел.клс”);
} улов (ФилеНотФоундЕкцептион е) {
е.принтСтацкТраце();
}
// Креирање инстанце класе компајлер
СпреадсхеетЦомпилер сц = нев СпреадсхеетЦомпилер();
// Саставите Екцел за генерисање (.дрл) фајл
Стринг дрл = нев СтрингБуффер(сц.цомпиле(је, ИнпутТипе.КСЛС));
// Убаците вредност дијалект у ДРЛ фајл
дрл.инсерт(дрл.индекОф(“Дроолс”)+40,”дијалект ”мвел ””+”\н”);
// Проверите генерисани ДРЛ фајл
Систем.оут.принтлн(“Направи ДРЛ датотека приказује испод–: “);
Систем.оут.принтлн(дрл);
// писања стринг у ДРЛ фајл
пробати {
БуффередВритер од = нев БуффередВритер(Нови ФилеВритер(“Д:/Воркспаце / ДроолсДемо / срц / Дроолс / РулеФиле.дрл”));
оут.врите(дрл.тоСтринг());
оут.цлосе();
}
улов (ИОЕкцептион е){
Систем.оут.принтлн(“Изузетак “);
}
// Сачекајте пре употребе ДРЛ фајл у следећем одељку.
пробати {
Тхреад.слееп(10000);
} улов (ИнтерруптедЕкцептион е) {
е.принтСтацкТраце();
}
// Крај стварање ДРЛ фајла из екцел листа
// Коришћење ДРЛ фајл
кбуилдер.адд(РесоурцеФацтори.невЦлассПатхРесоурце(“РулеФиле.дрл”, ДроолМессаге.цласс ), РесоурцеТипе.ДРЛ );
// Проверите Буилдер за грешке
ако ( кбуилдер.хасЕррорс() ) {
Систем.оут.принтлн(“кбуилдер има грешке”);
Систем.оут.принтлн( кбуилдер.гетЕррорс().тоСтринг());
}
// добити компајлиране пакете (који су Сериализабле)
Коначни Колекција пкгс = кбуилдер.гетКновледгеПацкагес();
// додају пакете у Знања (распоредити пакете знања).
коначни КновледгеБасе кбасе = КновледгеБасеФацтори.невКновледгеБасе();
кбасе.аддКновледгеПацкагес(пкгс);
// Направи седницу статефул
коначни СтатефулКновледгеСессион ксессион = кбасе.невСтатефулКновледгеСессион();
// Сет слушаоце догађаја
ксессион.аддЕвентЛистенер(Дебуг нови ЕвентЛистенер дневног реда());
ксессион.аддЕвентЛистенер(Нови ДебугВоркингМемориЕвентЛистенер());
// Направите текст поруке
ДроолМессаге мессагеткт = нев ДроолМессаге();
мессагеткт.сетМессаге(“Број лета”);
ДроолМессаге мессагеткт1 = нев ДроолМессаге();
мессагеткт1.сетМессаге(“ФлигхтЦоде”);
// Убаците у сеанси и пожара правила
Систем.оут.принтлн(“убаците седницу”);
ксессион.инсерт(мессагеткт);
ксессион.инсерт(мессагеткт1);
Систем.оут.принтлн(“пре печења правила”);
ксессион.фиреАллРулес();
Систем.оут.принтлн(“после гађања правила”);
ксессион.диспосе();
Систем.оут.принтлн(“након наредбе”);
}
}
* *Други фајл је 'ДроолМессаге.јава’ Појо класа. Она има вредности које је поставио главни јава класе описано.
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;
// Градитељ
јавни ДроолМессаге() {
Систем.оут.принтлн(“иницијализација поруку”);
}
// Сеттер и Геттер методе
Стринг гетМессаге() {
вратите поруку;
}
публиц сетМессаге(Стринг порука) {
тхис.мессаге = поруку;
}
// тест метода за тестирање извршење правила
публиц тест(Гудачки Тест) {
Систем.оут.принтлн(“Рашчлањивање почетак и крај положај: “+тест);
}
}
** Следи правило фајл генерисан од стране "ДроолЕкцелДемо.јава’ класа.
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
// правило вредности на Б13, хеадер на Б7
владају “ДроолЕкцелРуле_13”
када
МСГ:ДроолМессаге(порука == “ФлигхтЦоде”)
онда
мсг.тест(“7,8”);
крај
** Следи унос издвајати заснован правила фајл на "ДроолЕкцелДемо.јава’ класу изнад.
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,
Do you know how to use the spread sheet APIs directly to execute the rules?
хвала,
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.
хвала
/KP
Hi,
Could you please share the excel ? I want to match a string of numbers or rather search string in another string
хвала
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.
хвала
/KP
Hello,
While I am trying to execute, it is raising a file not found error while processing below line.
// Коришћење ДРЛ фајл
кбуилдер.адд(РесоурцеФацтори.невЦлассПатхРесоурце(“RuleFile.drl”, ДроолМессаге.цласс ), РесоурцеТипе.ДРЛ );
Could you please suggest what else I need to do.
Regards,
Shekhar Shaw
Hello Shekhar,
You need to ensure that both the .drl and .class files are available. Please check and let me know if you face any problem.
Please mail me @ techalpineit@gmail.com
хвала
каусхик
hi
it is very good blog i executed. but i want to generate Rule file template automatically without adding any Rule file.