пятница, 27 сентября 2019 г.

Использование Sleep в Siebel

Иногда требуется во время процесса сделать его приостановку на некоторое время.
Стандартный метод Sleep на бизнес-сервисе Workflow Utilities работает не совсем так, как мы ожидаем, т.е. при его вызове никакого ожидания не происходит. Ниже я перечислю несколько способов сделать Sleep, некоторые простые, некоторые необычные.


Способ 1. Использование утилит операционной системы

Самый простой способ поставить процесс на ожидание это использовать возможности операционной системы.
Вызов ожидания можно реализовать на eScript, используя утилиты операционной системы, обращаясь к ним через команду Clib.System("command");

Для операционной системы семейства Windows:


Clib.System("timeout 2"); //Ожидание в 2 секундны

Для операционной системы семейства Unix:


Clib.system("sleep 2"); //Ожидание в 2 секундны


Чтобы определить к какому семейству относится операционная система, можно использовать следующий код:
 Clib.getenv("OS"); //Для Windows Server вернёт значение "Windows_NT"


Способ 2. Использование библиотек операционной системы

Код, описанный ниже, не использует прямого вызова утилиты операционной системы. При этом он использует библиотеки операционной системы для аналогичного эффекта.



Для операционной системы семейства Windows:
SElib.dynamicLink("kernel32.dll", "Sleep", STDCALL, sDuration*1000); //где
sDuration это время в секундах

Для операционной системы семейства Unix:


SElib.dynamicLink("libc.so.6", "sleep", sDuration); //где
sDuration это время в секундах, libc.so.6 это версия используемой в операционной системе библиотеки C, соответственно нужно указывать корректное название библиотеки
Чтобы определить к какому семейству относится операционная система, можно использовать следующий код:
 Clib.getenv("OS"); //Для Windows Server вернёт значение "Windows_NT"
Способ 3. Использование особенностей EAI

В этом способе используются особенности поведения транспортного сервиса EAI.
ВНИМАНИЕ: Этот способ ни в коем случае не является рекомендуемым способом реализации команды Sleep, скорее это костыль для использования в Workflow без необходимости что-либо компилировать.
Суть способа состоит в том, чтобы вызвать бизнес сервис EAI File Transport используя его метод Receive, указав там время таймаута(параметр FileSleepTime) и  путь к несуществующему файлу(Параметр FileName). При вызове сервис не найдёт файл по указанному пути и будет ожидать его появления там заданное колличество времени.

Способ 4. Отложенный запуск

Это не совсем Sleep, скорее это механизм позволяющий нам сделать отложенное действие.
Например, запустить Workflow через некоторое время.
Суть заключается в асинхронном запуске задачи на сервере в заданное время. Т.е. используя бизнес сервис Asynchronous Server Requests, для запуска асинхронной задачи в заданное время.


Комментариев нет:

Отправить комментарий