パッケージ SDK を使用した反復子の作成

Automation 360 では、SDK パッケージで反復子を作成できます。反復子は、類似したタイプの複数のオブジェクトをループすることができ、ループ パッケージで使用します。これは、nexthasNext の 2 つのメソッドで構成され、実際のオブジェクトとブール値を返します。

必要な注釈

反復子が使用されている場合、next メソッドは次に使用可能な値を返します。使用可能な値がなくなると、例外が表示されます。hasNext メソッドは、その他の値の有無をチェックし、使用可能な値がない場合は false を返します。Automation 360 でループが実行されると、まず hasNext() が呼び出されます。next() は、hasNext()true 値を返した場合のみ呼び出されます。

反復子を作成するには、次の注釈が必要です。

注釈 使用状況
BotCommand commandType として iterator を使用して、BotCommand 注釈を使用します。これにより、POJO (plain old Java object) が Automation 360 反復子の作成に適するようになります。
CommandPkg パッケージの作成では、注釈に名前、ラベル、説明を指定します。
Idx 検証チェックに役立つよう、必要なすべてのパラメーターとメンバー変数に注釈を付けます。これらは、入力時のインターフェースに表示することもできます。Idx とタイプを指定します。
Pkg インターフェースに表示するすべてのパラメーターとメンバー変数に注釈を付けます。Idx が付いていない注釈は無視されます。
HasNext 反復にさらに要素があるかどうかをテストするために呼び出す必要があるメソッド (例外がスローされずに next() から要素が返された場合は true を返す)。ブール値を返す必要があります。

メソッドがパラメーターを受け付ける場合は、Idx の注釈を付ける必要があります。hasNext メソッドは検証を行い、値がない場合は false を返します。Automation 360ループ が実行されると、まず hasNext() が呼び出されます。next() は、hasNext()true 値を返した場合のみ呼び出されます。

Next 反復で次に使用可能な値を返します。リターンタイプは値です。使用可能な値がなくなると、例外が表示されます。
ユースケース例

このユースケースは、たとえば (int i=0; I<n; i++) Java 構文をループする例です。Bot が作成されると、Bot Creator から n の値を受け付けます。

  1. 以下のパッケージをインポートしたことを確認し、サンプルで説明されているようにすべての機能が動作することを確認してください。
    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. 次のビジネス ロジックを持つ POJO クラスを作成します。

    POJO にはメソッドが 1 つ必要であり、ブール値を返す必要があります。これは、比較メソッドの働きをします。

    @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. 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;
    	}
  4. 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 を使用します。

  5. IdxPkg で変数に注釈を付けます。

    値が null にならないよう @NotEmpty を追加し、値が必ず 0 より大きくなるよう @GreaterThanEqualTo を追加します。

    @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 を返します。