====== Подписка на события таймера и создание регулярного таймера ======
Таймер, на который смотрит триггер, позволяет обрабатывать события типа «Если через X часов не произошло что-то, то делать предусмотренное действие». \\
Т.е. можно проверить через некоторое время, выполнилось ли нужное условие, или нет.
Также таймер пригодится, если нужно вызывать с какой-то периодичностью скрипт, не привязанный к объектам системы, а в рамках общей логики.
===== Управление событиями таймера =====
«Администрирование» -> «Управление событиями таймера».
* «Код операции» – числовой код операции
* «Название операции» – из справочника бизнес операций, отображается как гиперссылка на страницу редактирования / удаления соответствующей записи о таймере.
* «Расписание» -- расписание, по которому срабатывает таймер. Например: "//Еженедельно, каждый пн, пт, каждую N неделю, в XX:YY//", или "//Периодически раз в 2:00//".
* «Последняя сработка» -- дата и время последней генерации соответствующего события, если оно наступало. \\ Если событие еще не наступило, то пусто.
По любой колонке можно эту таблицу отсортировать.
При нажатии на «Добавить», отображается окно
* Выберите здесь нужную вам бизнес-операцию (в частности, с помощью текстового поиска).
* Выберите в блоке с расписанием нужный вам способ.
=====Справочник бизнес операций=====
При вызове по ссылке «Справочник бизнес операций» из формы «Управление событиями таймера», открывается форма с таблицей:
* «Код операции» -- Уникальное числовое значение, при вставке заполняется автоматически, как максимум по значениям этого поля + 1. Передается вместе с событием в виде параметра.
* «Название» -- Текстовое название операции.
При нажатии на кнопку «+ Добавить», отображается поле для ввода названия бизнес операции (как при редактировании), но изначально пустое.
После заполнения и сохранения:
- операция сохраняется,
- ей присваивается новый код -- порядковый номер сохранённой бизнес-операции.
===== Связанные API методы =====
====InsertTimerEvent====
Cохраняет в очереди один вызов.
Параметры метода:
|SessionID|ID сессии пользователя|
|CallTime|обязательный параметр типа DateTime в котором содержится дата и время, когда необходимо послать сообщение на шину.|
|ObjectID|GUID объекта, идентификатор, смысл которого будет известен при создании логики обработки, может быть идентификатором объекта дерева, записи справочника, пользователя и т.п. параметр не обязательный, если он не требуется, то вместо него должен допускаться null|
|OperationCode|обязательный целочисленный параметр с кодом операции. Код должен быть зарегистрирован в справочнике кодов операций, если его там нет, то ошибка «Код операции не зарегистрирован»|
|Parameters|объект типа JSON, в котором вызывающий может сохранить дополнительные параметры, которые будут необходимы при последующей обработке.|
Метод не возвращает ничего если завершение успешно. Если не успешно, то вызывает исключение.
====CheckTimerEvent====
Проверяет, есть ли заданный вызов в очереди среди будущих и еще не сработавших элементов очереди.
Параметры метода:
|SessionID|ID сессии пользователя|
|OperationCode|обязательный целочисленный параметр с кодом операции|
|ObjectID|GUID объекта. \\ Не обязательный параметр. Если он передан, ищутся сохраненные в очереди записи с точным совпадением на GUID и код операции. Если параметр null, то необходимо искать в очереди записи только с кодом операции и ObjectID = null.|
Возвращать метод должен список, содержащий удовлетворяющие условию поиска элементы очереди с параметрами (CallTime, Parameters), в том числе может быть пустой список, если поиск успешен, если поиск не успешен, то вызывает исключение.
=====Генерация событий в шину по подписке=====
При наступлении времени, когда должно быть отправлено в шину событие, в зарегистрированных через метод InsertTimerEvent и не обработанных еще на момент наступления заданного времени, генерируется отправка в шину события типа «Подписка на таймер», с параметрами, сохраненными в нем при подписке:
* OperationCode
* ObjectID
* Parameters
Подписка отмечается как исполненная.
=====Генерация событий в шину по регулярному таймеру=====
При наступлении времени, когда должно быть отправлено событие, согласно таблице настроек, в шину отправляется событие типа «Таймер», которое содержит параметры:
OperationCode
Одновременно должно быть сохранено время последней сработки.
[[product/triggers/start|← К оглавлению]]
[[/product/triggers/notification|Уведомления →]]