Saltar a contenido

Tareas

Como se ha cubierto hasta ahora, las tareas son instancias de una Automatización y uno de los conceptos más importantes en la plataforma BotCity Maestro.

Aquí cubriremos cómo crear, interrumpir, finalizar y recuperar tareas.

Crear una tarea

Podemos crear una nueva tarea a través del SDK de BotMaestro utilizando el siguiente código:

params = {}
task = maestro.create_task(
    activity_label="automationLabel",
    parameters=params,
    test=False
)
Map<String, Object> params = new HashMap<>();
AutomationTask task = maestro.createTask("automationLabel", params, false);
const parameters = {}
const task = await maestro.createTask("automationLabel", parameters, false)
const parameters: object = {}
const task: Task = await maestro.createTask("automationLabel", parameters, false)

Interrumpir una tarea

Para tareas de larga duración, como el procesamiento por lotes de elementos, puede ser prudente permitir a los usuarios solicitar su interrupción.

Aquí se muestra cómo solicitar la interrupción de una tarea específica:

maestro.interrupt_task(task_id=task.id)
maestro.interruptTask(task.id);
// No implementado aún
// No implementado aún

Important

Ten en cuenta que no se garantiza que la tarea se interrumpa.

Es responsabilidad del desarrollador del código del bot verificar la bandera de interrupción solicitada y actuar en consecuencia para detener la tarea.

Verificar la solicitud de interrupción

Es responsabilidad del desarrollador del código del bot verificar la bandera de interrupción solicitada y actuar en consecuencia para detener la tarea.

Aquí te mostramos cómo hacerlo:

while not maestro.get_task(task_id=task.id).is_interrupted():
    # Keep processing items
    print("Processing items")
    ...
print("An interruption was requested.")
while(!maestro.getTask(task.id).getInterrupted()) {
    // Keep processing items
    System.out.println("Processing items");
    ...
}
System.out.println("An interruption was requested.");
// No implementado aún
// No implementado aún

Finalizar una tarea reportando datos adicionales

Una vez que se crean las tareas, se encolan en el BotCity Maestro y se recopilan para su ejecución por el BotCity Runner.

Las tareas que se recopilan para su ejecución avanzan al estado Running.

Es responsabilidad del desarrollador del bot informar al BotCity Maestro a través del SDK sobre el estado final adecuado de una tarea.

Esto permite un mejor control y también agregar detalles sobre la finalización de la tarea que luego pueden ser inspeccionados por los usuarios a través del portal de BotCity Maestro.

Una tarea puede finalizarse con uno de los siguientes estados:

  • SUCCESS: La tarea finalizó correctamente.
  • FAILED: La tarea no pudo finalizar.
  • PARTIALLY_COMPLETED: La tarea completó parte de los pasos esperados.

Además de reportar el estado de finalización de una tarea, también podemos reportar datos adicionales sobre los elementos que se procesaron durante la ejecución.

Este recurso será muy útil en los casos en que necesitemos supervisar la cantidad de elementos procesados con éxito o falla por la tarea.

Tip

Básicamente, un elemento puede ser cualquier entidad relacionada con tu proceso de automatización.

De esta forma, puedes utilizar la lógica que sea necesaria para el proceso y definir cómo se consumirá, procesará y contabilizará cada elemento en el código.

Al final, simplemente reporta estos datos a través del método finish_task del SDK de Maestro.

maestro.finish_task(
    task_id=task.id,
    status=AutomationTaskFinishStatus.SUCCESS,
    message="Task Finished with Success.",
    total_items=100, # Total number of items processed
    processed_items=90, # Number of items processed successfully
    failed_items=10 # Number of items processed with failure
)
maestro.finishTask(
    task.id,
    "Task Finished with Success.",
    FinishStatus.SUCCESS,
    100, // Total number of items processed
    90, // Number of items processed successfully
    10 // Number of items processed with failure
);
await maestro.finishtTask(
    task.id,
    "Task finished with Success.",
    "SUCCESS",
)
await maestro.finishtTask(
    task.id,
    "Task finished with Success.",
    "SUCCESS"
)

Info

Este recurso de reportar datos también hace parte de BotCity Insights, que es un módulo dedicado a reportar y mostrar datos relacionados con tu iniciativa de RPA.

La etapa de reportar datos en el código de la automatización es esencial para que se generen las informaciones de alto nivel.

Consulta más detalles sobre este módulo accediendo a la documentación de BotCity Insights.

Recuperar una tarea

Puedes obtener información sobre una tarea utilizando el ID o a través de la referencia de ejecución actual.

Usando el ID de una tarea específica

task = maestro.get_task("<TASK_ID>")
AutomationTask task = maestro.getTask("<TASK_ID>");
const sameTask = await maestro.getTask("<TASK_ID>")
const sameTask: Task = await maestro.getTask("<TASK_ID>")

Obtener la referencia de ejecución actual

Como vimos anteriormente, el SDK de Maestro tiene un método especial para obtener la referencia de la tarea actual que se está ejecutando por el Runner.

De esta manera, podemos acceder a la información de ejecución de manera más práctica.

# Getting the details of the current task being executed
execution = maestro.get_execution()

# Information about the task being executed
print(f"Task ID is: {execution.task_id}")
print(f"Task Parameters are: {execution.parameters}")

Info

Por defecto, el objeto BotExecution ya está configurado en la plantilla del proyecto Java de BotCity.

public void action(BotExecution botExecution) {

    try {
        ...

        // Information about the task being executed
        System.out.println(botExecution.getTaskId());
    ...
// Getting the arguments passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Getting the details of the current task being executed
const executionTask = await maestro.getTask(taskid)
// Getting the arguments passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Getting the details of the current task being executed
const executionTask: Task = await maestro.getTask(taskid)

Acceder a los parámetros de la tarea

Una de las piezas de información a las que podemos acceder desde una tarea son los parámetros de entrada que recibe.

Los parámetros de una tarea se tratan como un diccionario; para acceder a un valor, podemos pasar la etiqueta que se utilizó para crear el parámetro en BotCity Maestro como clave.

Consulta más detalles sobre cómo parametrizar la automatización en Maestro a través de la sección Automatizaciones.

# Instantiating the Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Getting the details of the current task being executed
execution = maestro.get_execution()

# Getting parameter by label
parameter = execution.parameters.get("<PARAMETER_LABEL>")

Info

Por defecto, el objeto BotExecution ya está configurado en la plantilla del proyecto Java de BotCity.

public void action(BotExecution botExecution) {

    try {
        // Instantiating the Maestro SDK
        // The BotExecution object contains the information that is passed by the Runner
        BotMaestroSDK maestro = new BotMaestroSDK();
        maestro.login(botExecution);

        // Getting parameter by label
        Object parameter = botExecution.getParams().get("<PARAMETER_LABEL>");
    ...
// Getting the arguments passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Instantiating the Maestro SDK
const maestro = new BotMaestroSdk()
maestro.login("https://developers.botcity.dev", "<LOGIN>", "<KEY>")

// Getting the details of the current task being executed
const executionTask = await maestro.getTask(taskid)
// Getting the arguments passed by Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Instantiating the Maestro SDK
const maestro: BotMaestroSdk = new BotMaestroSdk()
maestro.login("https://developers.botcity.dev", "<LOGIN>", "<KEY>")

// Getting the details of the current task being executed
const executionTask: Task = await maestro.getTask(taskid)