2015-08-03 46 views
1

我使用Drools创建决策表,并且遇到大于字符('>')的问题。 我在Drools文档中看到,您可以使用'>'和'<',但我似乎出错了。Drools决策表,“规则中输入不匹配”>'

列是(我没有足够的声誉还没有发表图片):

  • |条件|
  • | | (空单元格)
  • | duration> |
  • |时长|
  • | 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 

我可以创建一个包含我的领域为虚拟对象,但必须有更好的东西做的。 有没有人有这个想法?

+0

CONDITION下面不能有空单元格。 field(!)'duration'所在类的名称是什么?没有什么像“Java方面的整数”。将Integer对象作为事实插入除非在特殊情况下才有用。 – laune

+0

谢谢,我编辑了这篇文章。我试着用一个只包含我的领域的虚拟对象,它的工作原理,也许这是唯一的解决方案... –

回答

1

要匹配一个整数,你可以使用规则像

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

,因此,根据

CONDITION 
Integer 
intValue > 
- ... - 
42 

电子表格列这是当然的,注定当你有几个失败整数对象在工作内存中浮动,无法识别什么是内容。

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

0

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