Criar um gatilho personalizado (Exemplo 2)
- Última atualização2023/07/21
Criar um gatilho personalizado (Exemplo 2)
O exemplo mostra como criar um gatilho em Automation 360 que permite criar as tarefas que serão executadas nos intervalos especificados.
Um gatilho lança um bot quando certas condições são atendidas e espera até que as condições tenham mudado ou parado. Quando as condições do gatilho são combinadas, o método de execução é chamado para sinalizar o gatilho.
Anotações necessárias
Para criar um gatilho, são necessárias as seguintes anotações:
Anotação | Utilização |
---|---|
BotCommand |
Use a anotação BotCommand com o gatilho como commandType . Isso garante que o objeto Java simples antigo (POJO) seja adequado para criar o gatilho com Automation 360. |
CommandPkg |
Esses valores são utilizados na criação de um pacote. Forneça um nome, rótulo e descrição para a anotação. |
TriggerId |
Uma identificação do gatilho, que é necessária para parar o gatilho. |
|
Especifica a função do consumidor a ser invocada quando a condição do gatilho for atendida. |
StartListen |
Inicia o ouvinte do gatilho. |
StopAllTriggers |
Identifica o método usado para cancelar todos os gatilhos. |
StopListen |
Identifica o método responsável pelo cancelamento de um gatilho específico. |
Caso de uso — Gatilho do temporizador
O seguinte caso de uso mostra como criar um gatilho temporizador que aciona um bot em intervalos regulares. A amostra de comando Demo Trigger
explicada aqui é um comando de gatilho que permite criar e gerenciar gatilhos com base em intervalos especificados pelo usuário. Esse gatilho pode ser usado para executar tarefas em intervalos regulares.
@BotCommand(commandType = BotCommand.CommandType.Trigger)
@CommandPkg(label = "Demo Trigger", description = "Demo Trigger", icon = "email.svg", name = "demoTrigger",
return_type = RECORD, return_name = "TriggerData", return_description = "Available keys: triggerType")
- Tipo de comando: Gatilho
- Rótulo: Gatilho de demonstração
- Descrição: Gatilho de demonstração
- Ícone: email.svg
- Nome: demoTrigger
- Tipo de retorno: GRAVAR
- Nome do retorno: TriggerData
- Descrição do retorno: Chaves disponíveis: triggerType
A classe TriggerDemo
é uma classe singleton que gerencia as tarefas de gatilho. Ela armazena as tarefas em um mapa usando o triggerId
como chave. Uma vez atendida a condição do gatilho, o método run
do Runnable
associado é chamado para sinalizar o gatilho.
taskMap
: UmConcurrentHashMap
estático que armazena múltiplas tarefas de gatilho.TIMER
: UmTimer
estático usado para agendar as tarefas de gatilho.triggerUid
: Anotado com@TriggerId
, representa o identificador exclusivo do gatilho.consumer
: Anotado com@TriggerConsumer
, é o consumidor que aceitará os dados do gatilho.
startTrigger
: Anotado com@StartListen
, esse método inicia o gatilho. Um parâmetro de intervalo (em segundos) é necessário para especificar o intervalo de ativação do gatilho. Ele cria um novoTimerTask>
que chama o métodorun
doRunnable
associado quando executado. OTimerTask
é adicionado aotaskMap
com o triggerUid como chave e é agendado para ser executado no intervalo especificado.getRecordValue
: Um método privado que cria e retorna umRecordValue
contendo os dados do gatilho. Os dados do gatilho incluem um esquema com uma única chave "triggerType" e o valor correspondente "Interval Trigger".stopAllTriggers
: Anotado com@StopAllTriggers
, esse método cancela todas as tarefas de gatilho e limpa otaskMap
.stopListen
: Anotado com@StopListen
, esse método cancela uma tarefa de gatilho específica identificada pelo parâmetrotriggerUid
e o remove dotaskMap
.- Métodos setter:
setTriggerUid
esetConsumer
são métodos setter para as variáveistriggerUid
econsumer
, respectivamente.
/*
* Copyright (c) 2023 Automation Anywhere.
* All rights reserved.
*
* This software is the proprietary information of Automation Anywhere.
* You shall use it only in accordance with the terms of the license agreement
* you entered into with Automation Anywhere.
*/
/**
*
*/
package com.automationanywhere.botcommand.samples.trigger;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
import com.automationanywhere.botcommand.data.Value;
import com.automationanywhere.botcommand.data.impl.RecordValue;
import com.automationanywhere.botcommand.data.impl.StringValue;
import com.automationanywhere.botcommand.data.model.Schema;
import com.automationanywhere.botcommand.data.model.record.Record;
import com.automationanywhere.commandsdk.annotations.*;
import com.automationanywhere.commandsdk.annotations.rules.GreaterThan;
import com.automationanywhere.commandsdk.annotations.rules.NotEmpty;
import com.automationanywhere.commandsdk.annotations.rules.NumberInteger;
import com.automationanywhere.commandsdk.model.AttributeType;
import com.automationanywhere.commandsdk.model.DataType;
import static com.automationanywhere.commandsdk.model.DataType.RECORD;
/**
* There will be a singleton instance of this class. Whenever a new trigger is
* created it comes with a triggerId. In this sample we create multiple tasks
* and store them in a map with these triggerId as the key. Once the condition
* of trigger matches we call the run method of the runnable to signal the
* trigger.
* In the following example we will create a trigger which triggers are user
* specified intervals.
*
*/
@BotCommand(commandType = BotCommand.CommandType.Trigger)
@CommandPkg(label = "Demo Trigger", description = "Demo Trigger", icon = "email.svg", name = "demoTrigger",
return_type = RECORD, return_name = "TriggerData", return_description = "Available keys: triggerType")
public class TriggerDemo {
// Map storing multiple tasks
private static final Map<String, TimerTask> taskMap = new ConcurrentHashMap<>();
private static final Timer TIMER = new Timer(true);
@TriggerId
private String triggerUid;
@TriggerConsumer
private Consumer consumer;
/*
* Starts the trigger.
*/
@StartListen
public void startTrigger(@Idx(index = "1", type = AttributeType.NUMBER)
@Pkg(label = "Please provide the interval to trigger in seconds", default_value = "120", default_value_type = DataType.NUMBER)
@GreaterThan("0")
@NumberInteger
@NotEmpty
Double interval) {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
consumer.accept(getRecordValue());
}
};
taskMap.put(this.triggerUid, timerTask);
TIMER.schedule(timerTask, interval.longValue());
}
private RecordValue getRecordValue() {
List<Schema> schemas = new LinkedList<>();
List<Value> values = new LinkedList<>();
schemas.add(new Schema("triggerType"));
values.add(new StringValue("Interval Trigger"));
RecordValue recordValue = new RecordValue();
recordValue.set(new Record(schemas,values));
return recordValue;
}
/*
* Cancel all the task and clear the map.
*/
@StopAllTriggers
public void stopAllTriggers() {
taskMap.forEach((k, v) -> {
if (v.cancel()) {
taskMap.remove(k);
}
});
}
/*
* Cancel the task and remove from map
*
* @param triggerUid
*/
@StopListen
public void stopListen(String triggerUid) {
if (taskMap.get(triggerUid).cancel()) {
taskMap.remove(triggerUid);
}
}
public void setTriggerUid(String triggerUid) {
this.triggerUid = triggerUid;
}
public void setConsumer(Consumer consumer) {
this.consumer = consumer;
}
}
ExemploDemo Trigger
demoTrigger.startTrigger(60.0);
Ele inicia um gatilho que é executado a cada 60 segundos e chama o consumidor associado aos dados do gatilho.
Para interromper o gatilho, você pode usar os seguintes métodos:
demoTrigger.stopAllTriggers()
: Esse método interrompe todos os gatilhos ativos.demoTrigger.stopListen(triggerUid)
: Esse método interrompe um gatilho específico identificado pelotriggerUid
.Nota: OtriggerUid
é um identificador exclusivo para cada gatilho e é atribuído automaticamente quando um gatilho é criado.