drools规则从地图获取价值

时间:2011-10-14 07:35:27

标签: drools drools-flow drools-planner

如何在阻止时获得drools中的特定值。

我正在寻找类似的东西,但它不起作用:

我已将Hashmap插入工作内存并尝试在When

中检索它
$expiry_date:HashMap(get("CREDIT_CARD_EXPIRATION_DATE"));
eval(ageInDays($expiry_date)>10) ;

我得到以下错误

[42,37]: [ERR 101] Line 42:37 no viable alternative at input '"CREDIT_CARD_EXPIRATION_DATE"' in rule "Rule1" in pattern HashMap

2 个答案:

答案 0 :(得分:4)

对于maps / lists / arrays,您可以使用[]语法访问元素。此外,如果你使用的是Drools 5.3+,那么evals现在基本上无关紧要了。

rule X
when
    HashMap( ageInDays(this["CREDIT_CARD_EXPIRATION_DATE"]) > 10 )
then
    ...
end

使用Drools 5.1 / 5.2,你可以这样做:

rule X
when
    HashMap( eval( ageInDays(this["CREDIT_CARD_EXPIRATION_DATE"]) > 10 ) )
then
    ...
end

答案 1 :(得分:0)

通常最好插入更多类型的对象,而不仅仅是哈希映射。您能解释一下您尝试处理的信息吗?为什么选择插入hashmap而不是typed object

我很确定你可以这样做:

HashMap($expire: keys["CREDIT_CARD_EXPIRATION_DATE"] )
eval(ageInDays($expire) > 10)

我没有测试它,但如果你不能插入更多类型的事实,你应该朝那个方向看。 干杯