Уведомляем пользователей о приближении даты

20 1

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

Например, можно уведомлять участников о предстоящем совещании, ответственных об истечении срока договора, отдел кадров и сотрудника об истечении срока действия сертификата/аттестации. 

Описание решения

Все настройки производятся в одном справочнике "Настройка уведомлений о наступлении даты" ("UDL_DateNotifications").

Вкладка "Триггер"

На этой вкладке настраиваются отслеживаемый реквизит и фильтр объектов, относительные даты уведомлений.

Можно указать любой реквизит с типом дата из карточки или детального раздела любого справочника или ТКД.

Фильтр указывается в формате SQL используется в where. Можно использовать alias'ы MBAnalit, SBEDoc и MBAnValR...12, SBEDocAcc, SBEDocVer, SBEDocValR...6, если отслеживается реквизит из детального раздела.

В табличной части указываются сдвиги (offset) относительно даты в объекте. При расчете необходимости уведомления берутся даты всех подходящих объектов, по этим сдвигам вычисляются относительные даты, и, если рассчитанная дата совпадает с текущей, формируется уведомление.

Типы уведомления: "Один раз" или "Ежедневно". "Один раз": берется сдвиг из реквизита "Старт периода". "Ежедневно": уведомления формируются ежедневно в течение периода, рассчитанного с использованием сдвигов "Старт периода" и "Конец периода". К примеру, можно уведомлять сотрудника за 30, 15, 5 дней до срока окончания действия сертификата и каждый день после истечения срока, пока не будет установлена новая дата окончания действия.

Вкладка "Подписка"

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

В "Подписчики из объекта" указываются реквизиты типа справочник "Пользователи" или "Работники" карточки или детального раздела отслеживаемого объекта.

Для email-уведомлений используется стандартный реквизит "Рабочий Email" ("Строка2") из карточки работника.

Вкладки "Шаблон уведомления" и "Шаблон email"


Настройка для уведомлений Directum и email одинаковая. Email формируется в формате обычного текста, не HTML. Если тема или текст не заполнены, то уведомление в этом формате не сформируется.
В шаблонах можно использовать реквизиты объекта и связанных с ним справочников, а также гиперссылку на объект [URL]. Для обращения к реквизитам связанных справочников следует указывать их через '.' после имени реквизита в объекте (можно рекурсивно). Пример: [Работник.Строка] -  должность председателя совещания.

Техническая часть

Сценарий "Обработать уведомления о наступлении даты" ("UDL_ProcessDateNotifications") необходимо запускать в планировщике на сервере.

Для фиксации сгенерированных решением уведомлений используется SQL-таблица. Поэтому сценарий можно запускать сколь угодно часто.

Для исправления ситуаций, когда сценарий по каким-то причинам не отработал, существует константа "UDL_NotificationsTriggerPeriod". Если значение константы отлично от 0, то сценарий генерирует уведомления за последние <значение константы> дней. При этом, если по одному объекту за последние несколько дней было несколько одинаковых уведомлений, то отправляется только одно, без дублей.

Если у объекта изменилась дата или на вкладке "Триггер" удалили строку и добавили новую (даже с такими же значениями), то информация из SQL-таблицы о сгенерированных ранее уведомлениях игнорируется.

Для отправки email используется стандартная функция MailSend(), настройки исходящей почты берутся из констант "ПЧИМОТПР", "ПЧОТПР", "MailOutgoingSettings".

Пакет и установка

Пакет разработки (лицензия MIT): Уведомления о наступлении даты.zip

Для установки решения импортируйте пакет разработки и запустите сценарий "Установка модуля "Оповещение о наступлении даты"" под пользователем с парольной аутентификацией, правами на создание таблиц и выдачи прав на них.

ЗЫ

Этот сильно упрощенный вариант существующего решения сделан специально для публикации. Основное, чем хотел поделиться - механизм отслеживания даты и генерация какого-то события, если сработал триггер. В данном случае событие = отправка уведомления.

Елена Питомцева

Александр - ждем публикации решения на Awards. Поощрять небольшие решения - это тоже задача конкурса. Такие решения будут рассматриваться экспертами отдельно. Решения на конкуре получают внимание и плюсы от сообщества. 

Авторизуйтесь, чтобы написать комментарий