# 実行経路とデータ

Source: https://openflow.run/ja/docs/design/execution-model/
Language: ja
Product version: 0.1.0-beta.77

制御経路と入力のバインドを分け、ワークフローの動作を確認しやすくします。

ワークフローは、処理を実行できるタイミングと、使うデータの取得元を宣言します。実行エッジと入力のバインドは、それぞれを独立して指定します。

## 実行経路

1 回の実行は 1 つのトリガーから始まります。通常のノードは、現在の反復における直接の前段ノードが完了またはスキップされるまで待ちます。選択された入力エッジが 1 本以上あれば実行し、すべての入力経路がスキップされていれば自身もスキップします。

Condition や待機ノードは、名前付きの実行経路を選択します。分岐名は制御信号であり、通常の業務データ出力ではありません。

Condition が顧客ランクを比較し、優先分岐または otherwise 分岐を選びます。

**入力**
比較する顧客ランクは "priority" です。

**想定される結果**
Priority queue が選ばれます。ランクを他の値に変えると Standard queue が選ばれます。

**実行前の準備**
インポートや実行には Open Flow サービスが必要です。プレビュー自体はオフラインで動作します。

[ワークフローをダウンロード](https://openflow.run/docs/examples/route-by-value.openflow.json)

## データの取得元

ノードは固定値、対応する変数、選択された上流経路で利用できる出力を読み取ります。実行エッジを接続しても入力はバインドされず、出力をバインドしても実行エッジは作成されません。

合流点では、選択された前段経路とその上流のデータを入力に使えます。スキップされた経路から、以前の呼び出しの古い値は取得できません。実行画面の最新結果表示も、入力の優先順位を決めません。

Start が名前を、Value が接頭辞を渡し、Code が組み合わせ、Outputs が最終結果を定義します。

**入力**
{"name":"Ada"}

**想定される結果**
{"message":"Hello, Ada!"}

**実行前の準備**
インポートや実行には Open Flow サービスが必要です。プレビュー自体はオフラインで動作します。

[ワークフローをダウンロード](https://openflow.run/docs/examples/first-workflow.openflow.json)

## ループ

後方エッジは次の反復を開始できます。最初に入るときは反復用のエッジを待たず、繰り返しは実行予算で制限されます。結果を次の反復に渡す場合は、現在の経路で利用できる出力を明示的に参照してください。最後に完了したノードの結果には依存できません。

## 外部への影響

タスクは出力を検証した後で業務結果をコミットします。ただし、後続の処理が失敗する前に、外部呼び出しがすでに反映される場合があります。実行の取消し、公開版のロールバック、実行の失敗によって、送信済みのメールや API リクエストなどの外部書き込みは取り消されません。

結果を確認できなければ、不明のまま保持します。復旧のために、結果未確認の外部操作を自動で繰り返してはいけません。[エラーと再試行](https://openflow.run/ja/docs/concepts/errors-and-retries/index.md)を参照してください。

## 参照元

*   [docs/architecture.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/architecture.md#graph-execution-and-side-effects)
*   [docs/control/contracts/control-api.md](https://github.com/oomol-lab/open-flow/blob/e25a738d170322734572a0b8a1323cb00b9d355a/docs/control/contracts/control-api.md#execution-graphs-and-input-sources)
