Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
product:triggers:timer [13.11.2020 14:21] – создано maynproduct:triggers:timer [25.02.2025 15:00] (текущий) – [Управление событиями таймера] Белугин Александр
Строка 1: Строка 1:
 ====== Подписка на события таймера и создание регулярного таймера ====== ====== Подписка на события таймера и создание регулярного таймера ======
  
-<callout type="danger" icon="true">Статья в разработке!</callout> +Таймер, на который смотрит триггер, позволяет обрабатывать события типа «Если через X часов не произошло что-то, то делать предусмотренное действие».  \\  
- +
-Таймер, на который смотрит триггер, позволяет обрабатывать события типа «Если через X часов не произошло что-то, то делать предусмотренное действие». +
 Т.е. можно проверить через некоторое время, выполнилось ли нужное условие, или нет. Т.е. можно проверить через некоторое время, выполнилось ли нужное условие, или нет.
  
-Также иногда возникает потребности вызова общей логики, не привязанной к объектам системы, просто раз в некоторый интервал времени.  +Также таймер пригодится, если нужно вызывать с какойо периодичностью скрипт, не привязанный к объектам системы, а в рамках общей логики.
  
 ===== Управление событиями таймера ===== ===== Управление событиями таймера =====
-«Администрирование» -> «Управление событиями таймера». +ADVANTA -> «Администрирование» -> «Дополнительные сервисы» -> «Расписание пользовательских бизнес-операций».
  
   * «Код операции» – числовой код операции   * «Код операции» – числовой код операции
-  * «Название операции» – из справочника бизнес операций, должна отображаться как гиперссылка на страницу редактирования / удаления соответствующей записи о таймере. +  * «Название операции» – из справочника бизнес операций, отображается как гиперссылка на страницу редактирования / удаления соответствующей записи о таймере. 
-  * «Расписание» - сборно в виде строки, формата {Периодичность в днях / Если указана периодичность внутри дня, то указывается интервал внутри дня}. Например «Еженедельно, каждый пн, пт, каждую N неделю, в XX:YY», или «Периодически раз в 2:00». +  * «Расписание» -- расписание, по которому срабатывает таймер. Например: "//Еженедельно, каждый пн, пт, каждую N неделю, в XX:YY//", или "//Периодически раз в 2:00//"
-    * Для аналога текстовое отображение интервалов уже реализовано в отправке форм (с периодичностью день и реже) и в настройке ОЛАП кубов (день и чаще)+  * «Последняя сработка» -- дата и время последней генерации соответствующего события, если оно наступало.  \\  Если событие еще не наступило, то пусто.
-  * «Последняя сработка» - Дата и время последней генерации соответствующего события, если оно наступало. Если событие еще не наступило, то пусто+
-  * Должна выполняться сортировка по любой колонке (аналогично списку ОЛАП кубов).+
  
-При нажатии на «Добавить», должно отображаться окно  +По любой колонке можно эту таблицу отсортировать. 
-  * В окне должен быть обеспечен выбор бизнес операции в виде Код – Название, с поиском по вхождению фрагмента набираемого текста. Выбирается только одна бизнес операция. + 
-  * Блок с расписанием комбинированный, при вариантах «Никогда», «Ежегодно», «Ежемесячно», «Еженедельно», «Ежедневно» - используется компонент из автоматической рассылки форм.  +При нажатии на «Добавить», отображается окно  
-  * Добавить новый период «По интервалу», с периодичностью в часах, в том числе дробных. Аналогично пункту в расчете ОЛАП-кубов +  * Выберите здесь нужную вам бизнес-операцию (в частности, с помощью текстового поиска)
-    * При нажатии «Сохранить» - должна создаваться или изменяться открытая на редактирование запись. +  * Выберите в блоке с расписанием нужный вам способ.
-    * При нажатии «Удалить» - должен появляться в браузерном окне запрос «Действительно удалить таймер для {Название операции}?» с кнопками «Ок» и «Отмена».+
  
 =====Справочник бизнес операций===== =====Справочник бизнес операций=====
-При вызове по ссылке «Справочник бизнес операций» из формы «Управление событиями таймера», должна открываться форма с таблицей: +При вызове по ссылке «Справочник бизнес операций» из формы «Управление событиями таймера», открывается форма с таблицей: 
-  * «Код операции» - Уникальное числовое значение, при вставке заполняется автоматически, как максимум по значениям этого поля + 1. Передается вместе с событием в виде параметра. +  * «Код операции» -- Уникальное числовое значение, при вставке заполняется автоматически, как максимум по значениям этого поля + 1. Передается вместе с событием в виде параметра. 
-  * «Название» - Текстовое название операции. +  * «Название» -- Текстовое название операции.
-  * Блок кнопок «Редактировать / Удалить».  +
-    * При нажатии на «редактировать», открывается окно редактирования названия операции. +
-    * При нажатии на «Удалить», отображается окно браузера с вопросом «Удалить операцию «Название операции»?  \\  Вместе с операцией будут удалена и все таймеры с ней связанные» с кнопками «Да», «Нет».  +
-      * При нажатии «Да», операция удаляется, все таймеры (и по подписке, и по периодичности) для удаленной операции должны быть удалены из очереди. +
-      * При удалении, операцию удаления необходимо запротоколировать в системном протоколе в разделе настройки.+
  
