【问题标题】:Drools - Multiple matches in then clauseDrools - then 子句中的多个匹配项
【发布时间】:2013-10-17 02:34:03
【问题描述】:

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

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

我有一个规则测试,它有两个匹配的数据对象(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 对象,而不是数组或列表或其他可迭代对象) .

【问题讨论】:

    标签: drools business-rules


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多