【问题标题】:Create alias for conditions in Drools Decision table为 Drools 决策表中的条件创建别名
【发布时间】:2015-05-01 19:06:25
【问题描述】:

附上我的决策表,在我的情况下,我多次使用 sv2.SV202_CompMedProcedId.get("SV202-02")

我们有什么方法可以为 sv2.SV202_CompMedProcedId.get("SV202-02")(例如 S)创建别名,并在我的情况下使用该别名每次都用整条线?

条件
sv2.SV202_CompMedProcedId.get(""SV202-02"").Value >= '70010' && sv2.SV202_CompMedProcedId.get(""SV202-02"").Value = '76506' && sv2.SV202_CompMedProcedId.get(""SV202-02"").Value = '77001' && sv2.SV202_CompMedProcedId.get(""SV202-02"").Value = '77051' && sv2.SV202_CompMedProcedId.get(""SV202-02"").Value = '77071' && sv2.SV202_CompMedProcedId.get(""SV202-02"").Value = '77261' && sv2.SV202_CompMedProcedId.get(""SV202-02"").Value = '78000' && sv2.SV202_CompMedProcedId.get(""SV202-02"").Value

其中 sv2 是对象,SV2 是类

【问题讨论】:

  • 基本问题似乎是您将相对简单的数据扩展为代码。我不知道这样的缩写。
  • 我尝试将代码简化如下: sv2.SV202_CompMedProcedId.get(""SV202-02"").Value >= '70010' && = '76506' &&

标签: jboss drools drools-guvnor


【解决方案1】:

是的,您可以使用别名。将您的条件更改为:

$s : sv2.SV202_CompMedProcedId.get("SV202-02").Value >= '70010' && $s <= '76499' || $s >= '76506' && $s <= '76999' || $s >= '77001' && $s <= '77032' || $s >= '77051' && $s <= '77059' || $s >= '77071' && $s <= '77084' || $s >= '77261' && $s <= '77999' || $s >= '78000' && $s <= '79999'

【讨论】:

  • 我遇到以下错误:text=Variables 不能在绑定中使用。 text=Field Reader 不存在'predicate'sv2.SV202_CompMedProcedId.get("SV202-02").Value >= 70010 && ^ 中的声明'$s'
  • sv2 是您尝试匹配的属性吗?另外,能否请您发布您现在正在使用的完整条件?
  • 我已经用您需要的详细信息编辑了我的问题。请告诉我如何解决这个问题
  • 在这种情况下,请从您的条件中删除 sv2 以使其成为:$s : SV202_CompMedProcedId.get("SV202-02").Value &gt;= '70010' &amp;&amp; $s &lt;= '76499' || $s &gt;= '76506' &amp;&amp; $s &lt;= '76999' || $s &gt;= '77001' &amp;&amp; $s &lt;= '77032' || $s &gt;= '77051' &amp;&amp; $s &lt;= '77059' || $s &gt;= '77071' &amp;&amp; $s &lt;= '77084' || $s &gt;= '77261' &amp;&amp; $s &lt;= '77999' || $s &gt;= '78000' &amp;&amp; $s &lt;= '79999'
【解决方案2】:

如果这种情况足够频繁,您可以编写并导入静态 Java (!) 函数:

public boolean isInRanges( Comparable value, Comparable... bounds ){
    for( int i = 0; i < bounds.length; i += 2 ){
        if( bounds[i].compareTo(value) <= 0 &&
            value.compareTo(bounds[i+1]) <= 0 ) return true; 
    }
    return false;
}

简单的调用是显而易见的。

您不能使用 DRL 函数:AFAIK,未实现可变参数表示法(但请检查)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多