Создайте итератор с помощью пакета SDK
В Automation 360можно создать итератор с помощью пакета SDK. Итератор используется для циклического прохождения через несколько объектов аналогичного типа и используется вместе Loop с пакетом. Он состоит из двух методов, NEXT
и hasNext
, которые возвращают фактический объект и логическое значение.
Необходимые аннотации
При использовании итератора следующий метод возвращает следующее доступное значение. Если больше нет доступных значений, отображается исключение.
Метод hasNext проверяет другие значения и возвращает
false
, если больше нет доступных значений. В Automation 360, когда цикл исполняется, hasNext()
называется первым, а Next()
вызывается только в том случае, если hasNext()
вернул истинное значение.
Для создания итератора требуются следующие аннотации.
Аннотация | Использование |
---|---|
Команда BotCommand |
Используйте аннотацию BotCommand с итератором в качестве командного типа . Это гарантирует, что обычный старый объект Java (POJO) может быть создан Automation 360 итератором. |
CommandPkg |
При создании пакета укажите имя, метку и описание аннотации. |
Idx |
Аннотируйте все необходимые параметры и переменные-члены, которые помогут проверить правильность ввода, или они могут отображаться в интерфейсе ввода. Укажите idx и тип. |
Пакет |
Аннотируйте все параметры и переменные элемента, которые будут отображаться в интерфейсе. Эта аннотация будет проигнорирована, если она не сопровождается idx . |
HasNext |
Метод, который должен быть вызван для тестирования, если итерация имеет больше элементов (возвращает TRUE , если Next() возвращает элемент, а не отбрасывает исключение). Он должен вернуть логическое значение. Если метод принимает параметры, то они должны быть аннотированы idx |
Далее |
Метод возвращает следующее доступное значение в итерации. Тип возврата - это значение. Если больше нет доступных значений, отображается исключение. |
Например, в примере сценарий использования проходит несколько циклов, например, для (int i=0; i
) построения Java. Он принимает значение n
из Bot Creator при bot создании.
- Создайте класс POJO с бизнес-логикой.
Убедитесь, что POJO имеет метод и возвращает логическое значение. Это будет служить методом сравнения.
@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; } }
- Аннотировать класс POJO, чтобы включить его для Automation 360 итератора и создать пакет.
@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; }
- Добавьте комментарий к
методу hasNext() и Next().
@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; }
. Методы названы простым в использовании способом и параллельны Java интерфейс итератора. При присвоении имен со стороны SDK ограничений нет методов.
В итераторе не используйте параметрические методы, а используйте
инъекцию с установщиком
. - Аннотируйте переменные с помощью
idx
иPkg
.Добавьте
@NotEmpty
, чтобы убедиться, что значение не равно null, и добавьте@GreaterThanEqualTo
, чтобы значение всегда было больше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;
. Номер типа атрибута возвращает значение
Double
.