CloudFlow mengelola aliran data antar status dalam alur kerja. Setiap status menerima input dari status sebelumnya dan mengembalikan serta meneruskan output ke status berikutnya. Topik ini menjelaskan konsep input dan output dalam alur kerja.
Informasi latar belakang
Data dalam alur kerja CloudFlow mengalir dari satu status ke status lainnya, mirip dengan pemanggilan fungsi dalam pemrograman fungsional. Setiap status menerima input dan menghasilkan output. Data output disimpan dalam konteks untuk digunakan dalam otomatisasi proses bisnis yang memerlukan logika kompleks.
Input dan output harus berupa objek JSON. Ukuran input dan output setiap status tidak boleh melebihi 64 KiB. Jika ukuran input atau output melebihi batas tersebut, eksekusi alur akan gagal.
Input dan output eksekusi
Input eksekusi
Anda harus menyediakan informasi atau data untuk memulai eksekusi. Data ini dapat berfungsi sebagai input untuk satu atau lebih status. Anda dapat mengakses input eksekusi menggunakan ekspresi sistem $Context.Execution.Input selama orkestrasi alur kerja.
Sebagai contoh, logika sistem pendaftaran siswa online terdiri dari tiga proses: pengumpulan informasi siswa, verifikasi informasi siswa, dan pendaftaran siswa. Informasi dasar siswa diperlukan di setiap proses. Dalam hal ini, Anda dapat meneruskan informasi dasar siswa sebagai input eksekusi dan mengonfigurasi tiga status untuk mengakses input eksekusi menggunakan ekspresi sistem. Gambar berikut menunjukkan contoh input eksekusi.

Output eksekusi
Output eksekusi adalah hasil dari eksekusi yang berhasil. Anda tidak dapat mengakses output eksekusi menggunakan variabel sistem selama orkestrasi alur kerja.
Input dan output status
Input status
Selama orkestrasi alur kerja, Anda dapat menggunakan ekspresi sistem $Context.Current.Input atau bentuk singkatnya $Input untuk mengakses input status saat ini.
Output status
Selama orkestrasi alur kerja, Anda dapat menggunakan ekspresi sistem $Context.Current.Output atau bentuk singkatnya $Output untuk mengakses output status saat ini. Perhatikan bahwa bentuk singkat $Output hanya dapat digunakan dalam ruang lingkup konstruktor output.
Konstruktor
Ekspresi sistem yang dapat digunakan dalam konstruktor
Berikut adalah ekspresi sistem yang dapat digunakan dalam konstruktor:
$Context: Siklus hidup $Context sama dengan periode eksekusi keseluruhan alur kerja. Untuk informasi lebih lanjut tentang
$Context, lihat Pengalihan Data.$Input: Siklus hidup $Input dimulai ketika alur kerja memasuki status dan berakhir ketika alur kerja keluar dari status. $Input adalah bentuk singkat dari
$Context.Current.Input.$Output: Siklus hidup $Output dimulai ketika alur kerja memasuki status respons panggilan Tugas, dan berakhir ketika alur kerja keluar dari status. $Output adalah bentuk singkat dari
$Context.Current.Output.$Global: Siklus hidup $Global sama dengan periode eksekusi keseluruhan alur kerja. Untuk informasi lebih lanjut tentang
$Global, lihat Variabel Global.
Kunci yang diakhiri dengan
.$dalam konstruktor input, konstruktor output, atau konstruktor parameter harus diberi nilai dalam bentuk ekspresi. Jika tidak, akan terjadi kesalahan.Ketika menggunakan fungsi bawaan atau variabel sistem yang dimulai dengan
$, tambahkan.$di akhir kunci variabel untuk memastikan bahwa variabel tidak diperlakukan sebagai string.Konstruktor input atau output mendukung hingga
10lapisan sarang fungsi bawaan.
Gambar berikut menunjukkan siklus hidup ekspresi sistem $Input, $Output, $Context, dan $Global, serta proses penugasan dalam status yang berbeda.
$Inputadalah input eksekusi.Pada gambar di atas,
$Input=InputConstructor($Context,$Global)menunjukkan bahwa dalam ruang lingkup,InputConstructordapat merujuk pada$Contextdan$Globaldan mengekstrak informasi dari mereka. Hasil konstruksi ditugaskan ke$Input.$Outputadalah hasil dari panggilan Tugas. Jika panggilan dilakukan dalam mode panggilan balik asinkron, nilai$Outputadalah hasil dari panggilan balik.$Output=OutputConstructor($Context,$Global)menunjukkan bahwa dalam ruang lingkup,OutputConstructordapat merujuk pada$Contextdan$Globaldan mengekstrak informasi dari mereka. Hasil konstruksi ditugaskan ke$output.$Globalmenunjukkan variabel global, yang dapat diakses selama periode eksekusi alur kerja.$Global=Merge($Global,GlobalConstructor($Context,$Global))menunjukkan bahwa variabel yang dibangun oleh konstruktor global digabungkan dengan variabel yang ada di$Globaldan kemudian semua variabel disimpan di$Globaluntuk memperbarui variabel global bersama.$Contexttetap valid selama eksekusi.
InputConstructor
InputConstructor membangun input alur kerja. Ekspresi InputConstructor berbeda dari ekspresi kondisional dari status Choice. Ekspresi kondisional hanya dapat mengembalikan nilai Boolean, sedangkan ekspresi InputConstructor dapat mengembalikan nilai apa pun. Anda dapat menggunakan variabel sistem berikut dalam InputConstructor status:
$Context
$Input
$Global
Ketika beberapa konfigurasi input ada, prioritas input adalah sebagai berikut secara menurun: InputConstructor, ItemsPath, dan ItemConstructor.
Definisi mesin negara berikut memberikan contoh cara menggunakan 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
Dalam contoh di atas, struktur data
InputConstructoradalah Map[String]Any.FieldA.$: $Context.Execution.Inputmenunjukkan bahwa kunci FieldA secara dinamis mengambil nilai dari$Context.Execution.Inputbukan diperlakukan 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 Fungsi Bawaan.Ekspresi
FieldD.$: $Global.InvokeFunctionPayloadmengekstrak nilai dari kunciInvokeFunctionPayloaddalam ruang penyimpanan global dan meneruskan nilai tersebut sebagai bidangFieldDke statusTask.
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 Anda dapat menggunakan $Output dalam konstruktor output untuk mewakili output karena panggilan Tugas sudah menghasilkan output. Anda dapat menggunakan variabel sistem berikut dalam OutputConstructor status:
$Context
$Input
$Output
$Global
Definisi mesin negara berikut memberikan contoh cara menggunakan 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
Dalam contoh di atas, struktur data
OutputConstructoradalah map[string]any.functionResult.$secara dinamis mengambil output status,executionInput.$secara dinamis mengambil input eksekusi, danlastOutput.$secara dinamis mengambil input status.returnID.$mengambil ID unik, danfunctionResultStr.$mengambil string yang dibuat dari output status.