2016-10-21 1 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> 

IF-Anweisung nicht als echte Bewertung

Ich habe eine rulesEngine.RuleContext.GetResult("CustomFieldName").Result lief und es tut gleich XAGENTNAME aber nicht setzen Sie die isValid Variable auf false gesetzt.

warum?

Antwort

1

In Equals verwenden Sie einen Wert mit ID XAGENTNAME, aber Sie deklarieren es nicht.

Versuchen mit:

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

ja, ich wusste nicht, dass es bedeutet, dass es eine Variable ist. Gibt es eine Möglichkeit, NXBRE zu sagen, dass es ein String-Literal ist? – Ageis

+0

Nein, Regeln funktionieren nur als Referenz. Es ist üblich, diese Art von Konstanten am Anfang einer Regeldatei zu setzen, wie hier: https://github.com/ddossot/NxBRE/blob/master/NxBRE3/Rulefiles/test.xbre#L26-L37 –