Развертывание фреймворка на целевой учетной записи
Установить python для всех пользователей, поставить галочку "Add python.exe to PATH" Галочки Customize Installation:
install python for all users
Associate files with Python (request the "py" launcher)
Create shortcuts for installed applications
Add Python to enviroment variables
Precompile standard library
Создать задачу в планировщике заданий Windows с любым именем Общее:
"Выполнить только для пользователей, вошедших в систему"
Триггеры:
"При входе в систему" --> "Пользователь" (указать)
"При удаленном подключении" --> "Подключение с удаленного компьютера" --> "Пользователь" (указать)
Действия:
"Запуск программы"
"Программа или сценарий" --> Полный путь до SherpaPython.exe
"Рабочая папка" --> Путь до папки в которой лежит SherpaPython.exe, обязательно без кавычек пример: D:\Sherpa_RPA\PythonSherpa-framework\
Один раз вручную запустить SherpaPython.exe
Логи фрейморка будут размещаться по пути С:\Users\User\AppData\Roaming\Sherpa RPA Python
Файл настроек settings.txt будет размещаться по пути С:\Users\User\AppData\Roaming\Sherpa RPA Python
Содержимое settings.txt
<< Введите guid робота >> - заменить на GUID робота
<< Введите host робота >> - ввести хост или IP оркестратора вместе с протоколом, например https://orchestrator2.sherparpa.ru
<< Введите статус logoff робота >> - одна цифра (0 - не производится автоматический logoff после окончания работ, 1 - производится автоматический logoff после окончания работ, в случае отсутствия третьей строки считается установленным значение 1)
RobotsOrcFramework
Обработка мягкой остановки внутри python-робота
import signal
import time
import sys
class TestProcess1():
stop = False
def __init__(self):
# Перехват сигнала мягкой остановки от фреймворка
signal.signal(signal.SIGBREAK, self.stop_process)
# Обработка сигнала в виде переключения флага
def stop_process(self, signal, frame):
self.stop = True
def robot_work(self):
for elem in range(10):
time.sleep(1)
# Если флаг в нужной позиции, прервать программу
if self.stop:
sys.exit()
test = TestProcess1()
test.robot_work()
Получить и обработать аргументы от фреймворка внутри python-робота
# обработать аргументы командной строки
def process_cmd_arguments(argv):
process_version_guid = argv[0]
job_guid = argv[1]
settings_path = argv[3]
process_cmd_arguments(sys.argv[1].split("|"))
Получить host и GUID робота внутри python-робота
# получить настройки
def get_settings():
with open(settings_path, "r", encoding="utf-8") as file:
settings = file.read()
settings = [elem.replace("\n", "") for elem in settings.split("\n")]
return settings[0], settings[1]
robot_GUID, host = get_settings()
Путь к python-скриптам роботов
В имени версии процесса в оркестраторе указать путь к python-скрипту,
относительно файла фреймворка (RobotsOrcFramework.py)
Формат
папка1\папка2\имя скрипта без расширения
Использование TaskOrchestratorAPI
from TaskOrcAPI import TaskOrchestratorAPI # папка OrchestratorAPI
TOA = TaskOrchestratorAPI(robot_guid, host, headers)
Добавление задачи в очередь
param_task можно не указывать, по умолчанию {"":""}
name можно не указывать, по умолчанию "NewTask"
queue_GUID = "f96b549d-bc58-48b9-ba78-463692c7680b"
param_task = {"param1": "1", "param2": "2", "param3": "3"}
name = 'New Task'
result = TOA.add_task(queue_GUID)
result['guid'] # d5fc7d6e-b609-4aaa-be35-e51fdacb5b5d
Получаем задачу из очереди
status, можно не указывать, по умолчанию 0
queue_GUID = "f96b549d-bc58-48b9-ba78-463692c7680b"
status = 1
result = TOA.get_task(queue_GUID, status)
result_dict = json.loads(result.text)
result # <Response [200]> Код запроса
result_dict['id'] # 1171
result_dict['guid'] # d5fc7d6e-b609-4aaa-be35-e51fdacb5b5d
result_dict['name'] # NewTask
result_dict['status'] # 4
result_dict['created'] # 2022-10-28 06:19:19
result_dict['updated'] # 2022-10-28 09:45:45
result_dict['comment'] # комментарий
result_dict['priority'] # 1
result_dict['deadline'] # 2022-10-28 06:19:19
result_dict['postponed'] # 2022-10-28 09:45:45
result_dict['parameters'] # {"param": "value"}
result_dict['description'] # None
Обновляем статус полученной ранее задачи
Справочник статусов задач
STATUS_NEW = 0; # Новая задача
STATUS_IN_PROGRESS = 1; # Задача в работе
STATUS_SUCCESS = 2; # Задача успешно завершена
STATUS_FAILED = 3; # Задача провалена с Application Exception
STATUS_FAILED_BUSINESS = 4; # Задача провалена с Business Exception
STATUS_POSTPONED = 5; # Задача отложена до указанного времени
STATUS_ABANDONED = 6; # Задача заброшена (не взята в обработку вовремя)
status, можно не указывать, по умолчанию 0
task_GUID = '4e9cb924-681a-4d1d-9420-e1dac677f3fa'
status = 5
result = TOA.update_task_status(task_GUID, status)
result # <Response [200]> Код запроса
Получаем ресурс (asset)
asset_GUID = "d042c0cf-4862-48e7-8d10-caf892ceec3f"
result = TOA.get_asset(asset_GUID)
result['id'] # 1171
result['guid'] # d5fc7d6e-b609-4aaa-be35-e51fdacb5b5d
result['name'] # Ресурс
result['text'] # 4
result['type'] # 1
result['created'] # 2022-10-28 06:19:19
result['updated'] # 2022-10-28 06:19:19
result['robot_id'] # None
result['password'] # 2022-10-28 06:19:19
result['is_deleted'] # 0
result['account_id'] # 27
result['robot_type'] # 3
result['description'] # ''
result['robot_group_id'] # None
Обновляем ресурс
name можно не указывать, по умолчанию NewName
если ресурс это реквизиты (credentials), указываем password, тогда text = username, иначе не указываем
asset_GUID = "d042c0cf-4862-48e7-8d10-caf892ceec3f"
text = 'Новый ресурс'
name = 'Ресурс'
password = '777'
result = TOA.asset_update(asset_GUID, text, name, password)
result # <Response [200]> Код запроса
Добавляем новую запись в лог
Допустимые значения для Level: 'Info', 'Critical', 'Error', 'Warning', 'Debug'
level можно не указывать, по умолчанию 'Info'
message можно не указывать, по умолчанию ''
robot_guid = sys.argv[1]
process_version_guid = 'f7952815-a238-4870-b678-943b0119d0f4'
job_guid = '922d3cc6-99ec-44c2-b0a0-62114c9d2908'
level, message = 'Info', 'сообщение'
result = TOA.add_new_log_entry(
robot_guid, process_version_guid, job_guid
)
result_dict = json.loads(result.text)
result # <Response [200]> Код запроса
result_dict['guid'] # d5fc7d6e-b609-4aaa-be35-e51fdacb5b5d
Last updated