【问题标题】:Drools decision table, "mismatched input '>' in rule "Drools 决策表,“规则中不匹配的输入 '>'”
【发布时间】:2015-08-03 11:12:11
【问题描述】:

我正在使用 Drools 创建决策表,但遇到大于字符 ('>') 的问题。 我在 drools 文档中看到你可以使用 '>' 和 '

专栏是(我还没有足够的声誉来发布图片):

  • |条件|
  • | | (空单元格)
  • |持续时间 >|
  • |持续时间|
  • |50|
  • |200|

问题是架构不允许我获得完整的对象。我只能拥有来自RemoteObject 的一些字段。 所以我能做的就是:

Integer duration = getRemoteObjectDuration();
kSession.insert(duration);
kSession.fireAllRules();

结果:

[6,2]: [ERR 102] Line 6:2 mismatched input '>' in rule "RuleTable_11"
[14,2]: [ERR 102] Line 14:2 mismatched input '>' in rule "RuleTable_12"
[0,0]: Parser returned a null Package

我可以创建一个包含我的字段的虚拟对象,但必须有更好的事情要做。 有人对此有想法吗?

【问题讨论】:

  • 您不能在 CONDITION 正下方有一个空单元格。字段 (!) duration 所在的类的名称是什么?没有什么能比得上“Java 端的整数”。除非在非常特殊的情况下,否则将 Integer 对象作为事实插入是没有用的。
  • 谢谢,我编辑了这篇文章。我尝试使用仅包含我的字段的虚拟对象并且它可以工作,也许这是唯一的解决方案......

标签: java drools


【解决方案1】:

要匹配整数,您可以使用类似

的规则
rule findInt
when
    Integer( $iv: intValue > 42 )
then
    System.out.println( "got an Integer > 42: " + $iv );
end

因此,根据

的电子表格列
CONDITION
Integer
intValue >
- ... -
42

当然,当您有几个 Integer 对象在工作内存中浮动时,这注定会失败,无法识别什么是什么。

对于您的困境,我会创建一个影子对象来保存远程对象的所有字段,而不是单独包装这些字段。

【讨论】:

    【解决方案2】:

    感谢 laune 的评论,我终于让它工作了,但我必须创建一个只包含我需要的字段的自定义对象,并且我在 CONDITION 下写了这个新类的名称。

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 2022-09-24
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      相关资源
      最近更新 更多