Crear un iterador utilizando el paquete SDK
- Última actualización2022/07/22
Crear un iterador utilizando el paquete SDK
En Automation 360, puede crear un iterador con el paquete SDK. Un iterador se utiliza para recorrer varios objetos de tipo similar y junto con el paquete Bucle. Consta de dos métodos, next
y hasNext
, que devuelven el objeto real y un valor booleano.
Anotaciones obligatorias
Cuando se utiliza el iterador, el método next
devuelve el siguiente valor disponible. Si no hay más valores disponibles, se muestra una excepción. El método hasNext
revisa si hay otros valores y devuelve false
si no hay más valores disponibles. En Automation 360, cuando se ejecuta el bucle, hasNext()
se llama primero, y next()
se llama solo si hasNext()
devuelve un valor true
.
Para crear un iterador, se requieren las siguientes anotaciones.
Anotación | Uso |
---|---|
BotCommand |
Utilice la anotación BotCommand con un iterator como el commandType . Esto garantiza que el objeto Java antiguo sin formato (POJO) se pueda utilizar para crear un iterador Automation 360. |
CommandPkg |
Cuando cree un paquete, proporcione un nombre, una etiqueta y una descripción para la anotación. |
Idx |
Anote todos los parámetros y las variables miembro que se requieren y que ayudan con la comprobación de la validación, o se pueden mostrar en la interfaz para la entrada. Proporcione el Idx y el tipo. |
Pkg |
Anote todos los parámetros y variables miembro que se mostrarán en la interfaz. Esta anotación será ignorada si no va acompañada de la etiqueta Idx . |
HasNext |
El método al que hay acceder para comprobar si la iteración tiene más elementos (devuelve true si next() devuelve un elemento en lugar de lanzar una excepción). Debe devolver un valor booleano.Si el método acepta parámetros, estos se deben anotar con el |
Next |
El método devuelve el siguiente valor disponible en la iteración. El tipo de retorno es un valor. Si no hay otro valor disponible, se muestra una excepción. |
El caso de uso de ejemplo recorre el número de veces, por ejemplo, para construcción Java (int i=0; I<n; i++
). Acepta el valor de n
del Bot Creator cuando se crea el bot.
- Asegúrese de que importó los siguientes paquetes para garantizar que todas las funcionalidades funcionan como se describe en el ejemplo.
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;
- Cree la clase POJO con la lógica de negocio.
Asegúrese de que el POJO tenga un método y que devuelva un valor booleano. Esto actuará como método de comparación.
@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; } }
- Anote la clase POJO para habilitarla para el iterador Automation 360 y para crear un paquete.
@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; }
- Anote adecuadamente el método
hasNext()
ynext()
.@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; }
Los métodos se nombran de forma sencilla y están en paralelo con la interfaz del iterador de Java. No hay restricciones del lado de SDK cuando se nombran los métodos.
En un iterador, no utilice métodos de parámetros, sino que utilice
setter injection
. - Anote las variables con
Idx
yPkg
.Agregue
@NotEmpty
para garantizar que el valor no es nulo, y agregue@GreaterThanEqualTo
para garantizar que el valor es siempre mayor que0
.@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;
El número de tipo de atributo devuelve un
Double
.