Это старая версия документа!


Создание вызова в очереди событий

Метод: InsertTimerEvent

Для планирования запуска бизнес-операции на определённый день и время служит API-функция «InsertTimerEvent». Описание этой API можно найти на странице службы «APIScheduledEvents». Относительный путь к странице этой службы на вашем стенде ADVANTA: «/components/services/APIScheduledEvents.asmx».

ПараметрОписание
SessionIDID сессии пользователя
CallTimeобязательный параметр типа DateTime в котором содержится дата и время, когда необходимо послать сообщение на шину.
ObjectIDGUID объекта, идентификатор, смысл которого будет известен при создании логики обработки, может быть идентификатором объекта дерева, записи справочника, пользователя и т.п. параметр не обязательный, если он не требуется, то вместо него должен допускаться null
OperationCodeобязательный целочисленный параметр с кодом операции. Код должен быть зарегистрирован в справочнике кодов операций, если его там нет, то ошибка «Код операции не зарегистрирован»
Parametersобъект типа JSON, в котором вызывающий может сохранить дополнительные параметры, которые будут необходимы при последующей обработке.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <InsertTimerEvent xmlns="http://streamline/">
        <contract>
            <ASPNETSessionId>string</ASPNETSessionId>
            <CallTime>dateTime</CallTime>
            <ObjectId>guid</ObjectId>
            <OperationCode>int</OperationCode>
            <Parameters>string</Parameters>
        </contract>
    </InsertTimerEvent>
  </soap:Body>
</soap:Envelope>
ПараметрОписание
InsertTimerEventResponseПризнак успешного создания вызова
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <InsertTimerEventResponse xmlns="http://streamline/" />
    </soap:Body>
</soap:Envelope>

Протестировать создание сообщения о выполнении бизнес-операции проще всего через систему Postman. Ниже приведены снимки настроек SOAP-запроса в ней:

Рисунок 1. Настройки заголовков запроса (закладка «Headers»)


Рисунок 2. Настройки тела запроса (закладка «Body»)


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

Рисунок 3. Настройки триггера


Код проверки «условия» запуска триггера:

TriggerConsole.WriteLine($"Проверка условия: ID события - {Context.EventId}, отправлено - {Context.EventSentTime}");

// Реагируем только на бизнес-операцию с кодом №1
if (Event.BusinessOperationCode == 1){
    TriggerConsole.WriteLine($"ID cобытия таймера: {Event.BusinessOperationCode}");
} else {
    return false; // Если это не операция с кодом №1, не запускаем триггер
}

return true;


Код «скрипта». В данном примере просто выводим в консоль ID и время сообщения, а также параметры, переданные в API-функции «InsertTimerEvent»:

TriggerConsole.WriteLine($"ID события = {Context.EventId}");
TriggerConsole.WriteLine($"Дата и время = {Context.EventSentTime}");

// Код бизнес-операции:
TriggerConsole.WriteLine($"BusinessOperationCode = {Event.BusinessOperationCode}");

// UID объекта, указанный при вызове API InsertTimerEvent:
TriggerConsole.WriteLine($"ObjectId = {Event.ObjectId}");

// Параметры, переданные через API InsertTimerEvent:
TriggerConsole.WriteLine($"Parameters = {Event.Parameters}");


В результате, в логе триггера будут видны переданные через API значения:

Рисунок 4. Лог триггера