Подписка на события таймера и создание регулярного таймера
Таймер, на который смотрит триггер, позволяет обрабатывать события типа «Если через X часов не произошло что-то, то делать предусмотренное действие». Т.е. можно проверить через некоторое время, выполнилось ли нужное условие, или нет.
Также таймер пригодится, если нужно вызывать с какой-то периодичностью скрипт, не привязанный к объектам Системы, а в рамках общей логики.
Управление событиями таймера
ADVANTA → «Администрирование» → «Дополнительные сервисы» → «Расписание пользовательских бизнес-операций»:
- «Код операции» - числовой код операции;
- «Название операции» - из таблицы бизнес операций, отображается как гиперссылка на страницу редактирования / удаления соответствующей записи о таймере;
- «Расписание» - расписание, по которому срабатывает таймер. Например: «Еженедельно, каждый пн, пт, каждую 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
Одновременно должно быть сохранено время последней сработки.