Hoe drools besluit tabel te gebruik in sigblad formaat reëls uit te voer?

Sal die volgende voorbeeld kode beskryf die proses van die gebruik van besluit tafel rules.There uit te voer, is twee maniere

'n) Gebruik die sigblad API om direk die reëls uit te voer.
b) Skakel die Excel sigblad in 'n DRL-lêer en voer dan die reëls.

Ek sal die tweede proses te beskryf (b).







** Die belangrikste Java klas is 'DroolExcelDemo.java. "Eerstens is dit sal die excel sheet omskep in 'n (.DRL) lêer en voer die reëls.




package DROOLS;

invoer java.io.BufferedWriter;
invoer java.io.FileInputStream;
invoer java.io.FileNotFoundException;
invoer java.io.FileWriter;
invoer java.io.IOException;
invoer java.io.InputStream;
invoer java.util.Collection;

invoer org.drools.KnowledgeBase;
invoer org.drools.KnowledgeBaseFactory;
invoer org.drools.builder.KnowledgeBuilder;
invoer org.drools.builder.KnowledgeBuilderFactory;
invoer org.drools.builder.ResourceType;
invoer org.drools.decisiontable.InputType;
invoer org.drools.decisiontable.SpreadsheetCompiler;
invoer org.drools.definition.KnowledgePackage;
invoer org.drools.event.rule.DebugAgendaEventListener;
invoer org.drools.event.rule.DebugWorkingMemoryEventListener;
invoer org.drools.io.ResourceFactory;
invoer org.drools.runtime.StatefulKnowledgeSession;

/**
* Hierdie klas sal 'n DRL lêer skep van excel sheet
* en dan voer die reëls.
*/
public class DroolExcelDemo {
public static finale void main(finale String[] argumente) {
// Skep kennis bouer
finale KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

// Skep DRL lêer vanaf excel sheet
InputStream = null;
probeer {
= new FileInputStream(“D:/Workspace / DroolsDemo / src / DROOLS / DroolExcel.xls”);

} vang (FileNotFoundException e) {
e.printStackTrace();
}
// Skep samesteller klas byvoorbeeld
SpreadsheetCompiler sc = new SpreadsheetCompiler();

// Stel die excel te genereer (.DRL) lêer
StringBuffer DRL = new StringBuffer(sc.compile(is, InputType.XLS));

// Voeg dialek waarde in DRL lêer
drl.insert(drl.indexOf(“DROOLS”)+40,”dialek ”mvel ””+”\n”);

// Gaan die gegenereerde DRL lêer
System.out.println(“Genereer DRL lêer wat hieronder–: “);
System.out.println(DRL);

// skriftelik string in 'n lêer DRL
probeer {
BufferedWriter uit = nuwe BufferedWriter(nuwe FileWriter(“D:/Workspace / DroolsDemo / src / DROOLS / RuleFile.drl”));
out.write(drl.toString());
out.close();
}
vang (IOException e){
System.out.println(“Uitsondering “);
}
// Wag voordat met behulp van die DRL lêer in die volgende afdeling.
probeer {
Thread.sleep(10000);
} vang (InterruptedException e) {
e.printStackTrace();
}
// Einde skepping van DRL lêer vanaf excel sheet

// Gebruik DRL lêer
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

// Kontroleer die bouer vir foute
indien ( kbuilder.hasErrors() ) {
System.out.println(“kbuilder het foute”);
System.out.println( kbuilder.getErrors().toString());
}
// kry die saamgestelde pakkette (wat serialiseerbaar)
finale Versameling pkgs = kbuilder.getKnowledgePackages();

// voeg die pakkette aan 'n knowledge (sit die kennis pakkette).
finale Hulpbron kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(pkgs);

// Skep Stateful sessie
finale StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

// Stel gebeurtenis luisteraars
ksession.addEventListener(nuwe DebugAgendaEventListener());
ksession.addEventListener(nuwe DebugWorkingMemoryEventListener());

// Skep boodskap teks
DroolMessage messagetxt = new DroolMessage();
messagetxt.setMessage(“Vlugnommer”);

DroolMessage messagetxt1 = new DroolMessage();
messagetxt1.setMessage(“FlightCode”);

// INSERT INTO sessie en vuur reëls
System.out.println(“voeg in sessie”);
ksession.insert(messagetxt);
ksession.insert(messagetxt1);
System.out.println(“voor die vuur reëls”);
ksession.fireAllRules();
System.out.println(“na die vuur reëls”);
ksession.dispose();
System.out.println(“na vervreem”);
}
}








* *Die tweede lêer is 'DroolMessage.java’ pojo klas. Dit hou die waardes wat deur die hoof java klas hierbo beskryf.

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
openbare DroolMessage() {
System.out.println(“inisialisering Boodskap”);
}
// Opstoker en getter metodes
public String getMessage() {
terugkeer boodskap;
}
public void setMessage(String boodskap) {
this.message = Boodskap;
}
// toets metode om die reël uitvoering te toets
public void toets(String toets) {
System.out.println(“Parsing begin en einde posisie: “+toets);
}
}

** Die volgende is 'n reël lêer gegenereer deur die "DroolExcelDemo.java’ klas.

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

// reël waardes by B13, header by B7
regeer “DroolExcelRule_13”
wanneer
msg:DroolMessage(boodskap == “FlightCode”)
dan
msg.test(“7,8”);
einde

** Volgende is die inset uitblink gebaseerde reël lêer na die "DroolExcelDemo.java’ klas bo.


15 thoughts on “Hoe drools besluit tabel te gebruik in sigblad formaat reëls uit te voer?

    1. Kaushik Post author

      Hi Daniel,

      Thanks for your interest. Please let me know your exact requirement. I will send you the excel sheet.

      Cheers
      /KP

    1. Kaushik Post author

      Hi Aakash,

      Please send me your exact requirement. I will try my best to help you out.

      Thanks,
      Techalpine

  1. Manideepa

    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

  2. Kaushik Post author

    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

  3. Nithya Kathiresan

    Hi,
    Do you know how to use the spread sheet APIs directly to execute the rules?

    Thanks,
    Nithya

  4. sunil

    Could you please provide a DRL example where I could get the data from Database and update the fact .

  5. Ananya

    Hi,

    Could you please share the excel ? I want to match a string of numbers or rather search string in another string

    Thanks

  6. Shekhar Shaw

    Hello,
    While I am trying to execute, it is raising a file not found error while processing below line.

    // Gebruik DRL lêer
    kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

    Could you please suggest what else I need to do.

    Regards,
    Shekhar Shaw

    1. Kaushik Post author

      Hallo Shekhar,

      Jy moet seker maak dat beide die .drl en CLASS lêers is beskikbaar. Gaan asseblief en laat my weet as jy 'n probleem in die gesig staar.

      Please mail me @ techalpineit@gmail.com

      Thanks
      Kaushik

  7. Rahul Pandey

    hi
    it is very good blog i executed. but i want to generate Rule file template automatically without adding any Rule file.

============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share