Sequentialコマンド


Sequentialコマンド

一連のコマンドを順番に実行します。前のコマンドが終了するのを待ってから、次のコマンドを実行します。Sequentialコマンドは、すべての子コマンドが終了すると終了します。

プロパティ

Sequentialコマンドには、共通のコマンドプロパティに加えて、以下の表に示すプロパティがあります。typeプロパティはSequentialに設定します。

コマンドを実行するために値が必要なプロパティの場合、以下の表の「デフォルト」列に「必須」と表示されています。それ以外の場合はデフォルト値が表示されますが、デフォルト値がないこともあります。

プロパティ デフォルト 説明

catch

コマンドの配列

[]

このシーケンスが早期停止した場合に実行する、順番に並んだコマンドのリストです。

commands

コマンドの配列

必須

連続して実行する順番に並んだコマンドのリストです。

data

配列

[]

コマンドに対してマップするデータのリストです。

repeatCount

整数

0

これらのコマンドを追加で実行する回数です。

finally

コマンドの配列

[]

通常のコマンドとcatchコマンドの後に実行する、順番に並んだコマンドのリストです。

通常モードでは、commandsは順番に実行され、最後にfinallyコマンドが実行されます。repeatCountは通常のコマンドにのみ適用されます。

高速モードでは、commandsは繰り返すことなく順番に実行され、最後にfinallyコマンドが実行されます。

commandsのいずれかが(通常モードで)早期停止した場合、catchコマンドとfinallyコマンドは高速モードで実行されます。

通常モードでの実行中にfinallyコマンドのいずれかが停止した場合、残りのfinallyコマンドは高速モードで実行されます。

catch

catchを使用するには、APL 1.1以降が必要です。これよりも古いバージョンのAPLを実行しているデバイスには、別のエクスペリエンスを提供してください

ほかのコマンドが実行されたことでSequentialコマンドが停止した場合、catchコマンドが実行されます。catchコマンドは「高速」モードで実行されます。すべてのdurationは無視され、各コマンドはdurationで指定した時間の最終値までジャンプします。catchコマンドはすべてのfinallyコマンドの前に実行されます。

catchコマンドは1回のみ実行されます。repeatCountプロパティは、catchコマンドには適用されません。

commands

実行するコマンドの配列です。コマンドは配列順に実行され、各コマンドが終了しない限り次のコマンドは開始されません。Sequentialコマンドのdelay値と、シーケンスの最初のコマンドのdelay値は累積で計算されます。次の例では、最初のSendEventコマンドが3000ミリ秒後に実行されます。

{
  "type": "Sequential",
  "delay": 1000,
  "repeatCount": 2,
  "commands": [
    {
      "type": "SendEvent",
      "delay": 2000
    },
    {
      "type": "SendEvent",
      "delay": 2000
    }
  ]
}

data

反復処理するデータの配列です。data配列にデータが含まれている場合、Sequentialコマンドはその配列を反復処理し、配列内の各値に対して新しいSequentialコマンドを作成します。新しい各Sequentialコマンドには、元のcommandsプロパティのコマンドが含まれます。これは、複数子コンポーネントにおけるデータ配列のインフレートのしくみに似ています。

たとえば、次のSequentialコマンドには、commandsに2つのコマンドと、data配列に2つの文字列が含まれています。

{
  "type": "Sequential",
  "data": ["item1", "item2"],
  "commands": [ 
    {
      "type": "CustomCommand1",
      "item": "${data}"
    }, 
    {
      "type": "CustomCommand2",
      "item": "${data}"
    }
  ],
  "catch": {
    "type": "OnFailCustom"
  },
  "finally": {
    "type": "OnFinishedCustom"
  }
}

このコマンドは、data内の2つの項目のそれぞれに対してSequentialを1つずつ含むSequentialコマンドに拡張されます。したがって、最終的に実行されるコマンドは次のようになります。

{
  "type": "Sequential",
  "commands": [
    {
      "type": "Sequential",
      "commands": [
        {
          "type": "CustomCommand1",
          "item": "item1"
        }, 
        {
          "type": "CustomCommand2",
          "item": "item1"
        }
      ]
    },
    {
      "type": "Sequential",
      "commands": [
        {
          "type": "CustomCommand1",
          "item": "item2"
        }, 
        {
          "type": "CustomCommand2",
          "item": "item2"
        }
      ]
    }
  ],
  "catch": {
    "type": "OnFailCustom"
  },
  "finally": {
    "type": "OnFinishedCustom"
  }
}

反復処理中に、データバインディングコンテキストは以下の表に示すプロパティを含むように拡張されます。

名前 説明

data

データ配列のプロパティから割り当てられたデータです。

index

現在のデータ項目の0から始まるインデックスです。

length

データ配列内のデータ項目の合計数です。

これらのプロパティは、data配列プロパティに1つ以上の項目が含まれている場合に設定されます。

data配列プロパティは、catchプロパティとfinallyプロパティの動作には影響しません。

finally

finallyを使用するには、APL 1.1以降が必要です。これよりも古いバージョンのAPLを実行しているデバイスには、別のエクスペリエンスを提供してください

finallyコマンドは、通常のSequentialコマンドが終了した後、または早期停止によりcatchコマンドが実行された後に実行されます。(a)Sequentialコマンド全体が高速モードで実行された場合、または(b)Sequentialコマンドが早期停止した場合を除き、finallyコマンドは通常モードで実行されます。

finallyコマンドは1回のみ実行されます。repeatCountプロパティは、finallyコマンドには適用されません。

repeatCount

この一連のコマンドを繰り返す回数です。デフォルトは0です。負の値は無視されます。

再インフレート時の処理方針

Reinflateコマンドを実行すると、Alexaがドキュメントを再インフレートした後でSequentialコマンドを再開できます。コマンドは、ReinflatepreservedSequencers配列で指定されたsequencerで実行されている場合に再開されます。このコマンドでは、現在の繰り返し回数、繰り返す回数、コマンドのリストが保存されます。

Alexaがドキュメントを再インフレートすると、現在実行中のコマンドは、「再インフレート時の処理方針」で指定されたとおりに実行を継続します。

データ配列を使用したSequentialの例

以下の例では、項目のリストが表示されます。このボタンでは、リストからランダムな色を選択し、項目の色をランダムな色に変更して、項目のテキストを色の名前に変更するという、3つのSetValueコマンドを含むSequentialを定義しています。Sequentialは、data配列をSequenceに表示されている項目のリストと同じものに設定します。

コマンドが実行されると、リスト内の各項目の色が最初に変わり、次にテキストが変わります。項目は順番に更新されます。


リスト項目を同時に更新する同様の例については、データ配列を使用したParallelの例を参照してください。


このページは役に立ちましたか?

最終更新日: 2025 年 12 月 04 日