2017-11-03 4 views
0

のDrools 5、方言のMVELのnullは、私がどのMappingFileオブジェクトが存在する場合にのみ理由コードとBLuReportオブジェクトがNULLの場合にのみ一致するように、このルールをしたいと思います</p> <p>Droolsの5

はどのように比較式が...私は成功せず、いくつかのことをしようとしたことを書くことができます:私は、更新後の無限ループを取得保管するので

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 

はまた、私はリトラクト(BR)を追加する必要がありました...私は正しくアップデートをしていますか?

答えて

0

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を持っている必要があります。

これらの制約のいずれかを使用すると、ループも回避されます。

+0

ありがとうございます - それは完璧に動作します – JamesD

関連する問題