Criar um iterador usando o pacote SDK
- Última atualização2022/07/22
Criar um iterador usando o pacote SDK
Em Automation 360, você pode criar um iterador com o pacote SDK. Um iterador é usado para fazer loop entre os vários objetos de tipo semelhante e é usado com o pacote do Loop. Ele consiste em dois métodos, next
e hasNext
, que retornam o objeto real e um valor booleano.
Anotações necessárias
Quando o iterador é usado, o método next
retorna o próximo valor disponível. Se não houver mais valores disponíveis, é mostrada uma exceção. O método hasNext
procura por outros valores e retornas false
se não houver mais valores disponíveis. Em Automation 360quando o loop é executado, hasNext()
é chamado primeiro, e next()
só é chamado se hasNext()
retornou um valor true
.
Para criar um iterador, as seguintes anotações são necessárias.
Anotação | Utilização |
---|---|
BotCommand |
Use a anotação BotCommand com o iterator como commandType . Isso garante que o objeto Java simples antigo (POJO) seja adequado para criar um iterador Automation 360. |
CommandPkg |
Ao criar um pacote, forneça um nome, rótulo e descrição para a anotação. |
Idx |
Anote todos os parâmetros e variáveis dos membros que são necessários e ajude na verificação de validação, ou eles podem ser exibidos na interface para a entrada. Forneça o Idx e o tipo. |
Pkg |
Anote todos os parâmetros e variáveis de membros que serão exibidos na interface. Essa anotação será ignorada se não for acompanhada por Idx . |
HasNext |
O método que deve ser chamado para testes se a iteração tiver mais elementos (retorna true se next() retornar um elemento em vez de lançar uma exceção). Deve retornar um valor booleano.Se o método aceita parâmetros, eles devem ser anotados com o |
Next |
O método retorna o próximo valor disponível na iteração. O tipo de retorno é um valor. Se não houver mais valores disponíveis, é mostrada uma exceção. |
O caso de uso de exemplo percorre o número de vezes, por exemplo, para o construtor Java (int i=0; I<n; i++
). Aceita o valor de n
do Bot Creator quando o bot é criado.
- Você deverá ter importado os seguintes pacotes para garantir que todas as funcionalidades operem conforme descrito no exemplo.
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;
- Crie a classe POJO com a lógica empresarial.
Assegure-se de que o POJO tenha um método e retorne um valor booleano. Isto funcionará como um método de comparação.
@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 a classe POJO para habilitá-la para o iterador Automation 360 e para criar o pacote.
@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 apropriadamente o método
hasNext()
enext()
.@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; }
Os métodos são nomeados de maneira fácil de usar e estão em paralelo com a interface do iterador Java. Não há restrição do lado do SDK quando se trata de métodos de nomeação.
Em um iterador, não use métodos de parâmetros, mas use
setter injection
. - Anote as variáveis com
Idx
ePkg
.Adicione
@NotEmpty
para garantir que o valor não seja nulo, e adicione@GreaterThanEqualTo
para garantir que o valor seja sempre maior do 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;
O número do tipo de atributo retorna um
Double
.