Иногда требуется во время процесса сделать его приостановку на некоторое время.
Стандартный метод Sleep на бизнес-сервисе Workflow Utilities работает не совсем так, как мы ожидаем, т.е. при его вызове никакого ожидания не происходит. Ниже я перечислю несколько способов сделать Sleep, некоторые простые, некоторые необычные.
Способ 1. Использование утилит операционной системы
Самый простой способ поставить процесс на ожидание это использовать возможности операционной системы.
Вызов ожидания можно реализовать на eScript, используя утилиты операционной системы, обращаясь к ним через команду Clib.System("command");
Для операционной системы семейства Windows:
Для операционной системы семейства Unix:
Чтобы определить к какому семейству относится операционная система, можно использовать следующий код:
Способ 2. Использование библиотек операционной системы
Код, описанный ниже, не использует прямого вызова утилиты операционной системы. При этом он использует библиотеки операционной системы для аналогичного эффекта.
Для операционной системы семейства Windows:
Для операционной системы семейства Unix:
В этом способе используются особенности поведения транспортного сервиса EAI.
ВНИМАНИЕ: Этот способ ни в коем случае не является рекомендуемым способом реализации команды Sleep, скорее это костыль для использования в Workflow без необходимости что-либо компилировать.
Суть способа состоит в том, чтобы вызвать бизнес сервис EAI File Transport используя его метод Receive, указав там время таймаута(параметр FileSleepTime) и путь к несуществующему файлу(Параметр FileName). При вызове сервис не найдёт файл по указанному пути и будет ожидать его появления там заданное колличество времени.
Способ 4. Отложенный запуск
Это не совсем Sleep, скорее это механизм позволяющий нам сделать отложенное действие.
Например, запустить Workflow через некоторое время.
Суть заключается в асинхронном запуске задачи на сервере в заданное время. Т.е. используя бизнес сервис Asynchronous Server Requests, для запуска асинхронной задачи в заданное время.
Стандартный метод 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, для запуска асинхронной задачи в заданное время.
Комментариев нет:
Отправить комментарий