2013-10-17 21 views
0

我創建了一個規則,當滿足一個或多個條件時需要觸發該規則。規則如下所示:Drools - 當時子句中的多個匹配項

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

我有規則,其具有兩個匹配的數據對象(VAL 1和val 2)的測試。規則在打印語句中正確觸發。但是,我無法找到解析$ data並訪問各個匹配的Data對象的方法。 println結果如下:

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

因此,我可以看到有多個條目存在。但試圖調用數組($ data [0])或$ data $ 1或任何我能想到的都會導致Drools解析錯誤(抱怨$ data是一個Data對象,而不是數組或列表或其他可迭代的) 。

回答

3

對於符合條件的每個對象,該規則會被觸發一次。因此,您需要直接訪問數據對象,如$data.valdata.text

如果您需要/想要列表中的對象,則可以使用collect。然後你的規則就像

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

這就是我想念 - 非常感謝! – user2093082