首页 > 解决方案 > Drools 决策表 - 如何在同一条件列中使用多个对象

问题描述

我有以下 POJO:

1)

public class InvoiceDetails{
    String currency;

    public String getCurrency(){
       return this.currency;
    }

    public void setCurrency(String currency){
      this.currency = currency;
    }
}

2)

public class ValidCurrencies {

    List<String> currencies = new ArrayList<String>();

    public ValidCurrencies() {
        currencies.add("JPY");
        currencies.add("USD");
        currencies.add("EUR");
        currencies.add("CNY");
    }

    public List<String> getCurrencies() {
        return currencies;
    }

    public void setCurrencies(List<String> currencies) {
        this.currencies = currencies;
    }
}

我想通过以下方式在我的 Drools 决策表中有一个条件:

CONDITION                                        |  ACTION
$inv: InvoiceDetails $validCurr: ValidCurrencies |
$param==$validCurr.getCurrencies().containsAll(Arrays.asList($inv.getCurrency()))
TRUE
FALSE

有人可以帮助编写判定表语法以编写以下内容:

标签: drools

解决方案


我相信你可以这样做

<table>
  <tr>
    <th>CONDITION</th>
    <th>CONDITION</th>
    <th>CONDITION</th>
    <th>ACTION</th>
  </tr>
  <tr>
    <td>$inv: InvoiceDetails</td>
    <td>$validCurr: ValidCurrencies</td>
    <td>$param==$validCurr.getCurrencies().contains($inv.getCurrency())</td>
    <td></td>
  </tr>
  <tr>
    <td>TRUE</td>
    <td>TRUE</td>
    <td>TRUE</td>
    <td>/**action 1**/</td>
  </tr>
  <tr>
    <td>TRUE</td>
    <td>TRUE</td>
    <td>false</td>
    <td>/**action 2**/</td>
  </tr>
</table>


推荐阅读