Créer un itérateur à l'aide du package SDK

Dans Automation 360, vous pouvez créer un itérateur avec le package SDK. Un itérateur est utilisé pour passer en boucle à travers plusieurs objets de type similaire et est utilisé avec le package Boucle. Il se compose de deux méthodes, next et hasNext, qui renvoient l'objet réel et une valeur booléenne.

Annotations obligatoires

Lorsque l'itérateur est utilisé, la méthode next renvoie la valeur disponible suivante. Si aucune autre valeur n'est disponible, une exception s'affiche. La méthode hasNext vérifie d'autres valeurs et renvoie false si aucune autre valeur n'est disponible. Dans Automation 360, lorsque la boucle est exécutée, hasNext() est appelée en premier et next() n'est appelée que si hasNext() retourne la valeur true.

Pour créer un itérateur, les annotations suivantes sont obligatoires.

Annotation Utilisation
BotCommand Utilisez l'annotation BotCommand avec un iterator comme commandType. Cette opération garantit que l'ancien objet Java (POJO) est éligible à la création d'un itérateur Automation 360.
CommandPkg Lors de la création d'un package, fournissez un nom, une étiquette et une description à l'annotation.
Idx Annotez tous les paramètres et variables membres qui sont obligatoires et aident au contrôle de validation, ou ils peuvent être affichés dans l'interface pour être saisis. Fournissez Idx et le type.
Pkg Annotez tous les paramètres et variables membres qui seront affichés dans l'interface. Cette annotation est ignorée si elle n'est pas accompagnée de Idx.
HasNext La méthode qui doit être appelée pour le test si l'itération a plus d'éléments (retourne true si next() retourne un élément plutôt que de générer une exception). Elle doit renvoyer une valeur booléenne.

Si la méthode accepte les paramètres, ils doivent être annotés avec Idx. La méthode hasNext les vérifie et retourne false si aucune autre valeur n'est disponible. Dans Automation 360, lorsque Boucle est exécuté, hasNext() est appelée en premier. next() n'est appelée que si hasNext() retourne une valeur true.

Next La méthode retourne la valeur disponible suivante dans l'itération. Le type de retour est une valeur. Si aucune autre valeur n'est disponible, une exception s'affiche.
Exemple de cas d'utilisation

L'exemple de cas d'utilisation s'exécute en boucle un certain nombre de fois, par exemple, pour la structure Java (int i=0; I<n; i++). Il accepte la valeur de n à partir du Bot Creator lorsque l'robot est créé.

  1. Assurez-vous que vous avez importé les packages suivants pour garantir que toutes les fonctionnalités fonctionnent comme décrit dans l'exemple.
    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. Créez la classe POJO avec la logique métier.

    Assurez-vous que le POJO contient une méthode et retourne une valeur booléenne. Elles serviront de méthode de comparaison.

    @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. Annotez la classe POJO pour l'activer pour l'itérateur Automation 360 et pour créer un package.
    @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. Annotez les méthodes hasNext() et next() de manière adéquate.
    @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;
    }

    Les méthodes sont nommées de manière facile à utiliser et sont en parallèle avec l'interface de l'itérateur Java. Il n'existe aucune restriction du côté de SDK lors de la dénomination des méthodes.

    Dans un itérateur, n'utilisez pas de méthodes de paramètres, mais utilisez setter injection.

  5. Annotez les variables avec Idx et Pkg.

    Ajoutez @NotEmpty pour vous assurer que la valeur n'est pas nulle, et ajoutez @GreaterThanEqualTo pour vous assurer que la valeur est toujours supérieure à 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;

    Le numéro du type d'attribut retourne un Double.