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