

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

## Kapan harus digunakan
<a name="monetization-functions-types-sequential-executor-when"></a>

A `SEQUENTIAL_EXECUTOR` menjalankan serangkaian fungsi satu per satu, secara berurutan. Setiap langkah dapat menggunakan hasil langkah-langkah sebelumnya.

Gunakan `SEQUENTIAL_EXECUTOR` ketika logika Anda membutuhkan beberapa langkah yang bergantung pada hasil masing-masing. Kasus penggunaan umum termasuk mengambil data identitas dan kemudian menggunakannya untuk mengambil segmen audiens, menjalankan langkah klasifikasi dan kemudian memanggil layanan eksternal yang berbeda secara kondisional berdasarkan hasilnya, dan membangun URL permintaan iklan yang kompleks dari beberapa sumber data.

## Bidang konfigurasi
<a name="monetization-functions-types-sequential-executor-fields"></a>

Sebuah `SEQUENTIAL_EXECUTOR` fungsi memiliki bidang-bidang berikut:
+ **Runtime** — Bahasa ekspresi. Setel ini ke`JSONATA`.
+ **FunctionList**— Daftar yang diurutkan dari 1 hingga 10 langkah. Setiap langkah menentukan fungsi `FunctionId` yang akan dijalankan. Secara opsional, Anda dapat menambahkan `RunCondition` ekspresi untuk mengontrol apakah langkah berjalan atau dilewati.
+ **Output** — Mendefinisikan nilai yang akan dihasilkan setelah semua langkah selesai. Setiap entri memetakan kunci keluaran (seperti`player_params.envelope`) ke ekspresi yang dapat mereferensikan data yang dihasilkan oleh setiap langkah dalam urutan. Jika dihilangkan, semua output dari fungsi individu dalam urutan digunakan.
+ **TimeoutMilliseconds**(wajib) — Waktu maksimum untuk menyelesaikan seluruh urutan. Jika urutan melebihi batas waktu ini, MediaTailor buang semua output dari urutan.

## Eksekusi dan aliran data yang diperintahkan
<a name="monetization-functions-types-sequential-executor-data-flow"></a>

MediaTailor menjalankan setiap langkah dalam urutan dari pertama hingga terakhir. Setelah setiap langkah selesai, nilai yang dihasilkannya digabungkan menjadi serangkaian hasil yang berjalan. Langkah selanjutnya dapat mengakses data sesi asli ditambah semua nilai yang dihasilkan oleh langkah-langkah sebelumnya.

Data sementara adalah mekanisme utama untuk meneruskan data antar langkah. Ketika sebuah fungsi menulis ke `temp.*` kunci, langkah selanjutnya dapat membaca nilai itu. Parameter pemain dan bidang permintaan iklan yang ditulis oleh langkah sebelumnya juga dapat dilihat oleh langkah selanjutnya.

**catatan**  
Data sementara menerima tipe data apa pun, termasuk objek dan array. Parameter pemain dan bidang permintaan iklan hanya menerima string, angka, boolean, dan null).

## Per-step kondisi lari
<a name="monetization-functions-types-sequential-executor-run-conditions"></a>

Setiap langkah dalam urutan memiliki `RunCondition` bidang opsional. Bidang ini berisi ekspresi yang mengembalikan `true` atau`false`. MediaTailor mengevaluasi `RunCondition` ekspresi segera sebelum menjalankan langkah itu.

Jika `RunCondition` ekspresi mengevaluasi`false`, MediaTailor lewati langkah sepenuhnya dan pindah ke langkah berikutnya. Jika `RunCondition` bidang dihilangkan, langkah selalu berjalan.

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

Mekanisme ini memungkinkan Anda membangun jaringan pipa bersyarat. Misalnya, Anda dapat menjalankan pengambilan identitas di langkah 1, lalu menjalankan pencarian segmen secara kondisional di langkah 2 hanya jika langkah 1 mengembalikan identitas yang valid.

## Cara kerja blok output
<a name="monetization-functions-types-sequential-executor-output"></a>

Blok output pada `SEQUENTIAL_EXECUTOR` kontrol apa yang dihasilkan urutan setelah semua langkah selesai:
+ **Output block present** — MediaTailor mengevaluasi ekspresi di blok output terhadap status akumulasi akhir dan hanya menyimpan output tersebut. Setiap output yang dihasilkan oleh langkah-langkah sebelumnya yang tidak direferensikan dalam blok output sekuensial dibuang.
+ **Output block absen** — MediaTailor menyimpan semua akumulasi output dari semua langkah secara langsung.

**Tip**  
Hilangkan blok output saat Anda ingin setiap output fungsi melewatinya. Tambahkan blok output saat Anda perlu memfilter, mengganti nama, atau mengubah hasil akumulasi sebelum menyimpannya.

## Konfigurasi waktu habis
<a name="monetization-functions-types-sequential-executor-timeout"></a>

`TimeoutMilliseconds`Bidang menetapkan tenggat waktu untuk seluruh urutan. Batas waktu ini mencakup semua langkah, termasuk panggilan HTTP apa pun yang dilakukan oleh fungsi. Jika urutan melebihi batas waktu, MediaTailor buang semua output dari urutan dan lanjutkan seolah-olah tidak ada fungsi yang dilampirkan.

`HTTP_REQUEST`Fungsi individu masih menghormati `RequestTimeoutMilliseconds` pengaturan mereka sendiri. Batas waktu urutan bertindak sebagai batas luar yang membatasi total waktu eksekusi.

## Contoh: Coba lagi pada kegagalan HTTP
<a name="monetization-functions-types-sequential-executor-example"></a>

Contoh ini memanggil API identitas dan secara otomatis mencoba ulang jika panggilan pertama mengembalikan kesalahan server. Ini menggunakan dua fungsi HTTP\_REQUEST yang diatur oleh SEQUENTIAL\_EXECUTOR.

**Langkah 1 - Ambil utama (`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%}"
        }
    }
}
```

**Langkah 2 — Coba lagi pada kegagalan (`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%}"
        }
    }
}
```

**Urutan (`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%}"
        }
    }
}
```

**Cara kerjanya:**

1. `fetchIdentity`memanggil API identitas dan menulis kode status dan amplop ke`temp.*`.

1. Jika kode status 500 atau lebih tinggi, `RunCondition` pada langkah 2 mengevaluasi `true` dan `retryIdentity` berjalan. Ini menimpa `temp.statusCode` dan `temp.envelope` dengan respons coba lagi.

1. Jika panggilan pertama berhasil, langkah 2 dilewati.

1. Blok output urutan menulis `temp.envelope` ke`player_params.envelope`.