Ir para o conteúdo

Tarefas

Conforme abordado até agora, as tarefas são instâncias de uma Automação e um dos conceitos mais importantes da plataforma BotCity Maestro.

Aqui, abordaremos como criar, interromper, terminar e recuperar tarefas.

Criando uma tarefa

Podemos criar uma nova tarefa através do BotCity Maestro SDK usando o seguinte código:

params = {}
task = maestro.create_task(
    activity_label="automationLabel",
    parameters=params,
    test=False
)
Map<String, String> params = new HashMap<String, String>();
AutomationTask task = maestro.createTask("automationLabel", params, false);
const parameters = {}
const task = await maestro.createTask("automationLabel", parameters, false)
const parameters: object = {}
const task: Task = await maestro.createTask("automationLabel", parameters, false)

Interrompendo uma tarefa

Para tarefas de longa execução, como o processamento em lote de itens, pode ser sensato permitir que os usuários solicitem sua interrupção.

Aqui está como solicitar uma interrupção para uma determinada tarefa:

maestro.interrupt_task(task_id=task.id)
maestro.interruptTask(task.id);
// Ainda não implementado
// Ainda não implementado

Importante

Por favor, note que não é uma garantia de que a tarefa será interrompida.

É responsabilidade do desenvolvedor do código do robô verificar o sinalizador de solicitação de interrupção e agir de acordo com ele para interromper a tarefa.

Verificando a solicitação de interrupção

É responsabilidade do desenvolvedor do código do robô verificar o sinalizador de solicitação de interrupção e agir de acordo com ele para interromper a tarefa.

Aqui está como você pode fazer isso:

while not maestro.get_task(task_id=task.id).is_interrupted():
    # Continuando o processamento dos itens
    print("Processando items")
    ...
print("Uma interrupção foi solicitada")
while(!maestro.getTask(task.id).getInterrupted()) {
    // Continuando o processamento dos itens
    System.out.println("Processando items");
    ...
}
System.out.println("Uma interrupção foi solicitada.");
// Ainda não implementado
// Ainda não implementado

Finalizando uma tarefa e reportando dados

Depois que as tarefas são criadas, elas são enfileiradas no BotCity Maestro e coletadas para execução pelo BotCity Runner.

As tarefas coletadas para execução avançam para o estado Running.

É responsabilidade do desenvolvedor da automação informar ao BotCity Maestro através do SDK sobre o status final adequado de uma tarefa.

Isso permite um melhor controle e também adiciona detalhes sobre a conclusão da tarefa que pode ser inspecionada posteriormente pelos usuários através do portal BotCity Maestro.

Uma tarefa pode ser concluída com um dos seguintes status:

  • SUCCESS: A tarefa foi concluída com sucesso.
  • FAILED: A tarefa não foi concluída.
  • PARTIALLY_COMPLETED: A tarefa concluiu parte das etapas esperadas.

Além de reportar o status de finalização de uma tarefa, também podemos reportar dados adicionais referentes aos itens que foram processados durante a execução.

Esse recurso será muito útil nos casos onde precisamos monitorar a quantidade de itens processados com sucesso ou falha pela tarefa.

Dica

Basicamente, um item pode ser qualquer entidade referente ao seu processo de automação.

Dessa forma, você pode utilizar a lógica que for necessária para o processo e definir como cada item será consumido, processado e contabilizado no código.

Ao final, basta reportar esses dados através do método finish_task do Maestro SDK.

maestro.finish_task(
    task_id=task.id,
    status=AutomationTaskFinishStatus.SUCCESS,
    message="Tarefa foi concluída com sucesso.",
    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(
    task.id,
    "Tarefa foi concluída com sucesso.",
    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.finishtTask(
    task.id,
    "Tarefa foi concluída com sucesso.",
    "SUCCESS",
)
await maestro.finishtTask(
    task.id,
    "Tarefa foi concluída com sucesso.",
    "SUCCESS"
)

Info

Esse recurso de reportar dados também faz parte do BotCity Insights, que é um módulo dedicado a parte de reportar e exibir dados referentes à sua iniciativa de RPA.

A etapa de reportar os dados no código da automação é essencial para que as informações de alto nível sejam geradas.

Veja mais detalhes sobre esse módulo acessando a documentação do BotCity Insights.

Recuperando uma tarefa

Você pode buscar as informações de uma tarefa utilizando o ID ou através da referência da execução atual.

Utilizando o ID de uma tarefa específica

tarefa = maestro.get_task("<TASK_ID>")
AutomationTask tarefa = maestro.getTask("<TASK_ID>");
const tarefa = await maestro.getTask("<TASK_ID>")
const tarefa: Task = await maestro.getTask("<TASK_ID>")

Obtendo a referência da execução atual

Como vimos anteriormente, o Maestro SDK possui um método especial para obtermos a referência da tarefa atual que está sendo executada pelo Runner.

Dessa forma, podemos acessar as informações da execução de uma forma mais prática.

# Buscando os detalhes da tarefa atual sendo executada
execution = maestro.get_execution()

# Informações da tarefa que está sendo executada
print(f"Task ID is: {execution.task_id}")
print(f"Task Parameters are: {execution.parameters}")

Info

O objeto BotExecution por padrão já vem configurado no template de projeto Java da BotCity.

public void action(BotExecution botExecution) {

    try {
        ...

        // Informações da tarefa que está sendo executada
        System.out.println(botExecution.getTaskId());
    ...
// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Buscando os detalhes da tarefa atual sendo executada
const executionTask = await maestro.getTask(taskid)
// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Buscando os detalhes da tarefa atual sendo executada
const executionTask: Task = await maestro.getTask(taskid)

Acessando os parâmetros de uma tarefa

Uma das informações que podemos acessar de uma tarefa são os parâmetros de entrada que ela recebe.

Os parâmetros de uma tarefa são tratados como um dicionário, para acessarmos um valor podemos passar como chave o label que foi usado na criação do parâmetro no BotCity Maestro.

Veja mais detalhes sobre como parametrizar uma automação no Maestro através da seção Automações.

# Instanciando o Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Buscando os detalhes da tarefa atual sendo executada
execution = maestro.get_execution()

# Obtendo parâmetro através do label
parametro = execution.parameters.get("<PARAMETER_LABEL>")

Info

O objeto BotExecution por padrão já vem configurado no template de projeto Java da BotCity.

public void action(BotExecution botExecution) {

    try {
        // Instanciando o Maestro SDK
        // O objeto BotExecution contém as informações que são passadas pelo Runner
        BotMaestroSDK maestro = new BotMaestroSDK();
        maestro.login(botExecution);

        // Obtendo parâmetro através do label
        Object parametro = botExecution.getParams().get("<PARAMETER_LABEL>");
    ...
// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Instanciando o Maestro SDK
const maestro = new BotMaestroSdk()
maestro.login("https://developers.botcity.dev", "<LOGIN>", "<CHAVE>")

// Buscando os detalhes da tarefa atual sendo executada
const executionTask = await maestro.getTask(taskid)
// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Instanciando o Maestro SDK
const maestro: BotMaestroSdk = new BotMaestroSdk()
maestro.login("https://developers.botcity.dev", "<LOGIN>", "<CHAVE>")

// Buscando os detalhes da tarefa atual sendo executada
const executionTask: Task = await maestro.getTask(taskid)