Всем доброго времени суток.
Версия 7.9 sales.
Задача примерно такая: существует поле (колонка) на странице, и кнопка, вызывающая бизнес-процесс, в который отправляется значение из этого поля.
Проблема в том, что значение может быть практически любым (цифры), а результат может вернуться пустым. Нужно как-то показать пользователю, что ничего не найдено.
Для этого хочется воспользоваться стандартным отображением сообщения, как при валидации. Вывести сообщение туда, причём не у кнопки, а у поля.
Возможно ли это сделать?
Нравится
Да, в вашем БП вызывайте сигнал и передавайте в него значение.
Или сигнал или сообщение, скорее всего сообщение :) точно одно из двух.
В вашей схеме, подпишитесь на этот сигнал (событие)
По поводу генерации события в БП и его поимке пояснения дает Зарицкий Олег (за что ему огромное спасибо :))
вот в этом комментарии другой темы, про "реактивную привязку к данным"
там тоже есть отсылка на другую тему, вот комментарий с которого начинается полезная информация
Получите и обработайте значение из БП, после чего вызовите стандартное системное окно сообщения вот таким вот способом:
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, возможно туда можно добавить некий конфигурационный объект.
Илья, большое спасибо за настолько подробный разбор темы! Прямо даже неожиданно :)
Но я думаю, до манипуляции объектами не дойдёт - это была по сути хотелка, выводить информацию таким вот образом. В итоге договорились, что всё-таки сделаем стандартным окном :) Но знания в любом случае полезные.