Despliegue del marco en la cuenta de destino#
Instalar python para todos los usuarios, marcar "Add python.exe to PATH" en la instalación personalizada:
- instalar python para todos los usuarios
- Asociar archivos con Python (solicitar el lanzador "py")
- Crear accesos directos para aplicaciones instaladas
- Agregar Python a las variables de entorno
- Precompilar la biblioteca estándar
Crear una tarea en el programador de tareas de Windows con cualquier nombre General:
- "Ejecutar solo para usuarios que hayan iniciado sesión"
Disparadores:
- "Al iniciar sesión" --> "Usuario" (especificar)
- "Al conectarse de forma remota" --> "Conexión desde un equipo remoto" --> "Usuario" (especificar)
Acciones:
- "Iniciar programa"
- "Programa o script" --> Ruta completa a SherpaPython.exe
- "Carpeta de trabajo" --> Ruta a la carpeta donde se encuentra SherpaPython.exe, obligatoriamente sin comillas, ejemplo: D:\Sherpa_RPA\PythonSherpa-framework\
Ejecutar manualmente SherpaPython.exe una vez
Los registros del marco se ubicarán en la ruta C:\Users\User\AppData\Roaming\Sherpa RPA Python
El archivo de configuración settings.txt se ubicará en la ruta C:\Users\User\AppData\Roaming\Sherpa RPA Python
Contenido de settings.txt
- << Ingrese el guid del robot >> - reemplazar por el GUID del robot
- << Ingrese el host del robot >> - ingresar el host o IP del orquestador junto con el protocolo, por ejemplo https://orchestrator2.sherparpa.ru
- << Ingrese el estado de logoff del robot >> - un número (0 - no se realiza logoff automático al finalizar trabajos, 1 - se realiza logoff automático al finalizar trabajos, si no hay tercera línea se considera que el valor establecido es 1)
RobotsOrcFramework
Manejo de la parada suave dentro del robot python
import signal
import time
import sys
class TestProcess1():
stop = False
def __init__(self):
# Captura de la señal de parada suave del marco
signal.signal(signal.SIGBREAK, self.stop_process)
# Manejo de la señal en forma de cambio de bandera
def stop_process(self, signal, frame):
self.stop = True
def robot_work(self):
for elem in range(10):
time.sleep(1)
# Si la bandera está en la posición correcta, interrumpir el programa
if self.stop:
sys.exit()
test = TestProcess1()
test.robot_work()
Obtener y procesar argumentos del marco dentro del robot python
# procesar argumentos de la línea de comandos
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("|"))
Obtener host y GUID del robot dentro del robot python
# obtener configuraciones
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()
Ruta a los scripts python de los robots
En el nombre de la versión del proceso en el orquestador, especificar la ruta al script python,
relativa al archivo del marco (RobotsOrcFramework.py)
Formato
carpeta1\carpeta2\nombre del script sin extensión
Uso de TaskOrchestratorAPI
from TaskOrcAPI import TaskOrchestratorAPI # carpeta OrchestratorAPI
TOA = TaskOrchestratorAPI(robot_guid, host, headers)
Agregar tarea a la cola
param_task se puede omitir, por defecto {"":""}
name se puede omitir, por defecto "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
Obtenemos tarea de la cola
status, se puede omitir, por defecto 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]> Código de la solicitud
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'] # comentario
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
Actualizamos el estado de la tarea obtenida anteriormente
Directorio de estados de tareas
STATUS_NEW = 0; # Nueva tarea
STATUS_IN_PROGRESS = 1; # Tarea en progreso
STATUS_SUCCESS = 2; # Tarea completada con éxito
STATUS_FAILED = 3; # Tarea fallida con Exception de Aplicación
STATUS_FAILED_BUSINESS = 4; # Tarea fallida con Exception de Negocio
STATUS_POSTPONED = 5; # Tarea pospuesta hasta el tiempo indicado
STATUS_ABANDONED = 6; # Tarea abandonada (no procesada a tiempo)
status, se puede omitir, por defecto 0
task_GUID = '4e9cb924-681a-4d1d-9420-e1dac677f3fa'
status = 5
result = TOA.update_task_status(task_GUID, status)
result # <Response [200]> Código de la solicitud
Obtenemos recurso (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'] # Recurso
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
Actualizamos el recurso
name se puede omitir, por defecto NewName
si el recurso son credenciales (credentials), indicamos password, entonces text = username, de lo contrario no se indica
asset_GUID = "d042c0cf-4862-48e7-8d10-caf892ceec3f"
text = 'Nuevo recurso'
name = 'Recurso'
password = '777'
result = TOA.asset_update(asset_GUID, text, name, password)
result # <Response [200]> Código de la solicitud
Agregamos una nueva entrada al registro
Valores permitidos para Level: 'Info', 'Critical', 'Error', 'Warning', 'Debug'
level se puede omitir, por defecto 'Info'
message se puede omitir, por defecto ''
robot_guid = sys.argv[1]
process_version_guid = 'f7952815-a238-4870-b678-943b0119d0f4'
job_guid = '922d3cc6-99ec-44c2-b0a0-62114c9d2908'
level, message = 'Info', 'mensaje'
result = TOA.add_new_log_entry(
robot_guid, process_version_guid, job_guid
)
result_dict = json.loads(result.text)
result # <Response [200]> Código de la solicitud
result_dict['guid'] # d5fc7d6e-b609-4aaa-be35-e51fdacb5b5d