Описание модуля#

Структура модуля#

../../../_images/schema.png

Структура хранения в БД#

Схема - regadm.

Хранит все сформированные уведомления.#

Столбец

Описание

Тип

Значение по умолчанию

key

Первичный ключ/Идентификатор записи

bigint

Следующее значение из последовательности

date_insert

Дата создания записи

timestamp

Текущая дата и время

date_update

Дата последнего изменения записи

timestamp

Текущая дата и время

object_key

Первичный ключ объекта, по которому сформировано уведомление

bigint

notify_object

Объект, используемый для генерации сообщения

json

mail_send_state

Статус отправки письма:0 - Требует отправки;1 - Отправлено;2 - Отправка отменена;3 - Превышен лимит попыток отправки;4 - Не указаны адресаты;5 - Отправка невозможна

integer

mail_try_count

Текущее кол-во попыток отправки

integer

mail_address

Электронная почта адресатов через разделитель «;»

varchar

mail_message

Тело письма

varchar

mail_title

Тема письма

varchar(500)

date_send

Дата последней попытки отправки уведомления

timestamp

object_url

Ссылка на карточку объекта, по которому сформировано уведомление

varchar(250)

not ify_setting

Первичный ключ настройки типа уведомления по проекту

bigint

Схема - regadm.

Хранит общие настройки типов уведомлений.#

Столбец

Описание

Тип

Значение по умолчанию

key

Первичный ключ/Идентификатор записи

bigint

Следующее значение из последовательности

date_insert

Дата создания записи

timestamp

Текущая дата и время

date_update

Дата последнего изменения записи

timestamp

Текущая дата и время

title

Наименование настройки типа уведомления

varchar(500)

description

Описание настройки типа уведомления

varchar(500)

object_alias

Алиас типа объекта, по которому настраиваются уведомления

varchar(500)

object_title

Заголовок типа объекта, по которому настраиваются уведомления

varchar(500)

change_type

Тип события: 0 - Создание; 1 - Удаление; 2 - Изменение

integer

mail_title

Тема письма

varchar(500)

mail_body

Шаблон тела письма

text

max_try_count

Максимальное кол-во попыток отправки одного уведомления

integer

tracked_fields

Массив алиас-ключей полей для отслеживания

varchar(4096) []

templated_fields

Массив алиас-ключей полей для вставки в шаблон

varchar(4096) []

condition

Условия для формирования уведомлений по объектам

json

images_for_template

Данные изображений, задействованных в шаблоне для формирования тела письма

json

track_geo

Флаг отслеживания изменений геометрии объектов

boolean

false

Схема - regadm.

Хранит настройки типов уведомлений по проектам.#

Столбец

Описание

Тип

Значение по умолчанию

key

Первичный ключ/Идентификатор записи

bigint

Следующее значение из последовательности

date_insert

Дата создания записи

timestamp

Текущая дата и время

date_update

Дата последнего изменения записи

timestamp

Текущая дата и время

title

Наименование настройки типа уведомления по проекту

varchar(500)

description

Описание настройки типа уведомления

varchar(500)

object_alias

Алиас типа объекта, по которому настраиваются уведомления

varchar(500)

object_title

Заголовок типа объекта, по которому настраиваются уведомления

varchar(500)

change_type

Тип события: 0 - Создание; 1 - Удаление; 2 - Изменение

integer

mail_title

Тема письма

varchar(500)

mail_body

Шаблон тела письма

text

max_try_count

Максимальное кол-во попыток отправки одного уведомления

integer

tracked_fields

Массив алиас-ключей полей для отслеживания

varchar(4096) []

templated_fields

Массив алиас-ключей полей для вставки в шаблон

varchar(4096) []

condition

Условия для формирования уведомлений по объектам

json

metadata

Мета-данные по всем полям, используемым в текущей настройке

json

images_for_template

Данные изображений, задействованных в шаблоне для формирования тела письма

json

track_geo

Флаг отслеживания изменений геометрии объектов

boolean

false

project

Алиас проекта, для объектов которого будет работать данная настройка

varchar(200)

Схема - regadm.

Хранит пользователей (субъекты, имеющие учетную запись в системе), подписанных на уведомления по настройкам типов уведомлений по проектам.#

Столбец

Описание

Тип

Значение по умолчанию

key

Первичный ключ/Идентификатор записи

bigint

Следующее значение из последовательности

date_insert

Дата создания записи

timestamp

Текущая дата и время

date_update

Дата последнего изменения записи

timestamp

Текущая дата и время

notify_setting

Первичный ключ настройки типа уведомления по проекту

bigint

user_subject_key

Первичный ключ субъекта в проекте, по которому создана связанная настройка типа уведомления по проекту

bigint

Схема - regadm.

Хранит базовые шаблоны уведомлений по типам событий.#

Столбец

Описание

Тип

Значение по умолчанию

key

Первичный ключ/Идентификатор уведомления

bigint

Следующее значение из последовательности

date_insert

Дата создания шаблона

timestamp

Текущая дата и время

date_update

Дата последнего изменения шаблона

timestamp

Текущая дата и время

name

Наименование шаблона

varchar(500)

title

Тема письма

varchar(500)

body

Шаблон тела письма

text

change_type

Тип события: 0 - Создание;1 - Удаление;2 - Изменение

