2016-10-21 5 views
1
<xBusinessRules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xBusinessRules.xsd"> 

<ObjectLookup id="Applicant" objectId="Args" member="Applicant"/> 
<ObjectLookup id="CustomValues" objectId="Applicant" member="CustomValues"/> 
<ObjectLookup id="ValidationErrors" objectId="Args" member="ValidationErrors"/> 
<Boolean id="IsValid" value="True"/> 

<ForEach id="CustomField" valueId="CustomValues"> 
    <ObjectLookup id="Field" objectId="CustomField" member="Field"/> 
    <ObjectLookup id="CustomFieldName" objectId="Field" member="Key"/> 
    <ObjectLookup id="CustomFieldValue" objectId="CustomField" member="Value"/> 
    <Logic> 

     <If>  
      <And> 
       <Equals leftId="CustomFieldName" rightId="XAGENTNAME">   
       </Equals>     
      </And>  
      <Do> 
       <Modify id="IsValid" value="False" type="Boolean"/> 
       <ObjectLookup objectId="ValidationErrors" member="Add"> 
        <Argument value="Custom_XAGENTNAME" type="String"/> 
        <Argument value="Pick a sales broker plz" type="String"/> 
       </ObjectLookup> 
      </Do>   
     </If> 
    </Logic> 
</ForEach> 

文が真

を評価していない場合、私はrulesEngine.RuleContext.GetResult("CustomFieldName").Resultを走っていると、それはXAGENTNAMEに等しい行いますがfalseにisValid変数を設定しません。

なぜですか?

答えて

1

Equalsには、IDがXAGENTNAMEの値が使用されていますが、宣言はしていません。

で試してみてください:ええ、私はそれはだ知らなかった

<Equals leftId="CustomFieldName" rightId="XAGENTNAME"> 
    <String id="XAGENTNAME" value="XAGENTNAME" /> 
</Equal> 
+0

はそれが変数であることを意味します。 NXBREに文字列リテラルを教える方法はありますか? – Ageis

+0

いいえ、ルールは参照のみで動作します。この種の定数をルールファイルの先頭に置くのが一般的です(https://github.com/ddossot/NxBRE/blob/master/NxBRE3/Rulefiles/test.xbre#L26-L37)。 –

関連する問題