全部产品
Search
文档中心

CloudFlow:Input dan Output

更新时间:Jul 02, 2025

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.

Catatan

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.

image

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.

Penting
  • 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 10 lapisan sarang fungsi bawaan.

Gambar berikut menunjukkan siklus hidup ekspresi sistem $Input, $Output, $Context, dan $Global, serta proses penugasan dalam status yang berbeda.

  • $Input adalah input eksekusi.

  • Pada gambar di atas, $Input=InputConstructor($Context,$Global) menunjukkan bahwa dalam ruang lingkup, InputConstructor dapat merujuk pada $Context dan $Global dan mengekstrak informasi dari mereka. Hasil konstruksi ditugaskan ke $Input.

  • $Output adalah hasil dari panggilan Tugas. Jika panggilan dilakukan dalam mode panggilan balik asinkron, nilai $Output adalah hasil dari panggilan balik.

  • $Output=OutputConstructor($Context,$Global) menunjukkan bahwa dalam ruang lingkup, OutputConstructor dapat merujuk pada $Context dan $Global dan mengekstrak informasi dari mereka. Hasil konstruksi ditugaskan ke $output.

  • $Global menunjukkan 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 $Global dan kemudian semua variabel disimpan di $Global untuk memperbarui variabel global bersama.

  • $Context tetap 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

Penting

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 InputConstructor adalah Map[String]Any.

  • FieldA.$: $Context.Execution.Input menunjukkan bahwa kunci FieldA secara dinamis mengambil nilai dari $Context.Execution.Input bukan diperlakukan sebagai string.

  • FieldB: World menunjukkan 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.Input dan panjang tersebut ditugaskan ke FieldC. Untuk informasi tentang fungsi bawaan yang dapat digunakan dalam konstruktor, lihat Fungsi Bawaan.

  • Ekspresi FieldD.$: $Global.InvokeFunctionPayload mengekstrak nilai dari kunci InvokeFunctionPayload dalam ruang penyimpanan global dan meneruskan nilai tersebut sebagai bidang FieldD ke status Task.

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 OutputConstructor adalah map[string]any.

  • functionResult.$ secara dinamis mengambil output status, executionInput.$ secara dinamis mengambil input eksekusi, dan lastOutput.$ secara dinamis mengambil input status.

  • returnID.$ mengambil ID unik, dan functionResultStr.$ mengambil string yang dibuat dari output status.