Вывод сообщения о валидации без самой валидации

Всем доброго времени суток.

Версия 7.9 sales.

Задача примерно такая: существует поле (колонка) на странице, и кнопка, вызывающая бизнес-процесс, в который отправляется значение из этого поля.

Проблема в том, что значение может быть практически любым (цифры), а результат может вернуться пустым. Нужно как-то показать пользователю, что ничего не найдено.

Для этого хочется воспользоваться стандартным отображением сообщения, как при валидации. Вывести сообщение туда, причём не у кнопки, а у поля.

Возможно ли это сделать?

Нравится

9 комментариев

Да, в вашем БП вызывайте сигнал и передавайте в него значение.

Или сигнал или сообщение, скорее всего сообщение :) точно одно из двух.
В вашей схеме, подпишитесь на этот сигнал (событие)
По поводу генерации события в БП и его поимке пояснения дает Зарицкий Олег (за что ему огромное спасибо :))
вот в этом комментарии другой темы, про "реактивную привязку к данным"
там тоже есть отсылка на другую тему, вот комментарий с которого начинается полезная информация

Получите и обработайте значение из БП, после чего вызовите стандартное системное окно сообщения вот таким вот способом:

Terrasoft.utils.showMessage({
	caption: "Ваше сообщение",
	buttons: ["ok"],
	defaultButton: 0
});

Илья, это понятно :)

Можно даже при помощи скрипта вызвать стандартное модальное окно :) this.showInformationDialog

Там вопрос именно в том, можно ли отобразить это всё именно в виде синенького блока у поля, как при стандартной валидации.

"Смородинов Денис" написал:Там вопрос именно в том, можно ли отобразить это всё именно в виде синенького блока у поля, как при стандартной валидации.

Я не сразу понял о чем идет речь.
Если вас интересует именно визуализация процесса, а не имитация механизма валидации, то можете поступить вот так...
Для примера в карточке контакта, в методе onEntityInitialized, или прям в консоли отладки выполните код:

var targetElements = Ext.select("[id*=AccountNameTextEdit-validation]");
targetElements.setStyle({"visibility": "visible"});
targetElements.setHTML("Мое сообщение");

прошу Вас обратить внимание что элементы "validation" формируются у полей которые обязательные для заполнения, но Вам ничего не мешает его по аналогии вставить к любому полю, как самый простой вариант просто скопировать ноду с какого ни будь обязательного поля, кастомизировав id элемента по аналогии.

Илья, ясно, спасибо.

То есть по сути - обращение к элементу на уровне DOM и подстановка туда напрямую своего текста.
Я просто думал, может есть какие-нибудь bpm-овские методы для вызова этого элемента.

"Смородинов Денис" написал:Я просто думал, может есть какие-нибудь bpm-овские методы для вызова этого элемента.

Они однозначно есть. Для этого надо подебажить asyncValidate метод из BasePageV2
Истина где-то там рядом (с)

Лично я запнулся на вызове this.validate
это дело отправляет тебя к "праотцам" :lol: в all-combined.js
С минифицированным кодом ядра.
Даже в Pretty Print режиме это практически нечитаемо.


вот где-то здесь - творится "магия" :)

Но так же, капитан очевидность подсказывает, что в ткущем контексте (объекте this)
есть аттрибуты ValidationConfig и ValidationInfo

Я "игрался" устанавливая false в соотв аттрибуте ValidationInfo принудительно на this.validate это не оказывает эффекта.
Но возможно ключ к решению вашего кейса штатными средствами - манипуляция с этими объектами, например найти пример объекта добавляемого в ValidationConfig, возможно туда можно добавить некий конфигурационный объект.

Илья, большое спасибо за настолько подробный разбор темы! Прямо даже неожиданно :)

Но я думаю, до манипуляции объектами не дойдёт - это была по сути хотелка, выводить информацию таким вот образом. В итоге договорились, что всё-таки сделаем стандартным окном :) Но знания в любом случае полезные.

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