Drools from the clause not working

时间:2014-09-22 15:55:14

标签: drools

from子句的最基本用法不起作用,即使我知道列表中有元素,并且没有条件从该列表中提取元素,并且我有其他规则正常工作。

发生了什么,我的问题中有很多变量,但我已简化为:

有了这两个规则,第一个规则就是fixedShipmentValueData列表,至少有一个元素。但是,第二个规则没有被触发,即使它与第一个规则唯一不同的是使用from子句并放置一个变量名。

rule "Print list value"
ruleflow-group "fixed-values"
no-loop
    when
        cParams: CustomerParameters(list: fixedShipmentValueData)
    then
        System.out.format("There are %s elements at fixedShipmentValue and fixed value is %s%n",list.size(), 
        ((ParameterValues)list.get(0)).getFixedShipmentValue());
end

rule "Do something with the list"
ruleflow-group "fixed-values"
no-loop
    when
        cParams: CustomerParameters(list: fixedShipmentValueData)
        ParameterValues($fixedShipmentValue: fixedShipmentValue) from list
    then
        System.out.format("fixed Shipment Value is %s%n", $fixedShipmentValue);
end

这看起来很简单......我已经花了足够的时间没有想法。

1 个答案:

答案 0 :(得分:0)

没有看到CustomerParameters的Java代码,ParameterValues以及创建,编写和插入事实的应用程序部分,我知道只有一个场景可以像你告诉它那样重现效果。考虑一下:

{X}中的List<Base>是字段list。子类SubASubB都延伸Base。创建X,将类SubA的对象添加到list。规则(如&#34;打印列表值&#34;)将显示列表不为空。

但是,使用

等模式的规则
X( $list: list )
SubB() from $list

永远不会触发,因为Base.list中没有SubB&#。