Loop
Workflow: Node LoopCommunity Edition+Pengantar
Loop setara dengan struktur sintaks for/while/forEach dalam bahasa pemrograman. Saat perlu mengulang eksekusi beberapa operasi sebanyak jumlah tertentu atau terhadap koleksi data tertentu (array), Anda dapat menggunakan Node Loop.
Instalasi
Plugin bawaan, tidak perlu instalasi.
Membuat Node
Pada antarmuka konfigurasi workflow, klik tombol plus ("+") pada alur untuk menambahkan Node "Loop":

Setelah Node Loop dibuat, akan dihasilkan sebuah cabang internal Loop. Anda dapat menambahkan Node sebanyak yang diinginkan ke dalam cabang. Selain dapat menggunakan variable konteks alur, Node-Node ini juga dapat menggunakan variable lokal dari konteks Loop, misalnya objek data setiap iterasi pada koleksi Loop, atau index jumlah Loop (index dimulai dari 0). Scope variable lokal terbatas hanya pada bagian dalam Loop. Jika ada beberapa Loop yang nested, dapat menggunakan variable lokal dari Loop spesifik per layer.
Konfigurasi Node

Objek Loop
Loop akan melakukan pemrosesan yang berbeda berdasarkan tipe data objek Loop yang berbeda:
-
Array: kasus paling umum, biasanya dapat memilih variable konteks alur, seperti hasil multi-data dari Node Query, atau data relasi to-many yang di-pre-load. Jika yang dipilih adalah array, Node Loop akan iterasi setiap elemen dalam array, setiap kali iterasi akan meng-assign elemen saat ini ke variable lokal konteks Loop.
-
Angka: saat variable yang dipilih adalah angka, akan menggunakan angka tersebut sebagai jumlah Loop. Value angka hanya mendukung integer positif, angka negatif tidak akan masuk ke Loop, bagian desimal akan diabaikan. Index jumlah Loop pada variable lokal juga merupakan value objek Loop. Value tersebut dimulai dari 0, misalnya saat angka objek Loop adalah 5, objek dan index pada setiap iterasi berturut-turut adalah: 0, 1, 2, 3, 4.
-
String: saat variable yang dipilih adalah string, akan menggunakan panjang string tersebut sebagai jumlah Loop, setiap iterasi akan memproses setiap karakter dalam string berdasarkan index.
-
Lainnya: tipe value lainnya (termasuk tipe object) hanya akan diperlakukan sebagai objek Loop pemrosesan tunggal, dan hanya akan dilakukan Loop sekali. Biasanya kasus ini tidak perlu menggunakan Loop.
Selain memilih variable, untuk tipe angka dan string juga dapat langsung memasukkan konstanta. Misalnya memasukkan 5 (tipe angka), Node Loop akan loop sebanyak 5 kali. Memasukkan abc (tipe string), Node Loop akan loop sebanyak 3 kali, masing-masing memproses 3 karakter a, b, c. Pilih tipe yang ingin Anda gunakan sebagai konstanta pada tool pemilihan variable.
Kondisi Loop
Sejak versi v1.4.0-beta, ditambahkan opsi terkait kondisi Loop. Anda dapat mengaktifkan kondisi Loop pada konfigurasi Node.
Kondisi
Mirip dengan konfigurasi kondisi pada Node Kondisi, dapat dikombinasikan dan dikonfigurasi, dan dapat menggunakan variable dalam Loop saat ini, seperti objek Loop, index Loop, dll.
Waktu Pemeriksaan
Mirip dengan while dan do/while pada bahasa pemrograman. Dapat dipilih untuk dilakukan komputasi kondisi yang dikonfigurasi sebelum memulai setiap Loop, atau setelah setiap Loop berakhir. Komputasi kondisi setelah dapat mengeksekusi Node lain di dalam body Loop terlebih dahulu satu putaran, baru kemudian melakukan evaluasi kondisi.
Saat Kondisi Tidak Terpenuhi
Mirip dengan statement break dan continue pada bahasa pemrograman, dapat dipilih untuk keluar dari Loop, atau melanjutkan Loop ke iterasi berikutnya.
Penanganan Saat Node Internal Loop Error
Sejak versi v1.4.0-beta, saat eksekusi Node internal Loop gagal (kondisi tidak terpenuhi konfigurasi, error, dll.), dapat dikonfigurasi untuk menentukan arah selanjutnya. Mendukung tiga cara penanganan:
- Keluar dari alur (
throwdalam pemrograman) - Keluar dari Loop dan lanjutkan alur (
breakdalam pemrograman) - Lanjutkan ke objek Loop berikutnya (
continuedalam pemrograman)
Default adalah "Keluar dari alur", dapat dipilih sesuai kebutuhan.
Environment Variable
WORKFLOW_LOOP_LIMIT
Digunakan oleh role ops untuk membatasi jumlah maksimum Loop pada Node Loop, mencegah masalah infinite loop akibat kesalahan konfigurasi. Default tidak dibatasi, dapat dikonfigurasi melalui environment variable ini.
Jika value batasan diatur, saat eksekusi Node Loop melebihi jumlah tersebut, akan langsung melaporkan error dan keluar dari alur. Dan pada hasil Node akan berisi informasi exceeded, dengan value true.
Contoh
Misalnya saat order pesanan, perlu dilakukan pengecekan stok untuk setiap produk dalam pesanan. Jika stok mencukupi maka kurangi stok, jika tidak maka update produk dalam detail pesanan menjadi tidak valid.
-
Buat tiga tabel, tabel produk <-(1:m)-- tabel detail pesanan --(m:1)-> tabel pesanan, dengan model data sebagai berikut:
-
Buat workflow, trigger pilih "Event Tabel Data", pilih tabel "Pesanan" "Saat menambah data" untuk trigger, dan perlu dikonfigurasi pre-load data relasi tabel "Detail Pesanan" dan tabel produk di bawah detail:

-
Buat Node Loop, pilih objek Loop sebagai "Data Trigger / Detail Pesanan", yaitu untuk setiap record pada tabel detail pesanan:

-
Pada bagian dalam Node Loop buat sebuah Node "Kondisi", untuk mengevaluasi apakah stok produk mencukupi:

-
Jika mencukupi, pada cabang "Ya" buat sebuah "Node Komputasi" dan sebuah Node "Update Data", untuk meng-update stok yang sudah dikurangi ke record produk yang sesuai:


-
Sebaliknya, pada cabang "Tidak" buat sebuah Node "Update Data", update status detail pesanan menjadi "tidak valid":

Struktur alur secara keseluruhan adalah sebagai berikut:

Setelah konfigurasi selesai dan alur diaktifkan, ketika membuat pesanan baru, akan secara otomatis memeriksa stok produk pada detail pesanan. Jika stok mencukupi maka stok akan dikurangi, jika tidak produk dalam detail pesanan akan diupdate menjadi tidak valid (untuk menghitung total harga pesanan yang valid).

