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

激活Drools中子对象的规则

徐学潞
2023-03-14

我有两个事实,分别命名为OptionalCover和OptionalPremiumComponent,其中有OptionalPremiumComponent的参考。这就是我在工作记忆中插入的内容。

private static OptionalCover getOptionalCover(Double sumAssured, Double premiumRate) {
    OptionalPremiumComponent premiumComponent = new OptionalPremiumComponent();
    premiumComponent.setSumAssured(sumAssured);
    premiumComponent.setPremiumRate(premiumRate);

    OptionalCover optionalCover = new OptionalCover();
    optionalCover.setPremiumComponent(premiumComponent);
    return optionalCover;
}

kieSession.insert(getOptionalCover(1000000.0, 0.02));

我在drools中创建了以下规则

import java.lang.Number;

rule "OptionalCoverCalculation"
    dialect "java"
    when
        opc : OptionalPremiumComponent( sumAssured > 1I && sumAssured != null && premiumRate != null && premiumRate > 0.0 )
    then
        opc.setPremium( opc.getSumAssured() * 0.001 * opc.getPremiumRate() );
        System.out.println("Here");
end

问题是,插入父对象时没有触发上述规则。我还需要做些什么来实现这种行为吗?是否支持?

谢谢你。

共有1个答案

鲜于璞瑜
2023-03-14

Drools引擎无法判断您的盖子是否包含部件。(好吧,它有,因为它可能使用反射-但它应该在哪里停止?)

因此,您还必须插入OptionalPremiumComponent。

为了减少代码中的混乱程度,您可以编写一些巧妙的方法,以便只需一次调用即可插入封面和组件。例如,如果您有许多类似的“包含”关系,并且如果您想自由地进行推理,那么您可以实现s.th。喜欢

interface FactContainer {
     List<Object> factChildren(); -- return all contained fact objects
     -- OR --
     void insertAll( KieSession ks );
}

其中factUNICEF将返回一个带有PremumComponent的List或一个空List,或者,另一种方法是一个在内部处理所有内容的intertAll。

 类似资料:
  • 在我的场景中,我有两个excel电子表格(sheet1和sheet2),其中包含两个单独的决策表。在表1中,规则如下所示: 因此,如果a==1,b==2,将d设置为1,则设置d的命令是:<代码>修改(输入){setD(1)} Sheet2如下所示: 两个文件具有相同的ACTIVATION-GROUP(激活1)和相同的AGENDA-GROUP(议程1) 我使用的输入: 我希望为这两条规则中的每一条创

  • 在drool引擎中,如何在THEN部分中将新对象作为响应填充?我希望用另一个专用对象返回答案,而不是LiabilityRequestDto。谢谢你的帮助

  • 我是Drools Fusion的新手,我想知道为什么我的规则不总是被取消。我用的是Drools 6.3。以下是我要插入的事件: 这是我的规则文件: 这是我的输出: 我预计我的规则将触发2次,并给出以下输出: 我可能忽略了一些事情,但我没有找到关于我的问题的太多信息。有人能解释一下这里到底发生了什么吗?非常感谢。

  • 我有一个学生班,它有相关部门的列表。 我正在尝试用Drools编写规则。规则就像-如果一个学生属于某些部门,那么就采取行动。我无法找出正确的方法来做这件事。我在下面写的一个不起作用。我知道如果它的字符串列表有效。有没有办法在自定义对象上做包含。 终止 调用规则的代码 我正在使用Drools 6.2版本。

  • 我使用Kie Workbench学习口水。我的输入将是opportunityProduct类中的名称,我希望在Opportunity类中的Ip中得到输出。在规则引擎执行之后,我在输出中只得到null值。 Pojo结构: 输入: 输出: 决策表: Drl: 我无法确定我的输入是否错误或决策表中的条件是否错误。

  • 结束 当我通过ksession.insert(Object)将一些人插入工作记忆时,只计算第一个人,忽略其他的人。我对Drools激活组的理解是,如果我有X个规则,这些规则属于同一个激活组,具有不同的显着性值,那么每个人都将被规则处理,显着性最高的将被激发,其余的将被忽略。一旦完成,下一个人将通过并重复这个过程。我所经历的是,第一个触发该激活组中任何规则的人将禁用整个激活组,不再处理其他人员。有什