CloudFlow は、ワークフロー内の状態間でデータを渡します。状態は、前の状態によって提供された入力を受け取り、出力を返して次の状態に渡します。このトピックでは、ワークフローの入力と出力について説明します。
背景情報
CloudFlow ワークフローのデータは、関数型プログラミングの関数呼び出しと同様に、1 つの状態から別の状態へと流れます。各状態は入力を受け取り、出力を返します。出力データはコンテキストに格納されます。状態間のデータフローにより、複雑なロジックを必要とするビジネス アプリケーションのプロセスを自動化できます。
入力と出力は JSON オブジェクトである必要があります。状態の入力と出力のサイズは 64 KiB を超えることはできません。状態の入力と出力のサイズが 64 KiB を超えると、フローは実行に失敗します。
実行の入力と出力
実行の入力
実行を開始するには、情報またはデータを提供する必要があります。情報またはデータは、1 つ以上の状態の入力として機能する場合があります。ワークフロー オーケストレーション中に $Context.Execution.Input システム式を使用することで、実行の入力にアクセスできます。
たとえば、オンラインの学生登録システムのロジックは、学生情報の収集、学生情報の検証、学生の登録という 3 つのプロセスで構成されています。各プロセスでは、学生の基本情報が必要です。この場合、学生の基本情報を、実行の入力として渡し、システム式を使用して実行入力にアクセスするように 3 つの対応する状態を構成できます。次の図は、実行入力の例を示しています。

