Drools 6.2Final
我正在使用带有以下表达式的决策表
<row 10> CONDITION
<row 12> classList $param
包含
的行<row 43> (contains('AAA') || contains('BBB') ) && contains('CCC') <--fails to compile
<row 44> (contains('AAA') || contains('BBB')
<row 45> (contains('AA') || contains('BB') || contains('CCC') || contains('DDD')
其中事实classList是
List<String> classList = {'AAA', 'BB'.....}
如果列表包含“AAA”和“#39”,则触发规则43。或者&#39; BBB&#39;和&#39; CCC&#39;
但是决策表解析器失败,但规则43
除外[Error: Missing left node]
[Near : {... classList (contains("AAA") || contains("CCC")) ....}]
我有一个类似的规则适用于其他行
<row 42> contains('AAA') || contains('BBB') || contains('CCC')
在组条件中使用contains运算符似乎有些奇怪。关于如何正确表达的任何想法?
感谢
-lp
答案 0 :(得分:0)
表条目看起来不对我,你没有显示classList
的Java代码 - 解释&#34;是List<String>
&#34;很暧昧。
如果插入了类List<Integer>
的事实,则以下条件条目正常(5.5.0):
CONDITION
List
this (contains $1 || contains $2) && contains $3
match some funny numbers
42, 142, 100
如果列表在班级intList
中为字段SomeClass
,则可以使用
CONDITION
SomeClass
intList (contains $1 || contains $2) && contains $3
match some funny numbers
42, 142, 100
注意:我显示列的前四行加一行来触发规则的创建。
编辑以显示其他变体正在运行:
CONDITION
$x: Country()
cities $param
match values in a List
(contains 'Rome' || contains 'Milan') && contains 'Naples'
编译规则是
rule "match cities"
when
$x: Country(cities (contains 'Rome' || contains 'Milan') && contains 'Naples')
then
//...
end
令人讨厌的是,您不能使用引号(&#34;)来分隔字符串文字,但撇号可以正常工作。
如果这在6.2.0中不起作用,那就是回归,您应该报告Drools JIRA的错误。
作为一种解决方法,请考虑分离连接和析取:
CONDITION | CONDITION
$x: Country()
cities $param | cities $param
alternatives | alternatives
contains 'Rome' || contains 'Milan' | contains 'Naples'
请注意,第二行已加入单元格!产生的DRL应该是
rule "match cities"
when
$x: Country(cities contains 'Rome' || contains 'Milan', cities contains 'Naples')
then
//...
end