当前位置: 首页 > 知识库问答 >
问题:

drools:访问drools excel决策表中的对象

顾乐池
2023-03-14

场景如下:

我有一个java pojo类Name,具有2个变量typename以及适当的getter和setter。我正在使用决策表流,我想要:

条件:当类型设置为“1”时

操作:调用name类的setName setter,并从excel中设置适当的参数

现在,我想在java中访问name的这个集值。

这就是我所做的:

Name.java-

public class Name{


    String name,type;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

MainClass.java-这有口水实现!!

public class MainClass {

    public static StatefulKnowledgeSession session;
    public static KnowledgeBase kbase;
    public static Name name;
    public static void main(String args[])

{   
    init();
    initialiseNameObject();
    fireAllRules();
}

public static void init()
{
    System.out.println("inside init");
    KnowledgeBuilder kbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();
    DecisionTableConfiguration dconf=KnowledgeBuilderFactory.newDecisionTableConfiguration();

    dconf.setInputType(DecisionTableInputType.XLS);
    dconf.setWorksheetName("rulesW");

    kbuilder.add(ResourceFactory.newClassPathResource("/drools.xls",MainClass.class), ResourceType.DTABLE, dconf);

    KnowledgeBuilderErrors errors=kbuilder.getErrors();

    if(!errors.isEmpty())
    {
        System.out.println("Errors in package");
        Iterator i=errors.iterator();
        while(i.hasNext())
        {
            System.out.println("The error: "+i.next());
        }
    }

    kbase=KnowledgeBaseFactory.newKnowledgeBase();

    try
    {
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        session=kbase.newStatefulKnowledgeSession();

        name=new Name();
    }
    catch(Exception e)

    {
        System.out.println("The exception "+e);
    }

}

public static void initialiseNameObject()
{


    System.out.println("insideNameObject");
    name.setType("1");


}

public static void fireAllRules()
{
    System.out.println("inside fire all");

    session.fireAllRules();

    System.out.println(name.getName());

}

决策表e::

http://www.imageurlhost.com/images/tf2m0omib1jkt8wyjra8_Decision.png

问题是我无法获取名称。。始终为空。应该在对象中更新名称,并且我应该将ABCD作为输出。我想它必须对全局实例做些什么!!

共有1个答案

淳于鹏
2023-03-14

你的代码对我来说毫无意义。主要问题之一是,在创建StatefulKnowledgeSession之后,没有在会话中插入任何对象。如果没有任何东西,我怀疑Drool能做什么。

尝试执行以下操作:

name.setType(1);
session.insert(name);    // Important! Drools need the objects to work on 
                         // inserted to session
session.fireAllRules();

然后在决策表中,将操作更改为namea。设置名称($参数)

我相信在这样的变化之后它应该会起作用

 类似资料:
  • 我在DRL文件中有以下代码 终止 这是工程,但我需要将其转换为电子表格。我尝试了这么多的变体,但没有一个有效。如何在决策表中写入此规则?

  • 当我尝试使用Drools引擎计算保险费时,我有一个潜在的性能/内存瓶颈。 我在我的项目中使用Drools将业务逻辑与java代码分开,我决定也将其用于溢价计算。 我是不是用错了口水 如何以更高性能的方式满足要求 详情如下: 我必须为给定的合同计算保险费。 合约配置有 productCode(来自字典的代码) 合同代码(来自字典的代码) 客户的个人资料(例如年龄、地址) 保险金额(SI) 等等 目前

  • 我对口水和决策表还不熟悉。我需要创建一个规则,使用规则中的人的年龄来测试一个人是否年长/年轻。该规则在无限循环中工作。 这是规则,是基本的,人的年龄 我的角色类是一个简单的POJO,用于测试决策表: Person类(静态,在主类中): 我的主要方法是在JRE 1.7中使用drools 6.5: 这是无限循环的输出。 感谢您提供的任何提示、链接、教程等。

  • 我在excel电子表格中有一个drools决策表,其中有两条规则。(此示例已大大简化,我正在使用的示例有更多规则。) 我的目标是让规则自上而下地触发,随后的规则可能取决于早期规则对事实/对象所做的更改。 这个问题有解决办法吗?任何帮助都将不胜感激,谢谢!

  • 我有一个drools决策表,其中包含条件和位置类型 我的excel如下所示 设置参数的代码如下 我按要求提供的excel文件条件对象: 需求级别==$参数位置类型==$参数 当我像上面那样设置时,我得到以下错误: 创建KieBase时出错[消息[id=1,级别=错误,路径=规则.xls,行=8,列=0文本=[错误102]行8:14不匹配的输入'=='在规则“替换规则”中],消息[id=2,级别=错

  • 我很难找到一条我知道有效的规则。drl表单,用于在决策表中工作。 这是我的drl形式的规则: 以下是我在电子表格中尝试的内容: 当我尝试从电子表格中运行规则时,我遇到以下错误: from子句似乎有问题,但我不知道为什么。我尝试了无数次谷歌搜索,这是我唯一能找到的:http://drools-moved.46999.n3.nabble.com/Question-on-excel-decision-t