Разработка собственных уведомлений в ЗУП 3.1 КОРП — задача, требующая понимания архитектуры подсистемы уведомлений БСП. Рассмотрим, как правильно реализовать новый вид уведомлений, какие методы необходимо задействовать и как избежать типичных проблем при регистрации шаблонов.
Для создания нового уведомления необходимо внести изменения в модуль подсистемы, отвечающий за уведомления (например, КадровыйУчетУведомления). Процесс состоит из нескольких этапов:
ПриЗаполненииСпискаВидовУведомлений.ИнициализацияВидаУведомления.Рассмотрим структуру инициализации. Важно правильно задать ТипПредмета — это объект, относительно которого будет строиться уведомление.
Процедура ИнициализацияВидаУведомленияМоеСобытие(ОписаниеДанных) Экспорт
ОписаниеДанных.ТипПредмета = Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица");
УведомленияСервер.ДобавитьПолучателя(ОписаниеДанных, "ФизическоеЛицо", НСтр("ru = 'Сотрудник'"), Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
УведомленияСервер.ДобавитьОтбор(ОписаниеДанных, "Организация", НСтр("ru='Организация'"), Новый ОписаниеТипов("СправочникСсылка.Организации"));
КонецПроцедуры
Чтобы система знала, какие именно уведомления нужно отправить, необходимо реализовать метод ПолучениеДанныхВидаУведомления. Этот метод должен возвращать таблицу с тремя обязательными колонками:
Предмет — основная ссылка.ДатаСобытия — дата, на которую планируется событие.ПараметрыСобытия — структура с данными для подстановки в шаблон.Обратите внимание: имена ключей в структуре ПараметрыСобытия должны строго соответствовать полям, описанным в процедуре ПриПодготовкеШаблонаСообщенияПоУведомлению. Именно через них происходит передача значений в шаблон уведомления.
Одной из частых проблем является отсутствие шаблона после вызова УведомленияСервер.ОбновитьВидыУведомлений. Для того чтобы шаблон создался, необходимо, чтобы сработал механизм регистрации обработчиков обновлений. Если автоматическое обновление не запускается, проверьте корректность регистрации обработчика в процедуре ЗарегистрироватьОбработчикиОбновления.
Если обновление по какой-то причине не происходит в штатном режиме, вы можете принудительно вызвать метод инициализации данных:
// Пример вызова для принудительной генерации шаблонов
КадровыйУчетУведомления.ПриНачальномЗаполненииДанныхПодсистемыУведомлений();
При проектировании уведомлений учитывайте, что существует два основных типа категорий (перечисление КатегорииВидовУведомлений):
СтруктураПериода).Для отладки процесса формирования событий не обязательно дожидаться запуска регламентного задания. Мы рекомендуем создать внешнюю обработку, которая эмулирует вызов метода получения данных, передавая в него заранее подготовленные параметры СтруктураПериода и Отборы. Поставив точку останова в коде, вы сможете проследить, как именно формируется ТаблицаРезультата и почему данные могут не попадать в рассылку.
Помните: все дополнительные поля, которые вы хотите видеть в шаблоне, должны быть явно зарегистрированы. Если поле не добавлено в список доступных полей, пользователь не сможет вывести его в тексте сообщения, даже если вы передадите его значение из запроса.