Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Status alur kerja pilihan
Mengelola status dan mengubah data
Pelajari tentang Melewati data antar status dengan variabel dan Mengubah data dengan Jsonata.
Sebuah Choice state ("Type": "Choice") menambahkan logika kondisional ke mesin state.
Selain sebagian besar bidang negara umum, Choice negara bagian berisi bidang tambahan berikut.
Choices(Wajib)-
Array Aturan Pilihan yang menentukan status mesin status yang akan ditransisikan ke berikutnya. Anda harus mendefinisikan setidaknya satu aturan di
Choicenegara bagian.Ketika
Choicestatus dijalankan, Step Functions mengevaluasi setiap Aturan Pilihan menjadi benar atau salah. Berdasarkan hasilnya, Step Functions bertransisi ke status berikutnya dalam alur kerja. Default(Opsional, Direkomendasikan)-
Nama negara untuk transisi ke jika tidak ada Aturan Pilihan dievaluasi menjadi benar.
penting
ChoiceNegara tidak mendukung End lapangan. Selain itu, status tersebut hanya menggunakan Next di dalam bidang Choicesnya.
Jika tidak ada Pilihan yang dievaluasi menjadi true saat alur kerja berjalan, dan tidak ada Default yang disediakan, mesin status akan memunculkan kesalahan karena kegagalan transisi keluar dari status.
Aturan Pilihan (Jsonata)
ChoiceNegara harus memiliki Choices bidang yang nilainya adalah larik Aturan Pilihan yang tidak kosong, yang berisi bidang berikut saat menggunakan Jsonata:
-
Conditionfield — ekspresi Jsonata yang mengevaluasi. true/false -
Nextfield — nilai yang harus cocok dengan nama negara bagian di mesin negara. -
Assignfield (Opsional) — menetapkan variabel ketika aturan pilihan khusus ini cocok. Setiap aturan pilihan dapat memilikiAssignbloknya sendiri, memungkinkan Anda untuk mengatur variabel yang berbeda tergantung pada jalur mana yang diambil. Anda juga dapat menentukanAssignblok di tingkat negara bagian, yang berlaku terlepas dari aturan pilihan mana yang cocok.
Contoh berikut memeriksa apakah nilai numerik sama dengan 1.
{
"Condition": "{% $foo = 1 %}",
"Next": "NumericMatchState"
}
Contoh berikut memeriksa apakah type variabel sama denganlocal.
{
"Condition": "{% $type = 'local' %}",
"Next": "StringMatchState"
}
Contoh berikut memeriksa apakah string lebih besar dengan MyStringABC.
{
"Condition": "{% $foo > 'MyStringABC' %}",
"Next": "StringGreaterMatchState"
}
Contoh berikut memeriksa apakah string tidak null.
{
"Condition" : "{% $possiblyNullValue != null and $possiblyNullValue = 42 %}",
"Next": "NotNullAnd42"
}
Contoh berikut menunjukkan Choice status dengan Assign blok per-aturan yang mengatur variabel yang berbeda berdasarkan kondisi yang cocok:
{
"Type": "Choice",
"Choices": [
{
"Condition": "{% $states.input.category = 'premium' %}",
"Next": "PremiumPath",
"Assign": {
"discount": 20
}
},
{
"Condition": "{% $states.input.category = 'standard' %}",
"Next": "StandardPath",
"Assign": {
"discount": 5
}
}
],
"Default": "DefaultPath",
"Assign": {
"discount": 0
}
}
Menggunakan Tetapkan dengan status Pilihan
Anda dapat menggunakan Assign bidang pada dua tingkat dalam status Pilihan:
-
Tingkat atas - Didefinisikan langsung dalam status Pilihan, di luar Aturan Pilihan apa pun.
-
Di dalam Aturan Pilihan - Didefinisikan dalam aturan individu dalam
Choicesarray.
Kedua penempatan ini saling eksklusif saat runtime. Jika Aturan Pilihan cocok, Step Functions hanya mengevaluasi Assign bidang aturan itu dan tidak mengevaluasi bidang tingkat atasAssign. Step Functions mengevaluasi tingkat atas Assign hanya jika tidak ada Aturan Pilihan yang cocok dan alur kerja bertransisi ke status. Default
Contoh berikut menunjukkan kedua penempatan.
{
"Type": "Choice",
"Assign": {
"outputValue": "{% 'default path taken' %}"
},
"Choices": [
{
"Condition": "{% $score > 90 %}",
"Assign": {
"outputValue": "{% 'high score' %}"
},
"Next": "HighScoreState"
},
{
"Condition": "{% $score > 50 %}",
"Next": "MediumScoreState"
}
],
"Default": "LowScoreState"
}
Dalam contoh ini, jika $score lebih besar dari 90, Step Functions menetapkan "high score" dan transisi outputValue ke. HighScoreState Tingkat atas tidak Assign dievaluasi. Jika tidak ada aturan yang cocok, Step Functions mengevaluasi tingkat atas Assign dan transisi ke. LowScoreState
Aturan Pilihan (JsonPath)
ChoiceNegara harus memiliki Choices bidang yang nilainya adalah larik Aturan Pilihan yang tidak kosong, yang berisi bidang berikut saat menggunakan JsonPath:
-
Perbandingan — Dua bidang yang menentukan variabel input untuk membandingkan tipe perbandingan, dan nilai untuk membandingkan variabel. Aturan Pilihan mendukung perbandingan antara dua variabel. Dalam Aturan Pilihan, nilai variabel dapat dibandingkan dengan nilai lain dari input status dengan menambahkan nama
Pathoperator perbandingan yang didukung. Nilai bidangVariabledan Path dalam perbandingan harus merupakan Jalur Referensi yang valid. -
Bidang
Next— Nilai bidang ini harus cocok dengan nama status di mesin status.
Contoh berikut memeriksa apakah nilai numerik sama dengan 1.
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
}
Contoh berikut memeriksa apakah string sama dengan MyString.
{
"Variable": "$.foo",
"StringEquals": "MyString",
"Next": "FirstMatchState"
}
Contoh berikut memeriksa apakah string lebih besar dengan MyStringABC.
{
"Variable": "$.foo",
"StringGreaterThan": "MyStringABC",
"Next": "FirstMatchState"
}
Contoh berikut memeriksa apakah string bernilai null.
{
"Variable": "$.possiblyNullValue",
"IsNull": true
}
Contoh berikut menunjukkan bagaimana StringEquals aturan hanya dievaluasi ketika $.keyThatMightNotExist ada karena Aturan Pilihan sebelumnyaIsPresent.
"And": [
{
"Variable": "$.keyThatMightNotExist",
"IsPresent": true
},
{
"Variable": "$.keyThatMightNotExist",
"StringEquals": "foo"
}
]
Contoh berikut memeriksa apakah pola dengan kecocokan wildcard.
{ "Variable": "$.foo", "StringMatches": "log-*.txt" }
Contoh berikut memeriksa apakah waktu stempel sama dengan 2001-01-01T12:00:00Z.
{
"Variable": "$.foo",
"TimestampEquals": "2001-01-01T12:00:00Z",
"Next": "FirstMatchState"
}
Contoh berikut membandingkan variabel dengan nilai lain dari input status.
{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }
Step Functions meneliti masing-masing Aturan Pilihan dalam urutan yang terdaftar di bidang Choices. Lalu bertransisi ke status yang ditentukan di bidang Next Aturan Pilihan pertama saat variabel cocok dengan nilai yang sesuai dengan operator perbandingan.
Operator perbandingan berikut didukung:
-
And -
BooleanEquals,BooleanEqualsPath -
IsBoolean -
IsNull -
IsNumeric -
IsPresent -
IsString -
IsTimestamp -
Not -
NumericEquals,NumericEqualsPath -
NumericGreaterThan,NumericGreaterThanPath -
NumericGreaterThanEquals,NumericGreaterThanEqualsPath -
NumericLessThan,NumericLessThanPath -
NumericLessThanEquals,NumericLessThanEqualsPath -
Or -
StringEquals,StringEqualsPath -
StringGreaterThan,StringGreaterThanPath -
StringGreaterThanEquals,StringGreaterThanEqualsPath -
StringLessThan,StringLessThanPath -
StringLessThanEquals,StringLessThanEqualsPath -
StringMatches -
TimestampEquals,TimestampEqualsPath -
TimestampGreaterThan,TimestampGreaterThanPath -
TimestampGreaterThanEquals,TimestampGreaterThanEqualsPath -
TimestampLessThan,TimestampLessThanPath -
TimestampLessThanEquals,TimestampLessThanEqualsPath
Untuk masing-masing operator ini, nilai yang sesuai harus dari tipe yang sesuai: string, nomor, Boolean, atau waktu stempel. Step Functions tidak mencoba untuk mencocokkan bidang numerik dengan nilai string. Namun, karena bidang waktu stempel secara logis adalah string, ada kemungkinan bahwa bidang yang dianggap sebagai stempel waktu dapat dicocokkan dengan pembanding StringEquals.
catatan
Untuk interoperabilitas, jangan berasumsi bahwa perbandingan numerik bekerja dengan nilai di luar magnitudo atau presisi yang diwakili tipe data binary64 754-2008 IEEE[-253+1,
253-1] mungkin gagal untuk membandingkan dengan cara yang diharapkan.
Stempel waktu (misalnya, 2016-08-18T17:33:00Z) harus sesuai dengan Profil RFC3339 ISO 8601
-
Huruf kapital
Tharus memisahkan bagian tanggal dan waktu. -
Huruf kapital
Zharus menunjukkan bahwa offset zona waktu numerik tidak ada.
Untuk memahami perilaku perbandingan string, lihat Dokumentasi compareTo Java
Nilai operator And dan Or harus berupa array non-kosong dari Aturan Pilihan yang tidak boleh berisi bidang Next. Demikian juga, nilai operator Not harus menjadi Aturan Pilihan tunggal yang tidak boleh mengandung bidang Next.
Anda dapat membuat Aturan Pilihan yang kompleks dan di-nest menggunakan And, Not, dan Or. Namun, bidang Next hanya dapat muncul di Aturan Pilihan tingkat atas.
Perbandingan string terhadap pola dengan satu atau lebih wildcard (“*”) dapat dilakukan dengan operator StringMatches perbandingan. Karakter wildcard dihilangkan menggunakan \\ (Ex: “\\*”) standar. Tidak ada karakter selain “*” yang memiliki arti khusus selama pencocokan.