integer

is_default

Флаг шаблона по умолчанию для выбранного типа события

boolean

false

images_for_template

Данные изображений, задействованных в шаблоне для формирования тела письма

json

Создается во всех схемах, для которых настроены уведомления.

Хранит объекты проекта текущей схемы, для которых были отправлены уведомления по настройкам уведомлений по проектам, связанным с типом события Создание. Целью является предотвращение повторной отправки уведомления в случае, если объект был повторно изменен и удовлетворяет условиям настройки.#

Столбец

Описание

Тип

Значение по умолчанию

key

Первичный ключ/Идентификатор записи

bigint

Следующее значение из последовательности

date_insert

Дата создания записи

timestamp

Текущая дата и время

notify_setting

Первичный ключ настройки типа уведомления по проекту

bigint

object_key

Первичный ключ объекта, по которому сформировано уведомление

bigint

Скрипты для обновления БД#

Вышеуказанные таблицы и настройки по умолчанию для функционирования сервиса модуля рассылки уведомлений добавляются в БД по аналогии с остальными скриптами Системы и имеют префикс Modules.Notification.

Скрипт для заполнения шаблонов писем и шаблонов уведомлений: скрипт Modules.Notification.8.8.sql добавляет шаблоны писем и шаблоны уведомлений. Скрипт выполняет insert в таблицу: для шаблонов писем в таблицу notify_template, для шаблонов уведомлений в таблицу notify_settings.

API модуля#

Доступ к API предоставляется только авторизованным пользователям системы, имеющим достаточно полномочий для работы с Конфигуратором Системы.

Как происходит обновление общих настроек модуля#

Обновление общих настроек модуля из конфигуратора (см. Настройки модуля) приводит к автоматическому их применению в сервисе модуля уведомлений, начиная со следующего цикла поиска изменений.

В любой момент в файловом конфиге можно поменять настройки почты либо URL системы и эти настройки применятся на следующем цикле работы модуля. Т.е. если модуль уже отправляет какие-то письма - он отправит их по старым настройкам, а вот на следующем цикле отправки уже будет отправлять по новым.

Важно

Если есть необходимость сменить базу, то необходимо перезапустить модуль.

Что происходит при отключении отслеживания#

Отключение работы Модуля возможно на странице общих настроек модуля из конфигуратора (Настройки системы/Модуль уведомлений). При этом модуль завершит текущий цикл отправки и затем прекратит мониторинг БД.

Важно

Если при последующем включении модуля были изменения в настройках модуля новые настройки (период) применяются к таймеру монитора со следующей итерации. Т.е. если на момент изменения настройки:

  1. Монитор в активной фазе, то по окончании работы он заснет уже на новый период.

  2. Монитор спит, то он проспит в соответствии со старой настройкой, проснется, отработает и заснет уже на новый период.

Как происходит тиражирование#

Тиражирование представляет из себя создание новой записи на основе существующей.

Хранит базовые шаблоны уведомлений по типам событий.#

Вид тиражирования

Проверки

Из настроек для конкретного проекта в общие

Отсутствуют

Из общих настроек в настройку для конкретного проекта

  1. Проверка наличия типа объекта в целевом проекте по его алиасу; 2. Проверка наличия всех путей к полям, использующихся в полях для отслеживания изменений, полях для вставки в шаблон и полях условий относительно текущего типа объекта в целевом проекте; 3. Проверка наличия геометрии у типа объекта, если в общей настройке предполагалось ее отслеживание.

Как формируются шаблоны#

Движок шаблонов#

Для формирования шаблонов используется язык шаблонов Handlebars. Библиотека: https://github.com/Handlebars-Net/Handlebars.Net Лицензия MIT: https://opensource.org/licenses/mit Компиляция таких шаблонов на .Net выполняется с помощью движка шаблонов Handlebars.Net, подключенного к проектам в виде NuGet-пакета.

Расширения для создания шаблонов#

Стандартного набора конструкций для составления шаблонов Handlebars не всегда достаточно, чтобы успешно составлять нужные шаблоны. Это послужило причиной создания набора расширений, так называемых функций-помощников (helpers) для Handlebars, которые можно использовать при составлении шаблонов.

Реализованные функции#

Функция

Описание

Реализация

compare

Функция сравнения для использования в качестве параметра для стандартного оператора if

Gems.Notification.Templates/Helpers/CompareHelpers/CompareHelper.cs

and

Логическая функция И для использования в качестве параметра для стандартного оператора if

Gems.Notification.Templates/Helpers/Logic/AndHelper.cs

or

Логическая функция ИЛИ для использования в качестве параметра для стандартного оператора if

Gems.Notification.Templates/Helpers/Logic/OrHelper.cs

[current-datetime]

Функция вывода текущей (на момент формирования шаблона) даты/времени в необходимом формате

Gems.Notification.Templates/Helpers/CurrentDateTimeHelper.cs

[datetime]

Функция форматирования передаваемой даты/времени в указанный формат

Gems.Notification.Templates/Helpers/DateTimeHelper.cs

empty

Функция провки передаваемого параметра на null, пустую строку или строку, состоящую из пробелов. Для использования в качестве параметра для стандартного оператора if

Gems.Notification.Templates/Helpers/IsNullOrWhiteSpaceHelper.cs