Crear un activador con el paquete SDK

Cuando se utiliza Automation 360, puede crear un activador mediante el paquete SDK.

Utilizar un activador

Utilice Automation 360 para crear un activador. Un activador inicia un bot cuando se cumplen ciertas condiciones y espera hasta que las condiciones hayan cambiado o se hayan detenido. Cuando se cumplen las condiciones del activador, se llama al método de ejecución para señalar el activador.

Anotaciones obligatorias

Para crear un activador, se requieren las siguientes anotaciones:

Anotación Uso
BotCommand Use la anotación BotCommand con el activador como commandType. Esto asegura que el objeto Java antiguo sin formato (POJO) sea adecuado para crear el activador de Automation 360.
CommandPkg Estos valores se utilizan cuando se crea un paquete. Proporcione un nombre, una etiqueta y una descripción para la anotación.
Idx Anote todos los parámetros y variables miembro que se requieren y ayude a la comprobación de la validación. Otra posibilidad es que se muestren en la interfaz de la entrada. Proporcione el índice (Idx) y el tipo.
Pkg Anote todos los parámetros y variables de miembro que se mostrarán en la interfaz. Esta anotación será ignorada si no va acompañada de la etiqueta Idx.
StartListen Inicia la escucha de activadores.
TriggerId Un ID de activación, necesario para detener el activador.
TriggerRunnable Proporciona el ejecutable. Al llamar al ejecutable se envía una señal que inicia un bot asociado a un activador.

Ejemplo de caso de uso

El siguiente caso de uso muestra cómo crear un activador de temporizador que activa un bot a un intervalo regular.

  1. Crear la clase POJO con la lógica de negocio:
    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());
    	}
    
    }

    Pueden existir varios activadores del mismo tipo en un bot. Todos los activadores se identifican con un triggerId.

  2. Agregue un triggerId a la clase:
    @TriggerId
    	private String triggerUid;
    	
    	public String getTriggerUid() {
    		return triggerUid;
    	}
    
    	public void setTriggerUid(String triggerUid) {
    		this.triggerUid = triggerUid;
    	}
  3. Almacene TimerTask por separado para que cuando quiera detener un activador específico, use el 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 un activador cuando se cumplan las condiciones. Acepte un ejecutable y llámelo correctamente.
    @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. Detenga el activador, de forma individual (use un triggerId), o detenga todos los activadores al mismo tiempo (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. Agregue el resto de anotaciones.
    @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
    	}
    
    }