-При нажатии на кнопку «+ Добавить», должно отображаться поле для ввода названия бизнес операции (как при редактировании), но изначально пустое. После заполнения пользователем и сохранения, операция должна быть сохранена, и ей присвоен новый код, рассчитанный как максимум по значениям поля «Код операции» + 1.+При нажатии на кнопку «+ Добавить», отображается поле для ввода названия бизнес операции (как при редактировании), но изначально пустое. 
  
 +После заполнения и сохранения:
 +  - операция сохраняется, 
 +  - ей присваивается новый код -- порядковый номер сохранённой бизнес-операции.
    
 ===== Связанные API методы ===== ===== Связанные API методы =====
-**InsertTimerEvent**, метод сохраняющий в очереди один вызов. Метод должен иметь параметры: +====InsertTimerEvent==== 
-  * SessionID – ID сессии пользователя +Cохраняет в очереди один вызов. 
-  * CallTime – обязательный параметр типа DateTime в котором содержится дата и время, когда необходимо послать сообщение на шину. +
-  * ObjectID – GUID объекта, идентификатор, смысл которого будет известен при создании логики обработки, может быть идентификатором объекта дерева, записи справочника, пользователя и т.п. параметр не обязательный, если он не требуется, то вместо него должен допускаться null +
-  * OperationCode – обязательный целочисленный параметр с кодом операции. Код должен быть зарегистрирован в справочнике кодов операций, если его там нет, то ошибка «Код операции не зарегистрирован» +
-  * Parameters – объект типа JSON, в котором вызывающий может сохранить дополнительные параметры, которые будут необходимы при последующей обработке. +
-  * Метод не возвращает ничего если завершение успешно. Если не успешно, то вызывает исключение.+
  
-**CheckTimerEvent**, метод, проверяющий есть ли заданный вызов в очереди среди будущих и еще не сработавших элементов очереди. Метод должен иметь следующие параметры: +Параметры метода: 
-  SessionID – ID сессии пользователя +|SessionID|ID сессии пользователя| 
-  OperationCode – обязательный целочисленный параметр с кодом операции +|CallTime|обязательный параметр типа DateTime в котором содержится дата и времякогда необходимо послать сообщение на шину.| 
-  ObjectID – GUID объекта. Не обязательный параметр. Если он передан, ищутся сохраненные в очереди записи с точным совпадением на GUID и код операции. Если параметр null, то необходимо искать в очереди записи только с кодом операции и ObjectID = null. +|ObjectID|GUID объекта, идентификатор, смысл которого будет известен при создании логики обработкиможет быть идентификатором объекта дерева, записи справочника, пользователя и т.п. параметр не обязательный, если он не требуется, то вместо него должен допускаться null| 
-  Возвращать метод должен список, содержащий удовлетворяющие условию поиска элементы очереди с параметрами (CallTime, Parameters), в том числе может быть пустой список, если поиск успешен, если поиск не успешен, то вызывает исключение.+|OperationCode|обязательный целочисленный параметр с кодом операции. Код должен быть зарегистрирован в справочнике кодов операций, если его там нет, то ошибка «Код операции не зарегистрирован»| 
 +|Parameters|объект типа JSON, в котором вызывающий может сохранить дополнительные параметры, которые будут необходимы при последующей обработке.| 
 +Метод не возвращает ничего если завершение успешно. Если не успешно, то вызывает исключение. 
 + 
 +====CheckTimerEvent==== 
 +Проверяет, есть ли заданный вызов в очереди среди будущих и еще не сработавших элементов очереди.  
 + 
 +Параметры метода
 +|SessionID|ID сессии пользователя| 
 +|OperationCode|обязательный целочисленный параметр с кодом операции| 
 +|ObjectID|GUID объекта. \\ Не обязательный параметр. Если он передан, ищутся сохраненные в очереди записи с точным совпадением на GUID и код операции. Если параметр null, то необходимо искать в очереди записи только с кодом операции и ObjectID = null.| 
 +Возвращать метод должен список, содержащий удовлетворяющие условию поиска элементы очереди с параметрами (CallTime, Parameters), в том числе может быть пустой список, если поиск успешен, если поиск не успешен, то вызывает исключение.
  
 =====Генерация событий в шину по подписке===== =====Генерация событий в шину по подписке=====
-При наступлении времени, когда должно быть отправлено в шину событие, в зарегистрированных через метод InsertTimerEvent и не обработанных еще на момент наступления заданного времени,  сгенерировать отправку в шину события типа «Подписка на таймер», с параметрами, сохраненными в нем при подписке:+При наступлении времени, когда должно быть отправлено в шину событие, в зарегистрированных через метод InsertTimerEvent и не обработанных еще на момент наступления заданного времени, генерируется отправка в шину события типа «Подписка на таймер», с параметрами, сохраненными в нем при подписке:
   * OperationCode   * OperationCode
   * ObjectID   * ObjectID
   * Parameters   * Parameters
  
-Отметить подписку, как исполненную (можно как время отправки, или ID события). Может потребоваться для последующих разборок нештатных ситуаций.+Подписка отмечается как исполненная.
  
 =====Генерация событий в шину по регулярному таймеру===== =====Генерация событий в шину по регулярному таймеру=====
  
-При наступлении времени, когда должно быть отправлено событие, согласно таблице настроек, должно быть отправлено в шину событие типа «Таймер», содержащее параметры:+При наступлении времени, когда должно быть отправлено событие, согласно таблице настроек, в шину отправляется событие типа «Таймер», которое содержит параметры:
 <code>OperationCode</code> <code>OperationCode</code>
 Одновременно должно быть сохранено время последней сработки. Одновременно должно быть сохранено время последней сработки.
 +
 +<grid>
 +<col sm="6">
 +<btn block="true">[[product/triggers/start|← К оглавлению]]</btn>
 +</col>
 +<col sm="6">
 +<btn block="true">[[/product/triggers/notification|Уведомления →]]</btn>
 +</col>
 +</grid>