阅读和查看 Automation Anywhere 文档

Automation Anywhere Automation 360

关闭内容

内容

打开内容

使用软件包 SDK 创建迭代器

  • 已更新:1/07/2021
    • Automation 360 v.x
    • 版本
    • RPA 工作区

使用软件包 SDK 创建迭代器

Automation 360 中,您可以使用 SDK 软件包创建迭代器。迭代器用于循环处理多个相似类型的对象,并与 Loop 包一起使用。它包含两种方法,即 nexthasNext,它们返回实际对象和布尔值。

所需注释

使用迭代器时,next 方法返回下一个可用值。如果没有更多值可用,则会显示异常。hasNext 方法检查其他值,如果没有更多可用值,则返回 false。在 Automation 360 中,当循环被执行时,先调用 hasNext(),仅当 hasNext() 返回 true 值时才调用 next()

要创建迭代器,需要以下注释。

注释 使用
BotCommand 使用 BotCommand 注释,iterator 作为 commandType。这确保了普通 Java 对象 (POJO) 符合创建 Automation 360 迭代器的条件。
CommandPkg 创建软件包时,请提供注释的名称、标签和描述。
Idx 注释所有必需的参数和成员变量,并帮助验证检查,也可以在输入界面中显示它们。提供 Idx 和类型。
Pkg 注释将在界面中显示的所有参数和成员变量。如果没有 Idx,将忽略此注释。
HasNext 如果迭代器具有更多元素,则必须调用该方法进行测试(如果 next() 返回元素,则返回 true,而不是抛出异常)。必须返回布尔值。

如果该方法接受参数,则必须使用 Idx 来注释它们。haveNext 方法会验证它,如果没有更多可用值,则返回 false。在 Automation 360 中执行 Loop 时,先调用 hasNext()。仅当 hasNext() 返回 true 值时,才会调用 next()

Next 方法返回迭代器中的下一个可用值。返回类型是一个值。如果没有更多值可用,则显示异常。
Use case example(使用案例示例)

该示例用例循环处理多次,例如,用于 (int i=0; I<n; i++) Java 构造。它接受 bot 创建时来自 Bot Creatorn 值。

  1. 使用业务逻辑创建 POJO 类。

    确保 POJO 具有方法并返回布尔值。这将作为比较方法。

    public class IteratorTypeDemo {
    
    	private Double times = 10 d;
    	private Double counter = 0 d;
    
    	public boolean hasNext() {
    		return counter < times;
    	}
    
    	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;
    	}
    
    }
    
  2. 对 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;
    	}
  3. 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 端没有限制。

    在迭代器中,不要使用参数方法,而是使用 setter injection

  4. IdxPkg 来注释变量。

    添加 @NotEmpty 以确保值不为空,添加 @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

发送反馈