Saltar a contenido

Estoy empezando ahora

Si está empezando ahora con BotCity o quiere una visión general de cómo reportar los ítems procesados en el código de la automatización, siga la guía a continuación.

Reportar datos con el Maestro SDK

Usted reporta la información sobre los ítems procesados usando el Maestro SDK en el código de su automatización.

Instalar el SDK

Si la dependencia aún no está instalada, siga las instrucciones a continuación:

pip install botcity-maestro-sdk

Dependencia en requirements.txt

Además de instalar el paquete, incluya la dependencia en el archivo requirements.txt del robot.

<repositories>
    <repository>
        <id>nexus-botcity-public</id>
        <url>https://devtools.botcity.dev:8081/repository/botcity-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<dependencies>
    <!-- Your other dependencies -->
    <dependency>
        <groupId>dev.botcity</groupId>
        <artifactId>maestro-sdk</artifactId>
        <version>2.2.0</version>
    </dependency>
</dependencies>
dotnet add package BotCity.Maestro.SDK

Importar el SDK

Después de la instalación, importe la dependencia e instancie el Maestro SDK:

# Importando la dependencia del Maestro SDK
from botcity.maestro import *

# Deshabilitando errores si no hay conexión con el Orquestador
BotMaestroSDK.RAISE_NOT_CONNECTED = False

# Instanciando el Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Obteniendo los detalles de la tarea actual en ejecución
execution = maestro.get_execution()
// Importando la dependencia del Maestro SDK
import dev.botcity.maestro_sdk.*;
...

