

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# SEQUENTIAL\_EXECUTOR
<a name="monetization-functions-types-sequential-executor"></a>

## どのようなときに使うか
<a name="monetization-functions-types-sequential-executor-when"></a>

は、一連の関数を一度に 1 つずつ順番に`SEQUENTIAL_EXECUTOR`実行します。各ステップは、その前のステップの結果を使用できます。

ロジックが相互に結果に依存する複数のステップを必要とする`SEQUENTIAL_EXECUTOR`場合に使用します。一般的なユースケースには、アイデンティティデータを取得し、それを使用して対象者セグメントを取得し、分類ステップを実行して、結果に基づいてさまざまな外部サービスを条件付きで呼び出し、複数のデータソースから複雑な広告リクエスト URLsを構築することが含まれます。

## 設定フィールド
<a name="monetization-functions-types-sequential-executor-fields"></a>

`SEQUENTIAL_EXECUTOR` 関数には次のフィールドがあります。
+ **ランタイム** — 式言語。これを に設定します`JSONATA`。
+ **FunctionList** — 1～10 ステップの順序付きリスト。各ステップでは、実行する関数`FunctionId`の を指定します。必要に応じて、ステップを実行するかスキップするかを制御する`RunCondition`式を追加できます。
+ **出力** — すべてのステップの完了後に生成する値を定義します。各エントリは、シーケンス内の任意のステップによって生成されたデータを参照できる式に出力キー ( など`player_params.envelope`) をマッピングします。省略すると、シーケンス内の個々の関数からのすべての出力が使用されます。
+ **TimeoutMilliseconds** (必須) — シーケンス全体が完了するまでの最大時間。シーケンスがこのタイムアウトを超えると、MediaTailor はシーケンスからのすべての出力を破棄します。

## 順序付けられた実行とデータフロー
<a name="monetization-functions-types-sequential-executor-data-flow"></a>

MediaTailor は、最初から最後までの順序で各ステップを実行します。各ステップが完了すると、生成される値は実行中の結果のセットにマージされます。以降のステップでは、元のセッションデータと、前のステップで生成されたすべての値にアクセスできます。

一時データは、ステップ間でデータを渡すための主要なメカニズムです。関数が`temp.*`キーに書き込むと、次のステップでその値を読み取ることができます。前のステップで書き込まれたプレイヤーパラメータと広告リクエストフィールドは、後のステップにも表示されます。

**注記**  
一時データは、オブジェクトや配列を含む任意のデータ型を受け入れます。プレイヤーパラメータと広告リクエストフィールドは、文字列、数字、ブール値、null のみを受け入れます）。

## ステップごとの実行条件
<a name="monetization-functions-types-sequential-executor-run-conditions"></a>

シーケンスの各ステップには、オプションの `RunCondition` フィールドがあります。このフィールドには、 `true`または を返す式が含まれています`false`。MediaTailor は、そのステップを実行する直前に`RunCondition`式を評価します。

`RunCondition` 式が と評価された場合`false`、MediaTailor はステップを完全にスキップし、次のステップに進みます。`RunCondition` フィールドを省略すると、ステップは常に実行されます。

```
{ "FunctionId": "retryFetch", "RunCondition": "{%temp.statusCode = 500%}" }
```

このメカニズムにより、条件付きパイプラインを構築できます。たとえば、ステップ 1 で ID フェッチを実行し、ステップ 1 が有効な ID を返した場合にのみ、条件付きでステップ 2 でセグメントルックアップを実行できます。

## 出力ブロックの仕組み
<a name="monetization-functions-types-sequential-executor-output"></a>

の出力ブロックは、すべてのステップが完了した後にシーケンスが生成する内容`SEQUENTIAL_EXECUTOR`を制御します。
+ **出力ブロックが存在する** — MediaTailor は、出力ブロック内の式を最終的な累積状態と照らし合わせて評価し、それらの出力のみを保存します。シーケンシャル出力ブロックで参照されていない、前のステップで生成された出力は破棄されます。
+ **出力ブロックなし** — MediaTailor は、すべてのステップから蓄積されたすべての出力を直接保存します。

