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 Idx gekennzeichnet werden. Die Methode hasNext prüft sie und gibt false zurück, wenn keine weiteren Werte vorhanden sind. Wenn Schleife in Automation 360 ausgeführt wird, wird hasNext() zuerst aufgerufen. next() wird nur aufgerufen, wenn hasNext() den Wert true zurückgibt.

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

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.

  1. 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;
  2. 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;
        }
    }
  3. 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;
    	}
  4. Versehen Sie die Methoden hasNext() und next() 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.

  5. Versehen Sie die Variablen mit den Anmerkungen Idx und Pkg.

    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 als 0.

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