Följande exempelkod kommer att beskriva processen med hjälp av beslut tabellen att genomföra rules.There finns två sätt
en) Använd API kalkylark direkt att verkställa reglerna.
b) Konvertera Excel kalkylark till en DRL-fil och sedan köra regler.
Jag kommer att beskriva den andra processen (b).
** Den huvudsakliga Java-klass är "DroolExcelDemo.java". Först omvandlar Excel-ark till en (.DRL) fil och sedan köra regler.
package DROOLS;
import java.io.BufferedWriter;
importera java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
importera java.io.InputStream;
import java.util.Collection;
importera org.drools.KnowledgeBase;
importera org.drools.KnowledgeBaseFactory;
importera org.drools.builder.KnowledgeBuilder;
importera org.drools.builder.KnowledgeBuilderFactory;
importera org.drools.builder.ResourceType;
import org.drools.decisiontable.InputType;
importera org.drools.decisiontable.SpreadsheetCompiler;
importera org.drools.definition.KnowledgePackage;
import org.drools.event.rule.DebugAgendaEventListener;
import org.drools.event.rule.DebugWorkingMemoryEventListener;
importera org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
/**
* Denna klass kommer att skapa en DRL-fil från Excel-ark
* och sedan köra regler.
*/
public class DroolExcelDemo {
public static slutlig void main(sista String[] args) {
// Skapa Knowledge Builder
sista KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
// Skapa DRL-fil från Excel-ark
InputStream är = null;
prova {
är = ny FileInputStream(“D:/Arbetsyta / DroolsDemo / src / dreglar / DroolExcel.xls”);
} fånga (FileNotFoundException e) {
e.printStackTrace();
}
// Skapa instans kompilator klass
SpreadsheetCompiler fm = ny SpreadsheetCompiler();
// Kompilera excel att generera (.DRL) fil
StringBuffer DRL = ny StringBuffer(sc.compile(är, InputType.XLS));
// Sätt dialekt värde i DRL fil
drl.insert(drl.indexOf(“Dreglar”)+40,”dialekt ”mvel ””+”\n”);
// Kontrollera genererade DRL-filen
System.out.println(“Generera DRL fil Nedan visas–: “);
System.out.println(DRL);
// skriver sträng till en DRL-fil
prova {
BufferedWriter ut = nya BufferedWriter(nya FileWriter(“D:/Arbetsyta / DroolsDemo / src / dreglar / RuleFile.drl”));
out.write(drl.toString());
out.close();
}
fånga (IOException e){
System.out.println(“Undantag “);
}
// Vänta innan använder DRL-filen i nästa avsnitt.
prova {
Thread.sleep(10000);
} fånga (InterruptedException e) {
e.printStackTrace();
}
// Slut skapa DRL-fil från Excel-ark
// Använda DRL-fil
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );
// Kontrollera byggare för fel
om ( kbuilder.hasErrors() ) {
System.out.println(“kbuilder har fel”);
System.out.println( kbuilder.getErrors().toString());
}
// få de kompilerade paket (vilka är serializable)
slutliga Collection PKGS = kbuilder.getKnowledgePackages();
// lägga till paket till en kunskapsbas (distribuera kunskap paketen).
sista KnowledgeBase KBase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(PKGS);
// Skapa tillståndskänslig session
sista StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
// Ställ händelseavlyssnare
ksession.addEventListener(nya DebugAgendaEventListener());
ksession.addEventListener(nya DebugWorkingMemoryEventListener());
// Skapa meddelandetext
DroolMessage messagetxt = ny DroolMessage();
messagetxt.setMessage(“FlightNumber”);
DroolMessage messagetxt1 = ny DroolMessage();
messagetxt1.setMessage(“FlightCode”);
// Sätt in session och eld regler
System.out.println(“infoga i sessionen”);
ksession.insert(messagetxt);
ksession.insert(messagetxt1);
System.out.println(“innan bränning regler”);
ksession.fireAllRules();
System.out.println(“efter bränning regler”);
ksession.dispose();
System.out.println(“efter avyttra”);
}
}
* *Den andra filen är en "DroolMessage.java’ Pojo klass. Den rymmer de värden som de viktigaste Java-klass som beskrivs ovan.
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
offentliga DroolMessage() {
System.out.println(“initiera Meddelande”);
}
// Setter och getter metoder
public String getMessage() {
svarsmeddelande;
}
public void setMessage(String meddelande) {
this.message = meddelande;
}
// testmetod för att testa regeln utförande
public void testet(String testet) {
System.out.println(“Parsing start-och slutpunkt: “+prov);
}
}
** Följande är en regel fil som skapats av "DroolExcelDemo.java’ klass.
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
// regel värden vid B13, rubrik på B7
härska “DroolExcelRule_13”
när
msg:DroolMessage(Meddelandet == “FlightCode”)
sedan
msg.test(“7,8”);
slut
** Följande är ingången Excel-baserad regel filen till "DroolExcelDemo.java’ klass ovanför.
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.
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
/KP
Hi,
Vet du hur man använder API kalkyl direkt att verkställa reglerna?
Thanks,
Nithya
kan du skicka Excel-filen ,Jag vill köra och få resultatet ..??
Kan du ge en DRL exempel där jag kunde få data från databasen och uppdatera det faktum .
hi Sunil,
Du kan använda samma program med en liten modifiering.
Snälla kontakta mig @ techalpineit@gmail.com för ytterligare hjälp.
Thanks
/KP
Hi,
Kan du dela excel ? Jag vill matcha en sträng av siffror eller snarare söka sträng i en annan sträng
Thanks
hi Ananya,
Du kan använda samma data som visas i exempelfilen och göra en själv.
Maila mig @ techalpineit@gmail.com för ytterligare hjälp.
Thanks
/KP
Hallå,
Medan jag försöker köra, det höjer en fil hittades inte fel vid bearbetning under linjen.
// Använda DRL-fil
kbuilder.add(ResourceFactory.newClassPathResource("RuleFile.drl", DroolMessage.class ), ResourceType.DRL );
Kan du föreslå vad jag behöver göra.
Hälsningar,
Shekhar Shaw
hello Shekhar,
Du måste se till att både .drl och .class filer finns. Kontrollera och låt mig veta om du möter några problem.
Maila mig @ techalpineit@gmail.com
Thanks
Kaushik
hi
it is very good blog i executed. but i want to generate Rule file template automatically without adding any Rule file.