Topik ini menjelaskan dasar-dasar masukan dan keluaran.
Alur dan Langkah
Data biasanya perlu diteruskan antara alur dan langkah, serta antara beberapa langkah dalam sebuah alur. Langkah-langkah dalam Flow Definition Language (FDL) mirip dengan fungsi dalam bahasa pemrograman fungsional. Langkah-langkah ini menerima masukan dan menghasilkan keluaran, yang kemudian disimpan dalam variabel lokal langkah induk (pemanggil). Masukan dan keluaran harus berupa struktur objek JSON, dan tipe variabel lokal bervariasi tergantung pada jenis langkahnya. Sebagai contoh, langkah tugas menggunakan hasil dari pemanggilan fungsi Function Compute sebagai variabel lokal, sedangkan langkah paralel menggunakan keluaran (array) dari semua cabang sebagai variabel lokal. Ukuran total masukan, keluaran, dan variabel lokal dalam sebuah langkah tidak boleh melebihi 32 KiB. Jika ukuran tersebut terlampaui, eksekusi alur akan gagal.
Jika sebuah langkah berisi langkah lain, langkah luar disebut langkah induk, dan langkah yang termasuk di dalamnya disebut langkah anak. Langkah induk dari langkah paling luar adalah alur itu sendiri. Jika dua langkah memiliki langkah induk yang sama, kedua langkah tersebut berada pada level yang sama.
Setiap alur dan langkah mencakup masukan, keluaran, dan variabel lokal. Pemetaan mereka dijelaskan sebagai berikut:
inputMappingsdari sebuah langkah memetakan masukan dan variabel lokal langkah induk ke masukan langkah anak.outputMappingsdari sebuah langkah memetakan masukan dan variabel lokal langkah saat ini ke keluaran langkah tersebut.inputMappingsdari sebuah alur memetakan masukan eksekusi alur ke masukan alur.outputMappingsdari sebuah alur memetakan masukan dan variabel lokal alur ke keluaran alur.
Variabel lokal langkah induk berisi himpunan gabungan dari semua keluaran langkah anaknya. Jika keluaran mengandung nilai kunci yang berulang, hasil dari langkah yang lebih akhir akan menimpa hasil dari langkah sebelumnya. Dalam banyak kasus, Anda dapat menggunakan pemetaan default tanpa menentukan pemetaan masukan dan keluaran secara eksplisit.
- Ketika pemetaan masukan tidak ditentukan, masukan langkah anak merupakan kombinasi dari masukan dan variabel lokal langkah induknya. Jika variabel lokal dan masukan memiliki nilai kunci yang sama, variabel lokal akan menimpa masukan.
- Ketika pemetaan keluaran tidak ditentukan, variabel lokal digunakan sebagai keluaran di semua langkah, kecuali langkah paralel dan langkah foreach.
Untuk mengontrol masukan dan keluaran dengan lebih baik, Anda perlu memahami aturan pemetaan secara rinci.
Gambar berikut menunjukkan pemetaan masukan dan keluaran dari alur contoh. Dalam alur ini, step1 adalah langkah induk dari step2 dan step3, sementara step1 dan step4 adalah langkah paling luar.
version: v1
type: flow
steps:
- type: parallel
name: step1
branches:
- steps:
- type: pass
name: step2
- steps:
- type: pass
name: step3
- type: pass
name: step4

