Вопрос

не отрабатывает бизнес-правило проверки вводимого значения в мобильном приложении

Здравствуйте!

Добавил бизнес-правило проверки вводимого значения. Оно то работает, то нет. Иногда появляется сообщение, что значение некорректно, но, если кликнуть на другое поле, то сообщение исчезает и система позволяет сохранить объект с некорректным значением. Прошу помочь разобраться.

Нравится

12 комментариев
Terrasoft.sdk.Model.addBusinessRule("ScpObject", {
    name: "ScpObjectAreaValidatorRule",
    ruleType: Terrasoft.RuleTypes.Custom,
    triggeredByColumns: ["ScpObjectArea"],
    events: [Terrasoft.BusinessRuleEvents.Save, Terrasoft.BusinessRuleEvents.ValueChanged],
    executeFn: function (record, rule, column, customData, callbackConfig) {
       	var isValid = false;
		var ssArea=0;
		var curArea = record.get("ScpObjectArea");
 
		if(Terrasoft.SysSettings.MinScpObjectArea !== undefined)
		{
			ssArea=Terrasoft.SysSettings.MinScpObjectArea;
		}
		isValid = curArea>=ssArea;
 
        record.changeProperty("ScpObjectArea", {
            // Установка признака корректности колонки.
            isValid: {
                value: isValid,
                message: Terrasoft.LocalizableStrings.InvalidScpArea + ssArea
            }
        });
        // Асинхронный возврат значений. 
        Ext.callback(callbackConfig.success, callbackConfig.scope);
    }
});

 

Сергей, а Вы не проверяли, как будет работать, если заменить проверку системной настройки на константу с таким же значением? Может, в некоторых случаях оно не считывалось, из-за чего валидация работала неправильно?

Добрый день, Александр!

Как хорошо, что Вы ответили. Я уже начал отчаиваться. Итак, прописал жестко цифру - и результат тот же. Кроме того, еще явно пробовал указать в коллбэк функции результат: Ext.callback(callbackConfig.success, callbackConfig.scope, [isValid]);, но это тоже не помогло. В отладчике видно, что isValid=false, однако, сообщение о некорректно заполненном поле и отмены сохранения не происходит.

Сергей, так пока не нашли причину, не особо хорошо.

Сравниваю Ваш фрагмент с академией, на первый взгляд, особых отличий и нет. Разве только другой синтаксис локализируемых строк в значении message, чем у Вас.

Александр, чувство локтя незаменимо. В любом случае, если бы локализация влияла и значение не подтягивалось, то в сообщении, как минимум, осталось бы значение переменной  ssArea. Я и брал за основу пример из академии. 

А если добавить правило такое же, как в том примере для раздела активностей, оно будет работать всегда или так же само, как Ваше?

Доброе утро. Добавлять для активностей один-в-один или опять же модифицировать под свой объект?

Сергей, как Вам будет удобнее, мне кажется, лучше попробовать именно так. Ведь Вы свой вариант делали по образцу написанного.

Если и там неправильное поведение повторится, то будет понимание, что дело либо в Вашей системе (например, бинарных файлах), либо в примере.

Добрый день, Александр!

Вставил код, но он перекрывается кодом, который был реализован внедренцем. Сходу не удалось его заместить, однако, какая-то логика в активностях при помощи бизнес-правил работает. И без ошибок.

Сергей, извините, не увидел сразу ответа. Получается, проблема конкретно в Вашей карточке или её объекте, конфликтующей с добавленными правилами? Может, стоит обратиться к поддержке, предоставить доступ к системе для анализа?

Добрый вечер, Александр!

И я пропал в отпуске :). Спасибо за помощь, завтра попробую разобраться с поддержкой.

Здравствуйте.

Перетряс код, провел тестирование. В результате замечено следующее: при попытке внести значения, которые не удовлетворяют ограничениям, в режиме просмотра - значение вносится, сообщение об ошибке не показывается, но при выходе из элемента и повторном входе - значения остаются прежними (теми, которые были до попытки изменить). Если же зайти в режим редактирования элемента и попытаться внести недопустимые значения, то появляется сообщение об ошибке и сохранить не удается. Получается, что на данный момент есть только проблема с отображением сообщения о некорректном значении в режиме просмотра. Само некорректное значение сохранить система не позволяет.

Показать все комментарии