実行の出力
実行の出力は、実行が成功した結果です。ワークフロー オーケストレーション中にシステム変数を使用して実行の出力にアクセスすることはできません。
状態の入力と出力
状態の入力
ワークフロー オーケストレーション中に、$Context.Current.Input システム式、またはその短縮形である $Input を使用して、現在の状態の入力にアクセスできます。
状態の出力
ワークフロー オーケストレーション中に、$Context.Current.Output システム式、またはその短縮形である $Output を使用して、現在の状態の出力にアクセスできます。短縮形 $Output は、出力コンストラクターのスコープ内でのみ使用できることに注意してください。
コンストラクター
コンストラクターで使用できるシステム式
コンストラクターでは、次のシステム式を使用できます。
$Context: $Context のライフサイクルは、ワークフローの実行期間全体と同じです。
$Contextの詳細については、「データの受け渡し」をご参照ください。$Input: $Input のライフサイクルは、ワークフローが状態に入ったときに開始し、ワークフローが状態を終了したときに終了します。$Input は
$Context.Current.Inputの短縮形です。$Output: $Output のライフサイクルは、ワークフローがタスク呼び出し応答状態に入ったときに開始し、ワークフローが状態を終了したときに終了します。$Output は
$Context.Current.Outputの短縮形です。$Global: $Global のライフサイクルは、ワークフローの実行期間全体と同じです。
$Globalの詳細については、「グローバル変数」をご参照ください。
入力コンストラクター、出力コンストラクター、またはパラメーター コンストラクターで
.$で終わるキーには、式形式で値を割り当てる必要があります。そうでない場合、エラーが発生します。$で始まる組み込み関数またはシステム変数を使用する場合は、変数キーの末尾に.$を追加して、変数が文字列として扱われないようにします。入力コンストラクターまたは出力コンストラクターは、最大
10レイヤーの組み込み関数のネストをサポートします。
次の図は、$Input、$Output、$Context、$Global システム式のライフサイクルと、さまざまな状態での割り当てプロセスを示しています。
$Inputは実行の入力です。前の図では、
$Input=InputConstructor($Context,$Global)は、スコープ内でInputConstructorが$Contextと$Globalを参照し、そこから情報を抽出できることを示しています。構築結果は$Inputに割り当てられます。$Outputはタスク呼び出しの結果です。呼び出しが非同期 コールバック モードで開始された場合、$Outputの値はコールバックの結果です。$Output=OutputConstructor($Context,$Global)は、スコープ内でOutputConstructorが$Contextと$Globalを参照し、そこから情報を抽出できることを示しています。構築結果は$outputに割り当てられます。$Globalはグローバル変数を示し、ワークフローの実行期間全体にわたってアクセスできます。$Global=Merge($Global,GlobalConstructor($Context,$Global))は、グローバル コンストラクターによって構築された変数が$Globalの既存の変数とマージされ、次にすべての変数が$Globalに格納されて共有グローバル変数が更新されることを示します。$Contextは実行全体で有効なままです。
InputConstructor
InputConstructor はワークフローの入力を構築します。InputConstructor の式は、Choice 状態の条件式とは異なります。条件式はブール値のみを返すことができますが、InputConstructor の式は任意の値を返すことができます。状態 InputConstructor では、次のシステム変数を使用できます。
$Context
$Input
$Global
複数の入力構成が存在する場合、入力の優先順位は、InputConstructor、ItemsPath、ItemConstructor の順に降順になります。
次の状態機械定義は、InputConstructor の使用方法の例を示しています。
Type: StateMachine
Name: test3-tx
SpecVersion: v1
StartAt: InvokeFunction1
States:
- Type: Task
Name: InvokeFunction
Action: FC:InvokeFunction
TaskMode: RequestComplete
InputConstructor:
FieldA.$: $Context.Execution.Input
FieldB: World
FieldC.$: length($Context.Execution.Input)
FieldD.$: $Global.InvokeFunctionPayload
Parameters:
resourceArn: >-
acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
invocationType: Sync
body.$: $Input
End: true
- Type: Task
Name: InvokeFunction1
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Sync
resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
GlobalConstructor:
InvokeFunctionPayload.$: $Output.Body
Next: InvokeFunction
前の例では、
InputConstructorのデータ構造は Map[String]Any です。FieldA.$: $Context.Execution.Inputは、FieldA キーが文字列として扱われる代わりに、$Context.Execution.Inputから値を動的に取得することを示します。FieldB: Worldは、静的文字列 'World' が FieldB に割り当てられていることを示します。FieldB キーは .$ マーカーで終わっていないため、値は動的に取得されません。FieldC.$: length($Context.Execution.Input)は、組み込み関数 length を使用して$Context.Execution.Inputの値の長さを取得し、その長さが FieldC に割り当てられていることを示します。コンストラクターで使用できる組み込み関数の詳細については、「組み込み関数」をご参照ください。FieldD.$: $Global. InvokeFunctionPayload式は、グローバル ストレージ空間のInvokeFunctionPayloadキーの値を抽出し、その値をFieldDフィールドとしてTask状態に渡します。
OutputConstructor
InputConstructor と比較して、OutputConstructor は異なる時間に実行され、コンテキスト式でより多くの変数をサポートします。たとえば、入力コンストラクターでは $Context または $Input のみを使用できますが、出力コンストラクターでは $Output を使用して出力を表すことができます。これは、タスク呼び出しによって出力が既に生成されているためです。状態 OutputConstructor では、次のシステム変数を使用できます。
$Context
$Input
$Output
$Global
次の状態機械定義は、OutputConstructor の使用方法の例を示しています。
Type: StateMachine
Name: test3-tx
SpecVersion: v1
StartAt: InvokeFunction1
States:
- Type: Task
Name: InvokeFunction1
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Sync
resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
GlobalConstructor:
InvokeFunctionPayload.$: $Output.Body
Next: InvokeFunction
- Type: Task
Name: InvokeFunction
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
resourceArn: >-
acs:fc:cn-hangzhou:123456:functions/myFunction1/LATEST
invocationType: Sync
body.$: $Input
OutputConstructor:
returnID.$: uuid()
functionResult.$: $Output
functionResultStr.$: jsonToString($Output)
executionInput.$: $Context.Execution.Input
lastOutput.$: $Input
demo.$: $Global
End: true
前の例では、
OutputConstructorのデータ構造は map[string]any です。functionResult.$は状態出力を動的に取得し、executionInput.$は実行入力を動的に取得し、lastOutput.$は状態入力を動的に取得します。returnID.$は一意の ID を取得し、functionResultStr.$は状態出力から作成された文字列を取得します。