Ir para o conteúdo

Estou começando agora

Se você está começando agora com a BotCity ou quer uma visão geral de como reportar os itens processados no código da automação, siga o guia abaixo.

Reportar dados com o Maestro SDK

Você reporta as informações sobre os itens processados usando o Maestro SDK no código da sua automação.

Instalar o SDK

Se a dependência ainda não estiver instalada, siga as instruções abaixo:

pip install botcity-maestro-sdk

Dependência no requirements.txt

Além de instalar o pacote, inclua a dependência no arquivo requirements.txt do robô.

<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 o SDK

Depois da instalação, importe a dependência e instancie o Maestro SDK:

# Importando a dependência do Maestro SDK
from botcity.maestro import *

# Desabilitando erros caso não exista conexão com o Orquestrador
BotMaestroSDK.RAISE_NOT_CONNECTED = False

# Instanciando o Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Buscando os detalhes da tarefa atual sendo executada
execution = maestro.get_execution()
// Importando a dependência do Maestro SDK
import dev.botcity.maestro_sdk.*;
...

public void action(BotExecution botExecution) {

    try {
        // Instanciando o Maestro SDK
        BotMaestroSDK maestro = new BotMaestroSDK();
        maestro.login(botExecution);
    ...
// Importando a dependência do Maestro SDK
using Dev.BotCity;
using Dev.BotCity.MaestroSdk.Model.Execution;

// Instanciando o Maestro SDK
BotMaestroSDK maestro = BotMaestroSDK.FromSysArgs();
// Buscando os detalhes da tarefa atual sendo executada
Execution execution = await maestro.GetExecutionAsync(maestro.GetTaskId());

Reportar os dados do processo

Ao finalizar a tarefa, informe a quantidade de itens processados durante a execução.

maestro.finish_task(
    task_id=execution.task_id,
    status=AutomationTaskFinishStatus.SUCCESS,
    message="Task Finished OK.",
    total_items=100, # Número total de itens processados
    processed_items=90, # Número de itens processados com sucesso
    failed_items=10 # Número de itens processados com falha

)
maestro.finishTask(
    botExecution.getTaskId(),
    "Task Finished OK.",
    FinishStatus.SUCCESS,
    100, // Número total de itens processados
    90, // Número de itens processados com sucesso
    10 // Número de itens processados com falha
);
await maestro.FinishTaskAsync(
    execution.TaskId,
    FinishStatusEnum.SUCCESS,
    "Task Finished OK.",
    100, // Número total de itens processados
    90, // Número de itens processados com sucesso
    10 // Número de itens processados com falha
);

Código completo

Veja abaixo um exemplo completo de automação que conta os itens processados e reporta os dados ao finalizar a tarefa.

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

# Desabilitando erros caso não exista conexão com o Orquestrador
BotMaestroSDK.RAISE_NOT_CONNECTED = False

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

    # Implemente aqui a sua lógica...
    bot = DesktopBot()

    # Os itens podem ser qualquer entidade referente ao seu processo de automação
    itens = []
    itens_processados = 0
    itens_falhados = 0

    # Você pode utilizar a lógica que for necessária para consumir, processar e contabilizar os itens
    for item in itens:
        try:
            # Processando o item...

            # Contabilizando como um item processado com sucesso
            itens_processados+=1

        except Exception:
            # Contabilizando como um item processado com falha
            itens_falhados+=1

    # Ao final, basta reportar na finalização da tarefa os dados dos itens processados
    maestro.finish_task(
        task_id=execution.task_id,
        status=AutomationTaskFinishStatus.SUCCESS,
        message="Task Finished OK.",
        total_items=len(itens), # Número total de itens processados
        processed_items=itens_processados, # Número de itens processados com sucesso
        failed_items=itens_falhados # Número de itens processados com falha
    )

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);

            // Os itens podem ser qualquer entidade referente ao seu processo de automação
            List<Object> itens = new ArrayList<Object>();
            int itensProcessados = 0;
            int itensFalhados = 0;

            // Você pode utilizar a lógica que for necessária para consumir, processar e contabilizar os itens
            for(Object item : itens){
                try{
                    // Processando o item...

                    // Contabilizando como um item processado com sucesso
                    itensProcessados+=1;
                }
                catch(Exception e){
                    // Contabilizando como um item processado com falha
                    itensFalhados+=1;
                }
            }

            // Ao final, basta reportar na finalização da tarefa os dados dos itens processados
            maestro.finishTask(
                botExecution.getTaskId(),
                "Task Finished OK.",
                FinishStatus.SUCCESS,
                itens.size(), // Número total de itens processados
                itensProcessados, // Número de itens processados com sucesso
                itensFalhados // Número de itens processados com falha
            );

        } 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));

            // Os itens podem ser qualquer entidade referente ao seu processo de automação
            string[] itens;
            int itensProcessados = 0;
            int itensFalhados = 0;

            // Você pode utilizar a lógica que for necessária para consumir, processar e contabilizar os itens
            foreach (string item in itens) 
            {
                try {
                    // Processando o item...

                    // Contabilizando como um item processado com sucesso
                    itensProcessados+=1;

                } catch (Exception ex) {
                    // Contabilizando como um item processado com falha
                    itensFalhados+=1;
                }
            }

            // Ao final, basta reportar na finalização da tarefa os dados dos itens processados
            await maestro.FinishTaskAsync(
                execution.TaskId,
                FinishStatusEnum.SUCCESS,
                "Task Finished OK.",
                itens.Length, // Número total de itens processados
                itensProcessados, // Número de itens processados com sucesso
                itensFalhados // Número de itens processados com falha
            );
        }
    }
}

Estrutura do código

Sua automação não precisa seguir uma estrutura de código específica.

Você define livremente a lógica do processo e a forma de contabilizar os itens.

Ao final da execução, reporte esses dados com o método finish_task do Maestro SDK.