**ヒント**  
すべての関数の出力を渡す場合は、出力ブロックを省略します。保存する前に累積された結果をフィルタリング、名前変更、または変換する必要がある場合は、出力ブロックを追加します。

## タイムアウト設定
<a name="monetization-functions-types-sequential-executor-timeout"></a>

`TimeoutMilliseconds` フィールドは、シーケンス全体の期限を設定します。このタイムアウトは、 関数によって行われた HTTP 呼び出しを含むすべてのステップをカバーします。シーケンスがタイムアウトを超えると、MediaTailor はシーケンスからのすべての出力を破棄し、関数がアタッチされていないかのように続行します。

個々の`HTTP_REQUEST`関数は、引き続き独自の`RequestTimeoutMilliseconds`設定を尊重します。シーケンスタイムアウトは、合計実行時間を制限する外部境界として機能します。

## 例: HTTP での再試行の失敗
<a name="monetization-functions-types-sequential-executor-example"></a>

この例では、ID API を呼び出し、最初の呼び出しがサーバーエラーを返すと自動的に再試行します。SEQUENTIAL\_EXECUTOR によってオーケストレーションされた 2 つの HTTP\_REQUEST 関数を使用します。

**ステップ 1 — プライマリフェッチ (`fetchIdentity`):**

```
{
    "FunctionId": "fetchIdentity",
    "FunctionType": "HTTP_REQUEST",
    "HttpRequestConfiguration": {
        "Runtime": "JSONATA",
        "MethodType": "GET",
        "Url": "{%'https://identity.example.com/v1/resolve?ip=' & session.client_ip%}",
        "Headers": {
            "Accept": "application/json"
        },
        "RequestTimeoutMilliseconds": 1000,
        "Output": {
            "temp.statusCode": "{%response.statusCode%}",
            "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}"
        }
    }
}
```

**ステップ 2 — 失敗時に再試行する (`retryIdentity`):**

```
{
    "FunctionId": "retryIdentity",
    "FunctionType": "HTTP_REQUEST",
    "HttpRequestConfiguration": {
        "Runtime": "JSONATA",
        "MethodType": "GET",
        "Url": "{%'https://identity-fallback.example.com/v1/resolve?ip=' & session.client_ip%}",
        "Headers": {
            "Accept": "application/json"
        },
        "RequestTimeoutMilliseconds": 1000,
        "Output": {
            "temp.statusCode": "{%response.statusCode%}",
            "temp.envelope": "{%response.statusCode = 200 ? response.body.envelope : null%}"
        }
    }
}
```

**シーケンス (`identityWithRetry`):**

```
{
    "FunctionId": "identityWithRetry",
    "FunctionType": "SEQUENTIAL_EXECUTOR",
    "SequentialExecutorConfiguration": {
        "Runtime": "JSONATA",
        "TimeoutMilliseconds": 2000,
        "FunctionList": [
            { "FunctionId": "fetchIdentity" },
            { "FunctionId": "retryIdentity", "RunCondition": "{%temp.statusCode >= 500%}" }
        ],
        "Output": {
            "player_params.envelope": "{%temp.envelope%}"
        }
    }
}
```

**仕組み:**

1. `fetchIdentity` は ID API を呼び出し、ステータスコードとエンベロープを に書き込みます`temp.*`。

1. ステータスコードが 500 以上の場合、ステップ 2 `RunCondition`の は と評価`true`され、`retryIdentity`実行されます。再試行レスポンス`temp.envelope`で `temp.statusCode`と が上書きされます。

1. 最初の呼び出しが成功すると、ステップ 2 はスキップされます。

1. シーケンス出力ブロックは `temp.envelope`に書き込みます`player_params.envelope`。