如何使用Drools决策表的电子表格格式,执行规则?

下面的示例代码将介绍使用决策表的过程中,执行rules.There两种方法

一) 使用试算表的API直接执行规则.
b) 成drl文件转换为Excel试算表,然后执行规则.

我将介绍第二个过程 (b).







** 主要的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();

// 从Excel工作表中创建drl文件
InputStream是= NULL;
尝试 {
是=新的文件输入流(“ð:/工作区/ DroolsDemo的/ src目录/流口水/ DroolExcel.xls的”);

} 抓 (FileNotFoundExceptionË) {
e.printStackTrace();
}
// 创建编译器类的实例
SpreadsheetCompiler SC =新SpreadsheetCompiler();

// 编译的excel生成的 (.DRL) 文件
StringBuffer的DRL =新的StringBuffer(sc.compile(是, InputType.XLS));

// 将方言价值drl文件
drl.insert(drl.indexOf(“流口水”)+40,”方言”MVEL ””+”\Ň”);

// 检查生成的drl文件
System.out.println(“生成DRL文件下方显示–: “);
System.out.println(DRL);

// 写入字符串转换成一个drl文件
尝试 {
的BufferedWriter出新的BufferedWriter(新的FileWriter中(“ð:/工作区/ DroolsDemo的/ src目录/流口水/ RuleFile.drl的”));
out.write(drl.toString());
out.close();
}
抓 (IOException异常Ë){
System.out.println(“例外 “);
}
// 在下一节中使用drl文件前的等待.
尝试 {
视频下载(10000);
} 抓 (InterruptedException的Ë) {
e.printStackTrace();
}
// 从Excel工作表中创建的drl文件结束

// 使用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();

// 添加软件包的知识库 (部署知识包).
最后知识库kbase KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(PKGS);

// 创建有状态会话
最终StatefulKnowledgeSession ksession的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(“初始化信息”);
}
// setter和getter方法
公共字符串GETMESSAGE的() {
返回消息;
}
公共无效setMessage(String消息) {
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”
何时
味精:DroolMessage(消息== “FlightCode”)
然后
msg.test(“7,8”);
结束

** 下面是输入基于Excel的规则文件“DroolExcelDemo.java’ 级以上.


15 thoughts on “如何使用Drools决策表的电子表格格式,执行规则?

    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. 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

  2. 专一

    Hi,

    能否请你分享的Excel ? 我想匹配一串数字或者说搜索字符串在另一个字符串

    Thanks

  3. 谢卡尔·肖

    Hello,
    当我试图执行, 它是提高一个文件中没有发现错误,同时处理以下线.

    // 使用DRL文件
    kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

    能否请你建议我还有什么需要做的.

    Regards,
    谢卡尔·肖

  4. 拉胡尔·潘迪


    这是非常好的博客我执行. 但我想,不添加任何规则文件自动生成规则文件模板.

============================================= ============================================== 在亚马逊上购买最佳技术书籍,en,电工CT Chestnutelectric,en
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share