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:
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>
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
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.
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.