public void action(BotExecution botExecution) {

    try {
        // Instanciando el Maestro SDK
        BotMaestroSDK maestro = new BotMaestroSDK();
        maestro.login(botExecution);
    ...
// Importando la dependencia del Maestro SDK
using Dev.BotCity;
using Dev.BotCity.MaestroSdk.Model.Execution;

// Instanciando el Maestro SDK
BotMaestroSDK maestro = BotMaestroSDK.FromSysArgs();
// Obteniendo los detalles de la tarea actual en ejecución
Execution execution = await maestro.GetExecutionAsync(maestro.GetTaskId());

Reportar los datos del proceso

Al finalizar la tarea, informe la cantidad de ítems procesados durante la ejecución.

maestro.finish_task(
    task_id=execution.task_id,
    status=AutomationTaskFinishStatus.SUCCESS,
    message="Task Finished OK.",
    total_items=100, # Número total de ítems procesados
    processed_items=90, # Número de ítems procesados con éxito
    failed_items=10 # Número de ítems procesados con fallo

)
maestro.finishTask(
    botExecution.getTaskId(),
    "Task Finished OK.",
    FinishStatus.SUCCESS,
    100, // Número total de ítems procesados
    90, // Número de ítems procesados con éxito
    10 // Número de ítems procesados con fallo
);
await maestro.FinishTaskAsync(
    execution.TaskId,
    FinishStatusEnum.SUCCESS,
    "Task Finished OK.",
    100, // Número total de ítems procesados
    90, // Número de ítems procesados con éxito
    10 // Número de ítems procesados con fallo
);

Código completo

Vea a continuación un ejemplo completo de automatización que contabiliza los ítems procesados y reporta los datos al finalizar la tarea.

from botcity.core import DesktopBot
from botcity.maestro import *

# Deshabilitando errores si no hay conexión con el Orquestador
BotMaestroSDK.RAISE_NOT_CONNECTED = False

def main():
    maestro = BotMaestroSDK.from_sys_args()
    execution = maestro.get_execution()

    # Implemente aquí su lógica...
    bot = DesktopBot()

    # Los ítems pueden ser cualquier entidad relacionada con su proceso de automatización
    itens = []
    itens_procesados = 0
    itens_fallados = 0

    # Puede utilizar la lógica que sea necesaria para consumir, procesar y contabilizar los ítems
    for item in itens:
        try:
            # Procesando el ítem...

            # Contabilizando como un ítem procesado con éxito
            itens_procesados+=1

        except Exception:
            # Contabilizando como un ítem procesado con fallo
            itens_fallados+=1

    # Al final, simplemente reporte en la finalización de la tarea los datos de los ítems procesados
    maestro.finish_task(
        task_id=execution.task_id,
        status=AutomationTaskFinishStatus.SUCCESS,
        message="Task Finished OK.",
        total_items=len(itens), # Número total de ítems procesados
        processed_items=itens_procesados, # Número de ítems procesados con éxito
        failed_items=itens_fallados # Número de ítems procesados con fallo
    )

def not_found(label):
    print(f"Element not found: {label}")

if __name__ == '__main__':
    main()
import java.util.List;
import java.util.ArrayList;
import dev.botcity.framework.bot.DesktopBot;
import dev.botcity.maestro_sdk.BotExecutor;
import dev.botcity.maestro_sdk.BotMaestroSDK;
import dev.botcity.maestro_sdk.model.AutomationTask.FinishStatus;
import dev.botcity.maestro_sdk.runner.BotExecution;
import dev.botcity.maestro_sdk.runner.RunnableAgent;

public class FirstBot extends DesktopBot implements RunnableAgent
{
    public FirstBot() {
        try {
            setResourceClassLoader(this.getClass().getClassLoader());
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void action(BotExecution botExecution) {

        try {
            BotMaestroSDK maestro = new BotMaestroSDK();
            maestro.login(botExecution);

            // Los ítems pueden ser cualquier entidad relacionada con su proceso de automatización
            List<Object> itens = new ArrayList<Object>();
            int itensProcessados = 0;
            int itensFallados = 0;

            // Puede utilizar la lógica que sea necesaria para consumir, procesar y contabilizar los ítems
            for(Object item : itens){
                try{
                    // Procesando el ítem...

                    // Contabilizando como un ítem procesado con éxito
                    itensProcessados+=1;
                }
                catch(Exception e){
                    // Contabilizando como un ítem procesado con fallo
                    itensFallados+=1;
                }
            }

            // Al final, simplemente reporte en la finalización de la tarea los datos de los ítems procesados
            maestro.finishTask(
                botExecution.getTaskId(),
                "Task Finished OK.",
                FinishStatus.SUCCESS,
                itens.size(), // Número total de ítems procesados
                itensProcessados, // Número de ítems procesados con éxito
                itensFallados // Número de ítems procesados con fallo
            );

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    private void notFound(String label) {
        System.out.println("Element not found: "+label);
    }

    public static void main(String[] args) {
        BotExecutor.run(new FirstBot(), args);
    }
}
using Dev.BotCity.MaestroSdk.Model.AutomationTask;
using Dev.BotCity.MaestroSdk.Model.Execution;
using System;
using System.Threading.Tasks;

namespace FirstBot
{
    class Program
    {
        static async Task Main(string[] args)
        {
            BotMaestroSDK maestro = BotMaestroSDK.FromSysArgs();
            Execution execution = await maestro.GetExecutionAsync(maestro.GetTaskId());

            Console.WriteLine("Task ID is: " + execution.TaskId);
            Console.WriteLine("Task Parameters are: " + string.Join(", ", execution.Parameters));

            // Los ítems pueden ser cualquier entidad relacionada con su proceso de automatización
            string[] itens;
            int itensProcessados = 0;
            int itensFallados = 0;

            // Puede utilizar la lógica que sea necesaria para consumir, procesar y contabilizar los ítems
            foreach (string item in itens) 
            {
                try {
                    // Procesando el ítem...

                    // Contabilizando como un ítem procesado con éxito
                    itensProcessados+=1;

                } catch (Exception ex) {
                    // Contabilizando como un ítem procesado con fallo
                    itensFallados+=1;
                }
            }

            // Al final, simplemente reporte en la finalización de la tarea los datos de los ítems procesados
            await maestro.FinishTaskAsync(
                execution.TaskId,
                FinishStatusEnum.SUCCESS,
                "Task Finished OK.",
                itens.Length, // Número total de ítems procesados
                itensProcessados, // Número de ítems procesados con éxito
                itensFallados // Número de ítems procesados con fallo
            );
        }
    }
}

Estructura del código

Su automatización no necesita seguir una estructura de código específica.

Usted define libremente la lógica del proceso y la forma de contabilizar los ítems.

Al final de la ejecución, reporte estos datos con el método finish_task del Maestro SDK.