Saltar a contenido

Estoy empezando ahora

Si estás empezando ahora con BotCity o quieres tener una idea general de cómo se pueden reportar los ítems procesados en el código del proceso, simplemente sigue la guía a continuación:

Utilizando el Maestro SDK para reportar datos

Puede reportar fácilmente la información sobre los ítems que han sido procesados utilizando el Maestro SDK en el código de su automatización.

Instalación del SDK

Si aún no tiene la dependencia instalada, simplemente siga estas instrucciones:

pip install botcity-maestro-sdk

Importante

Además de instalarlo, recuerde incluir 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

Importando el SDK

Después de la instalación, simplemente 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());

Reportando los datos del proceso

Al final de la ejecución, es posible reportar en la finalización de la tarea la información sobre los ítems procesados en la ejecución del script.

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

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

No es obligatorio utilizar una estructura de código específica en su proceso de automatización.

Tiene total libertad para definir la lógica que se utilizará y también la forma en que los ítems serán contabilizados.

Al final, simplemente reporte estos datos utilizando el método finish_task del Maestro SDK al finalizar toda la ejecución.