Создание дополнительных расширений
Возможность создания расширений и пополнения функциональности модуля является ключевым аспектом разработки. Классы расширений должны быть записаны в справочник настроек, чтобы их можно было применять в карточках модуля, а библиотеки размещены в доступной для процесса области.
-
INotificationObjectDataContext— интерфейс компонента контекста данных. Такой компонент выполняет построение модели уведомленияNotificationObjectDataпо ID исходного объекта/объектов, а также определяет для объектов каких типов и форматов допустимо построение модели. Эта модель может содержать данные объекта в любом виде, а также списки дополнительных и исключаемых адресатов, основных и дополнительных вложений. Рекомендуется определять вложения именно на уровне контекста данных, а также строить максимально полную модель, из которой можно получить элементы уведомления без обращения к дополнительным источникам или трудоёмким вычислениям. -
INotificationDataTransform— интерфейс компонента преобразования данных в экземпляр уведомления. Выполняет построение экземпляров уведомленийNotificationForSendпо модели уведомления с применением шаблона (карточки настроек). Дополнительно может применяться для формирования темы, содержания или основных получателей отдельного экземпляра уведомления. Также может модифицировать списки дополнительных и исключаемых адресатов, основных и дополнительных вложений. Такой компонент должен учитывать все данные шаблона при построении уведомления. -
INotificationDataSource— интерфейс компонента источника данных периодического события. Выполняет выборку объектов системы, используемых для построения уведомлений. Такой компонент должен возвращать коллекцию элементов. -
INotificationDataSourcePostHandler— интерфейс компонента постобработки данных периодического события. Выполняет группировку и фильтровку объектов системы, полученных от компонента источника данных. Каждая группа передаётся компоненту источника данных отдельно, поэтому отдельный элемент может участвовать в нескольких группах. -
INotificationSendChannel— интерфейс компонента отправки. Выполняет доставку экземпляра уведомления адресату в соответствии со своей логикой. Данный компонент не изменяет экземляр уведомления, а только пользуется его данными для исполнения собственной логики. По результатам исполнения рекомендуется оставлять запись в специальной карточке сообщений о выполнении отправки с применениемDocsVision.BackOffice.Notifications.NotificationLogManager. -
IInitializeWithSettings— вспомогательный интерфейс, который можно использовать при разработке собственных компонентов. При инициализации такого компонента будет передана строка настроек из справочника. -
IInitializeWithObjectContext— вспомогательный интерфейс, который можно использовать при разработке собственных компонентов. При инициализации такого компонента будет передана строка настроек из справочника иObjectContextинициирующего сервиса.
Реализация класса компонента
Класс компонента обязательно должен реализовывать хотя бы 1 интерфейс, соответствующий назначению компонента, и всю его необходимую функциональность.
Если класс требует контекст Docsvision, используйте интерфейс IInitializeWithObjectContext. Контекст будет передан из инициирующего процесса.
Если при инициализации экземпляра класса необходимо передать дополнительные параметры снаружи, используйте интерфейс IInitializeWithSettings. Поддержка интерфейса не требуется, если класс уже реализует IInitializeWithObjectContext.
Для ведения отладочных логов рекомендуется использовать DocsVision.NotificationService.ObjectModel.Extensions.Helper.LogMessage() и TraceError().
Добавление компонента в справочник
Несколько компонентов могут использовать один класс компонента, если это необходимо, например с использованием различных значений параметра инициализации.
Для создания компонента добавьте строку в соответствующую таблицу справочника настроек сервиса уведомлений. В поле Имя класса укажите полное имя класса реализации. В поле Дополнительные настройки укажите значение параметра, которое будет использоваться при инициализации экземпляра класса, если класс реализует IInitializeWithObjectContext или IInitializeWithSettings.