【问题标题】:How do I test for attribute is Null in Drools 5如何在 Drools 5 中测试属性是否为 Null
【发布时间】:2017-11-03 01:40:09
【问题描述】:

Drools 5,方言 mvel

我希望此规则仅在存在任何 MappingFile 对象且仅当带有原因代码的 BLuReport 对象为 NULL 时才匹配

我该如何写那个比较表达式...我尝试了几件事但没有成功:

rule "Mapping.Control Group to BlueReport"
    when 
        $internalAccount : MappingFile( $mappingControlGroup : controlGroup )
        $blueReport : BlueReport( **$Reason is null**  : Reason )
    then
        System.out.println("Updating BlueReport.controlGroup from MappingFile.controlGroup" + " Rule=" + drools.getRule().getName());
        modify ( $blueReport ) {
            setControl_group( $mappingControlGroup ),
            setReason( "Found mapping in the Internal Account object with account_id=" + $internalAccount.getExternalKey() );
        }
        retract ( $blueReport )
    end

另外,我必须添加retract (BR),因为我在更新后一直处于无限循环......我是否正确地进行了更新?!

【问题讨论】:

    标签: drools rules mvel


    【解决方案1】:

    如果BlueReport 字段真的被命名为Reason(与Java 命名约定相反),那么您只需编写:

    rule "Mapping.Control Group to BlueReport"
    when 
        $internalAccount : MappingFile( $mappingControlGroup : controlGroup )
        $blueReport : BlueReport( Reason == null ) # or reason?
    then
        System.out.println("Updating BlueReport.controlGroup from MappingFile.controlGroup" + " Rule=" + drools.getRule().getName());
        modify ( $blueReport ) {
            setControl_group( $mappingControlGroup ),
            setReason( "Found mapping in the Internal Account object with account_id=" + $internalAccount.getExternalKey() );
        }
        retract ( $blueReport );
    end
    

    也许您还应该有一个约束control_group != $mappingControlGroup

    使用这些约束中的任何一个也可以避免循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多