Erstellen eines Iterators mit Paket-SDK
- Zuletzt aktualisiert2022/07/22
Erstellen eines Iterators mit Paket-SDK
In Automation 360 können Sie mit dem SDK-Paket einen Iterator erstellen. Ein Iterator dient zum Ausführen einer Schleife durch mehrere Objekte ähnlichen Typs und wird mit dem Schleife-Paket verwendet. Er besteht aus den zwei Methoden next
und hasNext
, die das aktuelle Objekt und einen booleschen Wert zurückgeben.
Erforderliche Anmerkungen
Wenn der Iterator verwendet wird, gibt die Methode next
den nächsten verfügbaren Wert zurück. Wenn keine weiteren Werte verfügbar sind, wird eine Ausnahme angezeigt. Die Methode hasNext
prüft auf weitere Werte und gibt false
zurück, wenn keine weiteren Werte vorhanden sind. In Automation 360 wird bei der Ausführung der Schleife zuerst hasNext()
aufgerufen. next()
wird nur aufgerufen, wenn hasNext()
den Wert true
zurückgibt.
Um einen Iterator zu erstellen, sind die folgenden Anmerkungen erforderlich.
Anmerkung | Verwendung |
---|---|
BotCommand |
Verwenden Sie die Anmerkung BotCommand mit einem iterator als commandType . Dadurch wird sichergestellt, dass das Plain Old Java Object (POJO) einen Automation 360-Iterator erstellen kann. |
CommandPkg |
Wenn Sie ein Paket erstellen, geben Sie einen Namen, eine Bezeichnung und eine Beschreibung für die Anmerkung an. |
Idx |
Versehen Sie alle Parameter und Mitgliedsvariablen, die erforderlich sind und bei der Validierungsprüfung helfen, mit Anmerkungen. Alternativ können sie in der Schnittstelle für die Eingabe angezeigt werden. Geben Sie Idx und den Typ an. |
Pkg |
Versehen Sie alle Parameter und Mitgliedsvariablen, die in der Schnittstelle angezeigt werden sollen, mit Anmerkungen. Diese Anmerkung wird ignoriert, wenn sie nicht von Idx begleitet wird. |
HasNext |
Die Methode, die aufgerufen werden muss, um zu prüfen, ob die Iteration mehr Elemente hat (gibt true zurück, wenn next() ein Element zurückgibt, anstatt eine Ausnahme zu verursachen). Sie muss einen booleschen Wert zurückgeben.Wenn die Methode Parameter akzeptiert, müssen diese mit der Anmerkung |
Next |
Die Methode gibt den nächsten verfügbaren Wert in der Iteration zurück. Der Rückgabetyp ist ein Wert. Wenn keine weiteren Werte verfügbar sind, wird eine Ausnahme angezeigt. |
Das Anwendungsbeispiel durchläuft eine Reihe von Schleifen, z. B. für das Java-Konstrukt (int i=0; I<n; i++
). Es übernimmt den Wert von n
aus dem Bot Creator, wenn der Bot erstellt wird.
- Vergewissern Sie sich, dass Sie die folgenden Pakete importiert haben, damit alle Funktionen wie im Beispiel beschrieben funktionieren.
import com.automationanywhere.botcommand.data.Value; import com.automationanywhere.botcommand.data.impl.NumberValue; import com.automationanywhere.commandsdk.annotations.BotCommand; import com.automationanywhere.commandsdk.annotations.CommandPkg; import com.automationanywhere.commandsdk.annotations.HasNext; import com.automationanywhere.commandsdk.annotations.Idx; import com.automationanywhere.commandsdk.annotations.Inject; import com.automationanywhere.commandsdk.annotations.Next; import com.automationanywhere.commandsdk.annotations.Pkg; import com.automationanywhere.commandsdk.annotations.BotCommand.CommandType; import com.automationanywhere.commandsdk.annotations.rules.GreaterThanEqualTo; 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;
- Erstellen Sie die POJO-Klasse mit der Geschäftslogik.
Vergewissern Sie sich, dass POJO über eine Methode verfügt und einen booleschen Wert zurückgibt. Dies wird als Vergleichsmethode dienen.
@BotCommand(commandType=CommandType.Iterator) @CommandPkg(return_label = "Return the value in variable", node_label = ": {{times}} times", label = "Iterator demo", description = "Iterate number of times", name = "iteratorTypeDemo", return_type = DataType.NUMBER) public class IteratorTypeDemo { @Idx(index = "1", type = AttributeType.NUMBER) @Pkg(label = "times", default_value = "10", default_value_type = DataType.NUMBER) @GreaterThanEqualTo("0") @NumberInteger @NotEmpty @Inject private Double times = 10d; private Double counter = 0d; @HasNext public boolean hasNext() { return counter < times; } @Next public Value<Double> next() throws Exception{ if (counter >= times) throw new Exception("Counter '"+ counter +"' is exceed the times limit '"+times+"'"); counter++; NumberValue result = new NumberValue(); result.set(counter); return result; } public void setTimes(Double times) { this.times = times; } }
- Fügen Sie der POJO-Klasse Anmerkungen hinzu, um sie für den Automation 360-Iterator zu aktivieren und ein Paket zu erstellen.
@BotCommand(commandType = CommandType.Iterator) @CommandPkg(return_label = "Return the value in variable", node_label = ": {{times}} times", label = "Iterator demo", description = "Iterate number of times", name = "iteratorTypeDemo", return_type = DataType.NUMBER) public class IteratorTypeDemo { private Double times = 10 d; private Double counter = 0 d; public boolean hasNext() { return counter < times; }
- Versehen Sie die Methoden
hasNext()
undnext()
entsprechend mit Anmerkungen.@HasNext public boolean hasNext() { return counter < times; } @Next public Value < Double > next() throws Exception { if (counter >= times) throw new Exception("Counter '" + counter + "' is exceed the times limit '" + times + "'"); counter++; NumberValue result = new NumberValue(); result.set(counter); return result; }
Die Methoden sind nutzerfreundlich benannt und entsprechen der Java-Iterator-Schnittstelle. Bei der Benennung von Methoden gibt es von Seiten des SDK keine Einschränkungen.
Verwenden Sie in einem Iterator keine Parametermethoden, sondern
setter injection
. - Versehen Sie die Variablen mit den Anmerkungen
Idx
undPkg
.Fügen Sie
@NotEmpty
hinzu, um zu gewährleisten, dass der Wert nicht Null ist, und fügen Sie@GreaterThanEqualTo
hinzu, um zu gewährleisten, dass der Wert immer größer ist als0
.@Idx(index = "1", type = AttributeType.NUMBER) @Pkg(label = "times", default_value = "10", default_value_type = DataType.NUMBER) @GreaterThanEqualTo("0") @NotEmpty @Inject private Double times = 10 d;
Die Attributtyp-Nummer gibt
Double
zurück.