Kode berikut dapat digunakan untuk mendeskripsikan pemetaan sehingga lebih mudah dipahami:
func flow(input0 Input) (output0 Output) {
local0 := {}
input1 := buildInput(step1InputMappings, input0, local0)
output1 := step1(input1)
save(local0, output1)
input4 := buildInput(step4InputMappings, input0, local0)
output4 := step4(input4)
save(local0, output4)
return buildOutput(flowOutputMappings, input0, local0)
}
func step1(input1 Input) (output1 Output) {
local10 := {}
input2 := buildInput(step2InputMappings, input1, local10)
output2 := step2(input2)
save(local10, output2)
local11 := {}
input3 := buildInput(step3InputMappings, input1, local11)
output3 := step3(input3)
save(local11, output3)
return buildOutput(step1OutputMappings, [local10, local11])
}
func step2(input2 Input) (output2 Output) {
}
func step3(input3 Input) (output3 Output) {
}
func step4(input4 Input) (output4 Output) {
}
Dalam contoh ini, alur terdiri dari dua langkah anak: step1 dan step4. step1 adalah langkah paralel yang berisi step2 dan step3.
- Ketika sistem mulai mengeksekusi alur, ia mengonversi masukan
StartExecutionmenjadi masukan alur (input0) berdasarkan pemetaan masukan alur. - Ketika eksekusi
flowdimulai,local0kosong. - Sistem menyiapkan masukan
input1untuk berdasarkan pemetaan masukan (step1InputMappingsstep1). Sumber pemetaan adalah masukaninput0dan variabel lokallocal0dariflow. - Sistem memanggil
step1untuk memuatinput1.step1mengembalikanoutput1.- Ketika sistem mulai mengeksekusi
step1,local10-nya kosong.step1adalah langkah paralel, sehingga setiap cabang sesuai dengan variabel lokal, menghindari akses bersamaan. - Sistem menyiapkan masukan
input2untukstep2berdasarkan pemetaan masukan (step2InputMappings). Sumber pemetaan adalah masukaninput1dan variabel lokallocal10daristep1. - Sistem memanggil
step2untuk memuatinput2.step2mengembalikanoutput2. - Sistem menyimpan keluaran
step2ke variabel lokallocal10daristep1. - Demikian pula, sistem memanggil
step3dan menyimpan hasilnya ke variabel lokallocal11daristep1.
- Ketika sistem mulai mengeksekusi
- Sistem menyimpan keluaran
step1ke variabel lokallocal0dariflow. - Demikian pula, sistem menyiapkan masukan
input4untukstep4. Sumber pemetaan adalah masukaninput0dan variabel lokallocal0dariflow.Catatan Pada titik ini, variabel lokallocal0mungkin berisi keluaranstep1. Ini mencapai transfer data antarastep1danstep4. - Sistem memanggil
step4untuk memuatinput4.step4mengembalikanoutput4. - Sistem menyimpan keluaran
step4ke variabel lokallocal0dariflow. - Akhirnya, sistem mengonversi
local0menjadi keluaran alur berdasarkan pemetaan keluaran alur.
Tipe
Baik pemetaan masukan maupun keluaran adalah array yang terdiri dari target dan source. source mendefinisikan sumber parameter dan diatur ke nilai yang berbeda untuk pemetaan yang berbeda. Sebagai contoh, $input.key menunjukkan bahwa sumber parameter adalah nilai dari $.key dalam input. target mendefinisikan nama parameter target. Jika nilai source dimulai dengan $, nilainya ditentukan dalam format jalur JSON (Anda dapat menggunakan JSONPath Online Evaluator untuk men-debug jalur JSON), dan sistem mengurai sumber menjadi nilai spesifik berdasarkan jalur tersebut. Jika tidak, nilai tersebut dianggap sebagai konstanta.
- Sumber
sourcedapat diatur ke konstanta, seperti nilai tipenumber,string,boolean,array,object, ataunull.Sumber dalam contoh berikut menggunakan konstanta dari berbagai tipe. Informasi berikut contoh menunjukkan keluaran.
outputMappings: - target: int_key source: 1 - target: bool_key source: true - target: string_key source: abc - target: float_key source: 1.234 - target: null_key source: null - target: array1 source: [1, 2, 3] - target: array2 source: - 1 - 2 - 3 - target: object1 source: {a: b} - target: object2 source: a:{ "array1": [1, 2, 3], "array2": [1, 2, 3], "bool_key": true, "float_key": 1.234, "int_key": 1, "null_key": null, "object1": { "a": "b" }, "object2": { "a": "b" }, "string_key": "abc" } - Target
Target hanya bisa berupa konstanta bertipe string.
Pemetaan Masukan
Pemetaan masukan mengonversi masukan ($input) dari langkah induk, variabel lokal ($local) dari langkah induk, atau konstanta menjadi masukan langkah anak. Jika pemetaan masukan tidak ditentukan, masukan dan variabel lokal langkah induk digabungkan dan digunakan sebagai masukan langkah anak. Jika masukan dan variabel lokal langkah induk memiliki nama yang sama, masukan baru menggunakan nama dan nilai dalam variabel lokal.
inputMappings:
- target: key1
source: $input.key1
- target: key2
source: $local.key2
- target: key3
source: literal
Masukan $input |
Variabel Lokal $local |
Pemetaan Masukan | Masukan Langkah Anak |
|
|
|
|
|
|
Tidak ada |
|
|
|
Tidak ada |
|
Pemetaan Keluaran
Pemetaan keluaran mengonversi masukan ($input) dari langkah saat ini, variabel lokal ($local) dari langkah saat ini, atau konstanta menjadi keluaran langkah ini. Jika pemetaan keluaran tidak ditentukan, langkah pilihan dan langkah foreach menggunakan variabel lokal mereka sebagai keluaran, sedangkan langkah tugas menggunakan hasil eksekusi tugas sebagai keluaran. Variabel lokal langkah paralel dan foreach adalah array. Oleh karena itu, Anda harus mendefinisikan pemetaan keluaran untuk mengonversi array menjadi objek JSON. Secara default, variabel lokal mereka tidak di-output. Untuk informasi lebih lanjut, lihat deskripsi langkah.
outputMappings:
- target: key1
source: $input.key1
- target: key2
source: $local.key2
- target: key3
source: literal
Masukan $input |
Variabel Lokal $local |
Pemetaan Keluaran | Keluaran Langkah |
|
|
|
|
|
|
|
|
|
|
Tidak ada |
|
Simpan Keluaran ke Variabel Lokal Langkah Induk
Keluaran langkah anak ($output) akan disimpan ke variabel lokal langkah induk. Jika mereka mengandung nama yang sama, nama dan nilai dalam keluaran akan menimpa nama dan nilai yang sesuai dalam variabel lokal.
Keluaran $output |
Variabel Lokal Langkah Induk $local |
Variabel Lokal Langkah Induk Setelah Modifikasi |
|
|
|
|
|
|