Подписка на события таймера и создание регулярного таймера

Таймер, на который смотрит триггер, позволяет обрабатывать события типа «Если через X часов не произошло что-то, то делать предусмотренное действие».
Т.е. можно проверить через некоторое время, выполнилось ли нужное условие, или нет.

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

«Администрирование» → «Управление событиями таймера».

  • «Код операции» – числовой код операции
  • «Название операции» – из справочника бизнес операций, отображается как гиперссылка на страницу редактирования / удаления соответствующей записи о таймере.
  • «Расписание» – расписание, по которому срабатывает таймер. Например: «Еженедельно, каждый пн, пт, каждую N неделю, в XX:YY», или «Периодически раз в 2:00».
  • «Последняя сработка» – дата и время последней генерации соответствующего события, если оно наступало.
    Если событие еще не наступило, то пусто.

По любой колонке можно эту таблицу отсортировать.

При нажатии на «Добавить», отображается окно

  • Выберите здесь нужную вам бизнес-операцию (в частности, с помощью текстового поиска).
  • Выберите в блоке с расписанием нужный вам способ.

При вызове по ссылке «Справочник бизнес операций» из формы «Управление событиями таймера», открывается форма с таблицей:

  • «Код операции» – Уникальное числовое значение, при вставке заполняется автоматически, как максимум по значениям этого поля + 1. Передается вместе с событием в виде параметра.
  • «Название» – Текстовое название операции.

При нажатии на кнопку «+ Добавить», отображается поле для ввода названия бизнес операции (как при редактировании), но изначально пустое.

После заполнения и сохранения:

  1. операция сохраняется,
  2. ей присваивается новый код – порядковый номер сохранённой бизнес-операции.

Cохраняет в очереди один вызов.

Параметры метода:

SessionIDID сессии пользователя
CallTimeобязательный параметр типа DateTime в котором содержится дата и время, когда необходимо послать сообщение на шину.
ObjectIDGUID объекта, идентификатор, смысл которого будет известен при создании логики обработки, может быть идентификатором объекта дерева, записи справочника, пользователя и т.п. параметр не обязательный, если он не требуется, то вместо него должен допускаться null
OperationCodeобязательный целочисленный параметр с кодом операции. Код должен быть зарегистрирован в справочнике кодов операций, если его там нет, то ошибка «Код операции не зарегистрирован»
Parametersобъект типа JSON, в котором вызывающий может сохранить дополнительные параметры, которые будут необходимы при последующей обработке.

Метод не возвращает ничего если завершение успешно. Если не успешно, то вызывает исключение.

Проверяет, есть ли заданный вызов в очереди среди будущих и еще не сработавших элементов очереди.

Параметры метода:

SessionIDID сессии пользователя
OperationCodeобязательный целочисленный параметр с кодом операции
ObjectIDGUID объекта.
Не обязательный параметр. Если он передан, ищутся сохраненные в очереди записи с точным совпадением на GUID и код операции. Если параметр null, то необходимо искать в очереди записи только с кодом операции и ObjectID = null.

Возвращать метод должен список, содержащий удовлетворяющие условию поиска элементы очереди с параметрами (CallTime, Parameters), в том числе может быть пустой список, если поиск успешен, если поиск не успешен, то вызывает исключение.

При наступлении времени, когда должно быть отправлено в шину событие, в зарегистрированных через метод InsertTimerEvent и не обработанных еще на момент наступления заданного времени, генерируется отправка в шину события типа «Подписка на таймер», с параметрами, сохраненными в нем при подписке:

  • OperationCode
  • ObjectID
  • Parameters

Подписка отмечается как исполненная.

При наступлении времени, когда должно быть отправлено событие, согласно таблице настроек, в шину отправляется событие типа «Таймер», которое содержит параметры:

OperationCode

Одновременно должно быть сохранено время последней сработки.