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

При тестировании неизмененного основного демонстрационного приложения 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

Другие вопросы по тегам