Følgende eksempel kode vil beskrive prosessen med å bruke avgjørelse tabellen for å utføre rules.There er to måter
en) Bruk regneark APIer direkte å utføre reglene.
b) Konverter excel regneark til en DRL-fil og deretter utføre reglene.
Jeg vil beskrive den andre prosessen (b).
** Den viktigste java klassen er 'DroolExcelDemo.java'. Først vil konvertere excel ark inn i en (.DRL) fil og deretter utføre reglene.
package DROOLS;
import java.io.BufferedWriter;
importere java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
importere java.io.InputStream;
import java.util.Collection;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
importere org.drools.builder.ResourceType;
import org.drools.decisiontable.InputType;
import org.drools.decisiontable.SpreadsheetCompiler;
importere org.drools.definition.KnowledgePackage;
import org.drools.event.rule.DebugAgendaEventListener;
import org.drools.event.rule.DebugWorkingMemoryEventListener;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
/**
* Denne klassen vil opprette en DRL-fil fra excel-ark
* og deretter utføre reglene.
*/
public class DroolExcelDemo {
public static final void main(String[] args) {
// Skape kunnskap byggmester
endelig KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
// Lag DRL-fil fra excel-ark
InputStream er = null;
prøve {
er = nye FileInputStream(“D:/Arbeidsområde / DroolsDemo / src / sikler / DroolExcel.xls”);
} fange (FileNotFoundException e) {
e.printStackTrace();
}
// Lag kompilatoren klasse eksempel
SpreadsheetCompiler sc = new SpreadsheetCompiler();
// Kompilere excel å generere (.DRL) fil
StringBuffer DRL = new StringBuffer(sc.compile(er, InputType.XLS));
// Sett dialekt verdi i DRL-fil
drl.insert(drl.indexOf(“Drools”)+40,”dialekt ”mvel ””+”\n”);
// Sjekk den genererte DRL-filen
System.out.println(“Generer DRL-fil viser under–: “);
System.out.println(DRL);
// skrive streng i en DRL-fil
prøve {
BufferedWriter ut = nye BufferedWriter(ny FileWriter(“D:/Arbeidsområde / DroolsDemo / src / sikler / RuleFile.drl”));
out.write(drl.toString());
out.close();
}
fange (IOException e){
System.out.println(“Unntak “);
}
// Vent før du bruker DRL-filen i neste avsnitt.
prøve {
Thread.sleep(10000);
} fange (InterruptedException e) {
e.printStackTrace();
}
// Slutt etableringen av DRL-fil fra excel-ark
// Bruke DRL-fil
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );
// Sjekk byggherre for feil
hvis ( kbuilder.hasErrors() ) {
System.out.println(“kbuilder har feil”);
System.out.println( kbuilder.getErrors().toString());
}
// få utarbeidet pakker (som er serializable)
endelige Collection pkgs = kbuilder.getKnowledgePackages();
// legge pakkene til en kunnskapsbase (distribuere kunnskap pakker).
endelig KnowledgeBase KBase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(pkgs);
// Lag stateful økten
endelig StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
// Still event lyttere
ksession.addEventListener(new DebugAgendaEventListener());
ksession.addEventListener(ny DebugWorkingMemoryEventListener());
// Opprett meldingstekst
DroolMessage messagetxt = new DroolMessage();
messagetxt.setMessage(“Flightnummer”);
DroolMessage messagetxt1 = new DroolMessage();
messagetxt1.setMessage(“FlightCode”);
// Sett inn økt og brann regler
System.out.println(“Sett inn økten”);
ksession.insert(messagetxt);
ksession.insert(messagetxt1);
System.out.println(“før avfyring regler”);
ksession.fireAllRules();
System.out.println(“etter avfyring regler”);
ksession.dispose();
System.out.println(“etter kast”);
}
}
* *Den andre filen er en "DroolMessage.java’ POJO klasse. Det holder verdiene som er angitt av de viktigste java klassen beskrevet ovenfor.
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;
// Builder
offentlige DroolMessage() {
System.out.println(“initialisering Melding”);
}
// Setter og getter metoder
public String GetMessage() {
returnere melding;
}
public void setMessage(String melding) {
this.message = melding;
}
// testmetode for å teste regelutførelse
public void test(String test) {
System.out.println(“Parsing start-og sluttposisjon: “+test);
}
}
** Følgende er en regel fil generert av 'DroolExcelDemo.java’ klasse.
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
// regelen verdier på B13, header på B7
herske “DroolExcelRule_13”
når
msg:DroolMessage(melding == “FlightCode”)
deretter
msg.test(“7,8”);
end
** Følgende er innspill excel baserte regelen filen til 'DroolExcelDemo.java’ klasse over.
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.
Takk,
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
Takk,
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.
Takk
/KP
Hi,
Do you know how to use the spread sheet APIs directly to execute the rules?
Takk,
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.
Takk
/KP
Hi,
Could you please share the excel ? I want to match a string of numbers or rather search string in another string
Takk
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.
Takk
/KP
Hello,
While I am trying to execute, it is raising a file not found error while processing below line.
// Bruke DRL-fil
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.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
Takk
Kaushik
hi
it is very good blog i executed. but i want to generate Rule file template automatically without adding any Rule file.