#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 /…