Criar um gatilho usando o pacote SDK
- Última atualização2022/05/19
Criar um gatilho usando o pacote SDK
Ao usar Automation 360, você pode criar um gatilho usando o pacote SDK.
Como usar um gatilho
Use Automation 360 para criar um gatilho. 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. |
Idx |
Anote todos os parâmetros e variáveis dos membros que são necessários e ajude na verificação de validação. Como alternativa, eles podem ser exibidos na interface para a entrada. Forneça o índice (Idx ) e o tipo. |
Pkg |
Anote todos os parâmetros e variáveis de membros que serão mostrados na interface. Essa anotação será ignorada se não for acompanhada por Idx . |
StartListen |
Inicia o ouvinte do gatilho. |
TriggerId |
Uma identificação do gatilho, que é necessária para parar o gatilho. |
TriggerRunnable |
Fornece o executável. Chamar o executável envia um sinal que lança um bot associado a um gatilho. |
Exemplo de caso de uso
O seguinte caso de uso mostra como criar um gatilho temporizador que aciona um bot em um intervalo regular.
- Crie a classe POJO com a lógica empresarial:
public class TriggerDemo { private static final Timer TIMER = new Timer(true); public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { // Do nothing } }; TIMER.schedule(timerTask, interval.longValue()); } }
Podem existir acionadores múltiplos do mesmo tipo em um bot. Todos os acionadores são identificados por um triggerId.
- Adicione um triggerId à classe:
@TriggerId private String triggerUid; public String getTriggerUid() { return triggerUid; } public void setTriggerUid(String triggerUid) { this.triggerUid = triggerUid; }
- Armazene o triggerId separadamente para que, quando você quiser parar um gatilho específico, use o triggerId.
private static final Map<String, TimerTask> taskMap = new ConcurrentHashMap<>(); public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { // Do nothing } }; taskMap.put(this.triggerUid, timerTask); TIMER.schedule(timerTask, interval.longValue()); }
- Inicie um acionador quando as condições forem cumpridas. Aceite um executável e chame-o apropriadamente.
@TriggerRunnable private Runnable runnable; public Runnable getRunnable() { return runnable; } public void setRunnable(Runnable runnable) { this.runnable = runnable; } public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { runnable.run(); } }; taskMap.put(this.triggerUid, timerTask); TIMER.schedule(timerTask, interval.longValue()); }
- Pare o acionador. Faça isso individualmente (use um triggerId) ou pare todos os gatilhos ao mesmo tempo (StopAllTriggers).
/* * 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); } }
- Adicione as anotações restantes.
@BotCommand(commandType = BotCommand.CommandType.Trigger) @CommandPkg(label = "Demo Trigger", description = "Demo Trigger", icon = "email.svg", name = "demoTrigger") public class TriggerDemo { //Other code @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) { //Other code } }