A Choice ステートは、条件ロジックに基づいてフローを異なるブランチに誘導します。このトピックでは、Choice ステートの基本的な概念を説明し、使用例を示し、フロー制御に条件式を使用する方法を説明します。
概要
Choice ステートは、指定された条件に基づいて異なるステートを実行するフロー内のノードです。複数の選択肢とデフォルトオプションが含まれています。各選択肢には、条件式 (Condition) とトランジション命令 (Next) があります。プログラミング言語の switch-case 文と同様に、Choice ステートは条件式を使用してフローの実行パスを決定します。
フローが選択肢の状態に進むと、システムは選択肢ブランチの条件式が定義された順序で True を返すかどうかを評価します。
選択肢の条件式が
Trueを返す場合、フローはその選択肢に定義されたステートとトランジションを実行します。条件式が
Trueを返さない場合、フローはデフォルトオプションで定義されたステートとトランジションを実行します。
次の表に、選択肢の状態に含まれる属性を示します。
属性 | タイプ | 必須 | 説明 | 例 |
名前 | string | はい | 状態の名前。 | my state |
説明 | string | いいえ | 状態の説明。 | ここに記述します |
タイプ | string | はい | 状態のタイプ。 | Choice |
InputConstructor | map[string]any | いいえ | 入力コンストラクター。 | 詳細については、「入力と出力」をご参照ください。 |
デフォルト | string | はい | デフォルトブランチ。 | my next task |
ブランチ | ChoiceBranch | はい | 選択肢ブランチ。 | ChoiceBranch をご参照ください。 |
ChoiceBranch
属性 | タイプ | 必須 | 説明 | 例 |
条件 | string | はい | 条件式。詳細については、「式の例」をご参照ください。 | $Input.status=="ready" |
次へ | string | はい | 条件が満たされた場合にワークフローが遷移する次の状態の名前。 | my next task |
選択肢の状態では、[End] 属性と [Next] 属性はサポートされていません。選択肢の状態の [デフォルト] 属性は、選択肢ブランチの条件が満たされない場合にワークフローがデフォルトで遷移する状態を指定します。 [デフォルト] 属性の機能は、[Next] 属性の機能と同じです。ChoiceBranch には [Next] 属性を含めることができます。
例
次のサンプルフローには、選択肢の状態が含まれています。
入力
statusの値がreadyの場合、最初の選択肢のPass2ステートが実行されます。入力
statusの値がreadyでない場合、デフォルトオプションのPass1が実行されます。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: Choice
States:
- Type: Choice
Name: Choice
Branches:
- Condition: $Input.data == "ready"
Next: Pass1
Default: Pass2
- Type: Pass
Name: Pass2
End: true
- Type: Pass
Name: Pass1
End: true条件式
システムでサポートされている条件式は、次の演算と変数で構成されています。式によって返されるブール値に基づいて、条件式で指定された条件が満たされているかどうかを判断できます。
比較操作:
>、>=、<、<=、==、および!=。これらの操作は、文字列と数値に適用されます。論理操作:
||および&&。文字列定数: 文字列定数は、二重引用符(")またはグレイブアクセント(`)で囲みます。例: "foobar" または `foobar`。
数値定数:
1および12.5。ブール定数:
trueおよびfalse。プレフィックス:
!および-。包含:
in。これは、配列に値が含まれているか、オブジェクトにキーが含まれているかを判断するために使用されます。
式の例
次の表は、サンプルステート入力 $Input に基づくさまざまな条件式の結果を示しています。条件式では $Context 変数と $Input 変数を使用できます。詳細については、「データ受け渡し」をご参照ください。
{
"a": 1,
"b": {
"b1": true,
"b2": "ready"
},
"c": [1, 2, 3],
"d": 1,
"e": 1,
"f": {
"f1": false,
"f2": "inprogress"
}
}条件式 | 実行結果 |
| true |
| false |
| true |
| true |
| true |
| true |
| true |
| true |
| false |
| true |
| false |
| true |
| false |
| true |
| true |
| true |
| false |
| true |