Проблема с проверкой правил - действительна при сохранении, недействительна при загрузке
При тестировании неизмененного основного демонстрационного приложения CodeEffects asp.net (Editor 5.0.4.8, Engine 5.0.2.6) я обнаружил интересную проблему.
Если я создаю правило выполнения, которое проверяет, например, содержит ли FirstName два пробела, я могу без проблем сохранить это правило, и в действии SaveRule оно проходит проверку с помощью editor.Rule.IsValid. Вот пример определения правила:
<if>
<clause>
<condition type="contains" stringComparison="OrdinalIgnoreCase">
<property name="FirstName" />
<value> </value>
</condition>
</clause>
<then>
<method name="Register">
<value>aaaa</value>
</method>
</then>
</if>
Но при обновлении редактора и попытке загрузить это сохраненное правило оно не загружается в редактор. Причина в том, что действие контроллера LoadRule возвращает пустой json.
В ходе дальнейшего изучения этого вопроса, похоже, что editor.GetClientRuleData возвращает значение null, поскольку правило недопустимо. Если я проверю editor.Rule.IsValid непосредственно перед вызовом editor.GetClientRuleData, я вижу, что он возвращает false, а editor.Rule.InvalidElements содержит один элемент:
{{c:"",h:"v120"}}
Сообщение об ошибке будет "Единственными допустимыми операторами для пустых строковых значений являются IS и IS NOT", но, конечно, оно не отображается в редакторе в демонстрационном проекте, так как этого не ожидается.
Не уверен, связано ли это каким-либо образом с проблемой, но одно очевидное различие между действиями LoadRule и SaveRule заключается в том, как загружается правило.
При сохранении правила данные правила (поступающие из пользовательского интерфейса) загружаются в редактор с
editor.LoadClientData(data.Data);
и при загрузке правила оно загружается с использованием xml (из хранилища), фактически вызывая это:
editor.Rule = Rule.Models.RuleModel.Create(ruleXml, typeof(Models.Patient))
Поэтому мой вопрос: почему недопустимое правило может пройти проверку при сохранении, и тогда это же правило не пройдет проверку при загрузке? Любое исправление я могу попробовать или обойти?
1 ответ
Эта проблема была исправлена в последней версии редактора правил. Вам необходимо обновить ссылки Code Effects от NuGet:
CodeEffects.Rule.Common - 5.0.2.4, CodeEffects.Rule.Editor.Core - 5.0.4.1 (это сборка, содержащая это исправление), CodeEffects.Rule.Editor.Web.Core - 5.0.4.8