Оператор IF не оценивается как true

#nxbre

#nxbre

Вопрос:

 <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 , но не устанавливает isValid переменной значение false.

почему?

Ответ №1:

В Equals вы используете значение с идентификатором XAGENTNAME , но не объявляете его.

Попробуйте с:

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

Комментарии:

1. да, я не знал, что это означает, что это переменная. Есть ли способ сообщить NXBRE, что это строковый литерал?

2. Нет, правила работают только по ссылке. Обычной практикой является утверждение констант такого рода в начале файла правил, как здесь: github.com/ddossot/NxBRE/blob/master/NxBRE3/Rulefiles /…