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.

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

  2. Adicione um triggerId à classe:
    @TriggerId
    	private String triggerUid;
    	
    	public String getTriggerUid() {
    		return triggerUid;
    	}
    
    	public void setTriggerUid(String triggerUid) {
    		this.triggerUid = triggerUid;
    	}
  3. 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());
    	}
  4. 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());
    	}
  5. 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);
    		}
    	}
  6. 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
    	}
    
    }