Drools - then子句中的多个匹配

时间:2013-10-17 02:34:03

标签: drools business-rules

我创建的规则需要在满足一个或多个条件时触发。该规则如下:

rule "Demo Rule"
    when
         $data : Data (val == 1 || val == 2)
    then
        System.out.println($data);
end

我对规则进行了测试,该测试有两个匹配的Data对象(val 1和val 2)。当规则到达print语句时,规则会正确触发。但是,我找不到解析$ data和访问各个匹配Data对象的方法。 println的结果如下:

custom.package.Data< val: 1, text:'Test1' >
custom.package.Data< val: 2, text:'Test2' >

所以,我可以看到存在多个条目。但尝试调用数组($ data [0])或$ data $ 1或任何我能想到的结果都会导致Drools解析错误(抱怨$ data是一个Data对象,而不是数组或列表或其他可迭代的)

1 个答案:

答案 0 :(得分:3)

每个符合条件的对象会触发一次规则。因此,您需要直接以$data.valdata.text

的形式访问数据对象

如果您需要/想要列表中的对象,可以使用collect。然后你的规则就像

rule "Demo Rule"
    when
         $dataList : ArrayList() from collect( Data (val == 1 || val == 2) )
    then
        System.out.println($dataList);
end