Einen benutzerdefinierten Auslöser erstellen (Beispiel 2)
- Zuletzt aktualisiert2023/07/21
Einen benutzerdefinierten Auslöser erstellen (Beispiel 2)
Das Beispiel zeigt, wie Sie einen Auslöser in Automation 360 erstellen, mit dem Sie Aufgaben erstellen können, die in bestimmten Intervallen ausgeführt werden.
Ein Auslöser startet einen Bot, wenn bestimmte Bedingungen erfüllt sind, und wartet, bis sich die Bedingungen geändert haben oder nicht mehr bestehen. Wenn die Bedingungen des Auslösers erfüllt sind, wird die Ausführungsmethode aufgerufen, um einen Signal an den Auslöser zu senden.
Erforderliche Anmerkungen
Zum Erstellen eines Auslösers sind die folgenden Anmerkungen erforderlich:
Anmerkung | Verwendung |
---|---|
BotCommand |
Verwenden Sie die Anmerkung BotCommand mit dem Auslöser commandType . Dadurch wird gewährleistet, dass das Plain Old Java Object (POJO) für die Erstellung des Auslösers mit Automation 360 geeignet ist. |
CommandPkg |
Diese Werte werden bei der Erstellung eines Pakets verwendet. Geben Sie einen Namen, eine Bezeichnung und eine Beschreibung für die Anmerkung an. |
TriggerId |
Eine Auslöser-ID, die zum Anhalten des Auslösers erforderlich ist. |
|
Gibt die Verbraucherfunktion an, die aufgerufen werden soll, wenn die Auslösebedingung erfüllt ist. |
StartListen |
Startet den Auslöser-Listener. |
StopAllTriggers |
Gibt die Methode an, mit der alle Auslöser abgebrochen werden. |
StopListen |
Gibt die Methode an, die für das Abbrechen eines bestimmten Auslösers verantwortlich ist. |
Anwendungsfall – Timer-Auslöser
Der folgende Anwendungsfall zeigt, wie Sie einen Timer-Auslöser erstellen, der in regelmäßigen Abständen einen Bot auslöst. Der hier erläuterte Demo Trigger
-Befehl ist ein Auslöserbefehl, mit dem Sie Auslöser auf der Grundlage von benutzerdefinierten Intervallen erstellen und verwalten können. Dieser Auslöser kann verwendet werden, um Aufgaben in regelmäßigen Abständen auszuführen.
@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")
- Befehlstyp: Auslöser
- Bezeichnung: Demo-Auslöser
- Beschreibung Demo-Auslöser
- Symbol: email.svg
- Name: demoTrigger
- Rückgabetyp: RECORD
- Name der Rückgabe: TriggerData
- Beschreibung der Rückgabe: Verfügbare Schlüssel: triggerType
Die TriggerDemo
-Klasse ist eine Singleton-Klasse, die die Auslöseraufgaben verwaltet. Sie speichert die Aufgaben in einer Zuordnung mit triggerId
als Schlüssel. Sobald die Auslösebedingung erfüllt ist, wird die run
-Methode des zugehörigen Runnable
-Elements aufgerufen, um ein Signal an den Auslöser zu senden.
taskMap
: Eine statischeConcurrentHashMap
, die mehrere Auslöseraufgaben speichert.TIMER
: Ein statischesTimer
-Element, das für die Planung der Auslöseraufgaben verwendet wird.triggerUid
: Mit der Anmerkung@TriggerId
gekennzeichnet, stellt sie den eindeutigen Bezeichner für den Auslöser dar.consumer
: Mit der Anmerkung@TriggerConsumer
gekennzeichnet, stellt sie den Verbraucher dar, der die Auslösedaten akzeptiert.
startTrigger
: Mit der Anmerkung@StartListen
startet diese Methode den Auslöser. Mit einem Intervallparameter (in Sekunden) wird das Aktivierungsintervall des Auslösers festgelegt. Sie erstellt eine neueTimerTask>
, die bei ihrer Ausführung dierun
-Methode des zugehörigenRunnable
aufruft. DieTimerTask
wird demtaskMap
-Element mit der triggerUid als Schlüssel hinzugefügt und für die Ausführung im angegebenen Intervall geplant.getRecordValue
: Eine private Methode, die einRecordValue
-Element mit den Auslöserdaten erstellt und zurückgibt. Die Auslöserdaten umfassen ein Schema mit einem einzigen Schlüssel „triggerType“ und dem entsprechenden Wert „Interval Trigger“.stopAllTriggers
: Mit der Anmerkung@StopAllTriggers
versehen, bricht diese Methode alle Auslöseaufgaben ab und löscht dietaskMap
.stopListen
: Mit der Anmerkung@StopListen
versehen, bricht diese Methode eine bestimmte, durch dentriggerUid
-Parameter identifizierte Auslöseaufgabe ab und entfernt sie aus dertaskMap
.- Setter-Methoden:
setTriggerUid
undsetConsumer
sind Setter-Methoden für die VariablentriggerUid
bzw.consumer
.
/*
* 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;
}
}
BeispielDemo Trigger
sdemoTrigger.startTrigger(60.0);
Dadurch wird ein Auslöser gestartet, der alle 60 Sekunden ausgeführt wird und den zugehörigen Verbraucher mit den Auslöserdaten aufruft.
Um den Auslöser zu stoppen, können Sie die folgenden Methoden verwenden:
demoTrigger.stopAllTriggers()
: Mit dieser Methode werden alle aktiven Auslöser gestoppt.demoTrigger.stopListen(triggerUid)
: Mit dieser Methode wird ein bestimmter Auslöser gestoppt, der durch dietriggerUid
identifiziert wird.Anmerkung: DietriggerUid
ist ein eindeutiger Bezeichner für den jeweiligen Auslöser, der bei der Erstellung des Auslösers automatisch zugewiesen wird.