Проблема с проверкой правил - действительна при сохранении, недействительна при загрузке - PullRequest
0 голосов
/ 23 ноября 2018

При тестировании неизмененного основного демонстрационного приложения 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, а не», но, конечно, оно не отображается в редакторе в демонстрационном проекте, поскольку этого не ожидается.

Неконечно, если это каким-либо образом связано с проблемой, но одно очевидное различие между действиями LoadRule и SaveRule заключается в способе загрузки правила.

При сохранении правила данные правила (поступающие из пользовательского интерфейса) загружаются в редактор с помощью

editor.LoadClientData(data.Data);

, а при загрузке правила оно эффективно загружается с использованием xml (из хранилища)вызов этого:

editor.Rule = Rule.Models.RuleModel.Create(ruleXml, typeof(Models.Patient))

Итак, мой вопрос: почему недопустимое правило может пройти проверку при сохранении, а затем это же правило не проходит проверку при загрузке?Любое исправление я могу попробовать или обходной путь?

1 Ответ

0 голосов
/ 24 ноября 2018

Эта проблема была исправлена ​​в последней версии редактора правил.Необходимо обновить ссылки 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...