CloudFlow meneruskan data antar state dalam sebuah alur kerja. Setiap state menerima input dari state sebelumnya, lalu mengembalikan dan meneruskan output ke state berikutnya. Topik ini menjelaskan mekanisme input dan output dalam alur kerja.
Informasi latar belakang
Data dalam alur kerja CloudFlow mengalir dari satu state ke state lainnya, mirip dengan pemanggilan fungsi dalam pemrograman fungsional. Setiap state menerima input dan menghasilkan output. Data output disimpan dalam konteks, sehingga memungkinkan otomatisasi proses dalam aplikasi bisnis yang memerlukan logika kompleks.
Input dan output harus berupa objek JSON. Ukuran input dan output suatu state tidak boleh melebihi 64 KiB. Jika ukurannya melebihi batas tersebut, eksekusi alur akan gagal.
Input dan output eksekusi
Input eksekusi
Anda harus menyediakan informasi atau data untuk memulai eksekusi. Data tersebut dapat berfungsi sebagai input bagi satu atau beberapa state. Selama orkestrasi alur kerja, Anda dapat mengakses input eksekusi menggunakan ekspresi sistem $Context.Execution.Input.
Sebagai contoh, logika sistem pendaftaran mahasiswa online terdiri dari tiga proses: pengumpulan informasi mahasiswa, verifikasi informasi mahasiswa, dan pendaftaran mahasiswa. Informasi dasar mahasiswa diperlukan dalam setiap proses. Dalam kasus ini, Anda dapat meneruskan informasi dasar tersebut sebagai input eksekusi dan mengonfigurasi ketiga state terkait agar mengakses input tersebut melalui ekspresi sistem.
Di kotak dialog Execute Flow, atur Execution Name menjadi test. Pada bagian Execution Input, masukkan objek JSON berisi informasi dasar mahasiswa di editor JSON. Objek tersebut mencakup bidang seperti name, age, gender, country, city, occupation, hobbies (array), dan isActive (Boolean).
Output eksekusi
Output eksekusi adalah hasil dari eksekusi yang berhasil. Output ini tidak dapat diakses menggunakan variabel sistem selama orkestrasi alur kerja.
Input dan output state
Masukan suatu keadaan
Selama orkestrasi alur kerja, Anda dapat mengakses input state saat ini menggunakan ekspresi sistem $Context.Current.Input atau bentuk singkatnya $Input.
Keluaran keadaan
Selama orkestrasi alur kerja, Anda dapat mengakses output state saat ini menggunakan ekspresi sistem $Context.Current.Output atau bentuk singkatnya $Output. Perlu diperhatikan bahwa bentuk singkat $Output hanya dapat digunakan dalam cakupan konstruktor output.
Konstruktor
Ekspresi sistem yang dapat digunakan dalam konstruktor
Ekspresi sistem berikut dapat digunakan dalam konstruktor:
$Context: Siklus hidup $Context mencakup seluruh periode eksekusi alur kerja. Untuk informasi lebih lanjut tentang
$Context, lihat Data passing.$Input: Siklus hidup $Input dimulai saat alur kerja memasuki state dan berakhir saat alur kerja keluar dari state tersebut. $Input merupakan bentuk singkat dari
$Context.Current.Input.$Output: Siklus hidup $Output dimulai saat alur kerja memasuki state respons panggilan Task dan berakhir saat alur kerja keluar dari state tersebut. $Output merupakan bentuk singkat dari
$Context.Current.Output.$Global: Siklus hidup $Global mencakup seluruh periode eksekusi alur kerja. Untuk informasi lebih lanjut tentang
$Global, lihat Global variables.
Kunci yang diakhiri dengan
.$dalam konstruktor input, konstruktor output, atau konstruktor parameter harus diberi nilai dalam bentuk ekspresi. Jika tidak, terjadi error.Saat menggunakan fungsi bawaan atau variabel sistem yang diawali dengan
$, tambahkan.$di akhir kunci variabel untuk memastikan variabel tersebut tidak dianggap sebagai string.Konstruktor input atau output mendukung hingga
10tingkat penumpukan fungsi bawaan.
Gambar berikut menunjukkan siklus hidup ekspresi sistem $Input, $Output, $Context, dan $Global, serta proses penugasan dalam berbagai state.
$Inputadalah input eksekusi.Pada gambar sebelumnya,
$Input=InputConstructor($Context,$Global)menunjukkan bahwa dalam cakupan tersebut,InputConstructordapat merujuk ke$Contextdan$Globalserta mengekstraksi informasi darinya. Hasil konstruksi tersebut ditugaskan ke$Input.$Outputadalah hasil panggilan Task. Jika panggilan dilakukan dalam mode callback asinkron, nilai$Outputadalah hasil callback tersebut.$Output=OutputConstructor($Context,$Global)menunjukkan bahwa dalam cakupan tersebut,OutputConstructordapat merujuk ke$Contextdan$Globalserta mengekstraksi informasi darinya. Hasil konstruksi tersebut ditugaskan ke$output.$Globalmenunjukkan variabel global, yang dapat diakses sepanjang periode eksekusi alur kerja.$Global=Merge($Global,GlobalConstructor($Context,$Global))menunjukkan bahwa variabel yang dikonstruksi oleh konstruktor global digabungkan dengan variabel yang sudah ada di$Global, lalu semua variabel tersebut disimpan kembali di$Globaluntuk memperbarui variabel global bersama.$Contexttetap valid sepanjang eksekusi.
InputConstructor
InputConstructor mengonstruksi input alur kerja. Ekspresi InputConstructor berbeda dari ekspresi kondisional pada state Choice. Ekspresi kondisional hanya dapat mengembalikan Nilai Boolean, sedangkan ekspresi InputConstructor dapat mengembalikan nilai apa pun. Anda dapat menggunakan variabel sistem berikut dalam InputConstructor state:
$Context
$Input
$Global
Jika terdapat beberapa konfigurasi input, prioritas input berurutan menurun sebagai berikut: InputConstructor, ItemsPath, dan ItemConstructor.
Definisi mesin keadaan berikut memberikan contoh penggunaan 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
Pada contoh sebelumnya, struktur data
InputConstructoradalah Map[String]Any.FieldA.$: $Context.Execution.Inputmenunjukkan bahwa kunci FieldA secara dinamis mengambil nilai dari$Context.Execution.Inputalih-alih dianggap sebagai string.FieldB: Worldmenunjukkan bahwa string statis 'World' ditugaskan ke FieldB. Nilai tidak diambil secara dinamis karena kunci FieldB tidak diakhiri dengan penanda .$.FieldC.$: length($Context.Execution.Input)menunjukkan bahwa fungsi bawaan length digunakan untuk mengambil panjang nilai dalam$Context.Execution.Inputdan panjang tersebut ditugaskan ke FieldC. Untuk informasi tentang fungsi bawaan yang dapat digunakan dalam konstruktor, lihat Built-in functions.Ekspresi
FieldD.$: $Global.InvokeFunctionPayloadmengekstraksi nilai kunciInvokeFunctionPayloaddalam storage space global dan meneruskan nilai tersebut sebagai bidangFieldDke stateTask.
OutputConstructor
Dibandingkan dengan InputConstructor, OutputConstructor dieksekusi pada waktu yang berbeda dan mendukung lebih banyak variabel dalam ekspresi konteks. Misalnya, Anda hanya dapat menggunakan $Context atau $Input dalam konstruktor input, sedangkan dalam konstruktor output Anda dapat menggunakan $Output untuk merepresentasikan output karena panggilan Task telah menghasilkan output tersebut. Anda dapat menggunakan variabel sistem berikut dalam OutputConstructor state:
$Context
$Input
$Output
$Global
Definisi mesin keadaan berikut memberikan contoh penggunaan 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
Pada contoh sebelumnya, struktur data
OutputConstructoradalah map[string]any.functionResult.$secara dinamis mengambil output state,executionInput.$secara dinamis mengambil input eksekusi, danlastOutput.$secara dinamis mengambil input state.returnID.$mengambil ID unik, danfunctionResultStr.$mengambil string yang dibuat dari output state.