Jalankan kode
Tindakan Jalankan kode mengeksekusi JavaScript. Anda dapat meneruskan data dari langkah-langkah sebelumnya di alur kerja sebagai input ke tindakan Jalankan kode, dan mengembalikan nilai untuk digunakan pada langkah-langkah berikutnya.
Di halaman ini
Bidang
Tindakan Jalankan kode berisi bidang-bidang berikut.
| Bidang | Deskripsi |
|---|---|
| Input | Wajib diisi. Kueri GraphQL untuk menggunakan data dari langkah-langkah sebelumnya sebagai input ke tindakan Jalankan kode. |
| Output | Wajib diisi. Representasi data yang akan dikembalikan oleh tindakan, yang ditentukan dalam bahasa definisi skema (SDL) GraphQL. |
| Kode | Wajib diisi. JavaScript yang akan dieksekusi oleh tindakan Jalankan kode. |
Data input
Data input dapat diteruskan dari langkah-langkah yang terjadi sebelum tindakan Jalankan kode. Untuk menyertakan data ini, Anda dapat menulis kueri GraphQL di kolom Input. Data yang dikembalikan dari kueri akan tersedia sebagai argumen input ke fungsi yang ditandai dengan export default, yang disebut main berdasarkan konvensi.
Kueri input adalah kueri untuk data lingkungan Flow, bukan kueri ke Shopify Admin API. Oleh karena itu, Anda tidak dapat menyisipkan kueri Shopify di data input. Selain itu, Flow menangani edges dan nodes dalam kueri, jadi Anda tidak perlu menambahkan itu atau sintaksis paging lainnya ke kueri Anda.
Contoh input yang mendapatkan catatan pesanan dan judul item baris:
{
order {
note
lineItems {
title
}
}
}Data ini dikonversi menjadi variabel input yang dapat digunakan dalam kode:
export default function main(input) {
// input.order.note
// input.order.lineItems[0].title
}Input juga dapat di-destrukturisasi dalam signature fungsi:
export default function main({order}) {
// order.note
// order.lineItems[0].title
}Metafield
Untuk mengakses nilai metafield tunggal di Jalankan kode, Anda harus terlebih dahulu menambahkan metafield tersebut ke data lingkungan Flow. Hal ini dapat dilakukan di tindakan atau kondisi apa pun selain Jalankan kode. Misalnya, Anda dapat menambahkan tindakan Output log lalu ikuti petunjuk untuk menambahkan metafield.
Setelah metafield ditambahkan ke lingkungan alur kerja, Anda dapat mengaksesnya di Jalankan kode. Misalnya, Anda menambahkan metafield Pesanan dengan nama alias giftMessage. Anda kemudian dapat mengaksesnya di kueri input Anda:
{
order {
giftMessage {
value
}
}
}Data output
Tindakan Jalankan kode dapat mengembalikan data kustom. Untuk mendefinisikan tipe data yang akan dikembalikan oleh kode, gunakan kolom Output dan Bahasa definisi Skema (SDL) GraphQL. Tipe output yang didukung adalah String, Int, Float, Boolean, dan ID, yang mengikuti spesifikasi SDL tentang cara menentukan kolom yang wajib diisi, daftar, dan data kustom.
Misalnya, untuk mengembalikan string bernama giftMessage dan angka bernama totalGifts:
type Output {
"The message to include in the gift"
giftMessage: String!
"The total number of gifts"
totalGifts: Int!
}Komentar bersifat opsional, tetapi akan digunakan untuk mendeskripsikan data di UI Flow. Untuk menampilkan data ini di kode JavaScript, kembalikan objek yang cocok dengan tipe:
export default function main(input) {
// your code
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}Anda juga dapat mendefinisikan tipe kustom untuk mengembalikan data yang lebih kompleks. Misalnya, untuk mengembalikan tipe bernama Gift yang berisi string bernama message dan angka bernama amount:
type Output {
"The gift to send"
gifts: [Gift!]!
}
type Gift {
"The message to include in the gift"
message: String!
"The total number of gifts"
amount: Int!
}Untuk mengakses data ini di langkah-langkah setelah tindakan ini, gunakan variabel bernama Jalankan kode, yang akan diketik sesuai dengan skema Output yang Anda tentukan di konfigurasi tindakan Jalankan kode. Anda dapat menggunakan variabel ini dalam kondisi maupun tindakan.
Console.log
Anda dapat menggunakan console.log untuk menampilkan data ke log eksekusi alur kerja Flow untuk tujuan penyelesaian masalah. Output akan terlihat di log Eksekusi untuk alur kerja. Misalnya, berikut ini valid:
export default function main(input) {
console.log('Hello, world!');
//Hello, world!
console.log(input);
// { order: { note: 'Hello', lineItems: [ { title: 'World' } ] } }
console.log(input.order, 'is the order');
// { note: 'Hello', lineItems: [ { title: 'World' } ] }
// is the order
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}Anda tidak dapat menggunakan console.info, console.error, atau fungsi lainnya dalam tindakan Jalankan kode.
Contoh
Contoh untuk tindakan kode dapat ditemukan di repositori contoh Flow.
Batasan
Tindakan Jalankan kode memiliki batasan berikut:
- Tindakan Jalankan kode mendukung JavaScript ECMA2020. Tindakan ini tidak mendukung API NodeJS atau CommonJS, atau mengimpor modul.
- Kode Anda tidak dapat membuat panggilan HTTP (
fetch). - Fungsi acak dan berbasis jam tidak dapat digunakan. Data tanggal, seperti
scheduledAtataucreatedAt, dapat diteruskan sebagai input. - `Console.log` tidak melakukan log ke konsol browser.
- Untuk menghemat ukuran payload, payload data output hanya mengembalikan variabel yang digunakan dalam langkah-langkah selanjutnya.
- Anda tidak dapat menambahkan alias metafield secara langsung di tindakan Jalankan kode. Untuk melakukannya, tinjau bagian Metafield di halaman ini.
Selain itu, batas berikut diberlakukan:
- Kueri data input dibatasi hingga 5.000 karakter.
- Skema data output dibatasi hingga 5.000 karakter.
- Payload data output dan output Console.log dibatasi gabungan 50 KB.
- Panjang kode tidak boleh lebih dari 50.000 karakter.
- Total durasi eksekusi dibatasi hingga 5 detik.
- Penggunaan memori dibatasi hingga 10 MB.
Templat
Tambahkan item gratis (diskon 100%) ke pesanan baru
Templat ini menambahkan item gratis yang didiskon ke pesanan baru saat item tersebut tersedia. Templat ini memeriksa inventaris, menerapkan diskon 100%, dan memperbarui pesanan tanpa memberi tahu pelanggan. Alur kerja ini dapat membantu menambahkan otomatisasi pada skenario berikut:
- Meningkatkan kepuasan pelanggan dengan menyertakan item gratis kejutan dalam pesanan mereka.
- Mempromosikan produk baru atau yang kurang dikenal dengan menambahkannya sebagai sampel gratis dalam pesanan.
- Menyederhanakan promosi dengan mengotomatiskan penyertaan dan pemberian diskon item gratis.
Batalkan pengembalian yang tidak aktif
Membatalkan pengembalian secara otomatis yang belum dikembalikan dananya atau distok ulang dalam jangka waktu tertentu. Lihat templat
Konversi tag dengan prefiks ke metafield produk menggunakan tindakan Jalankan kode
Alur kerja ini akan mengambil tag yang diawali dengan prefiks seperti 'color:' dan menambahkannya ke daftar metafield produk. Alur kerja ini menggunakan tindakan Jalankan kode untuk mengurai tag dan item yang ada di daftar metafield. Alur kerja berjalan saat produk dibuat, tetapi dapat dijalankan secara manual pada produk yang sudah ada. Lihat templat
Kirim notifikasi saat pelanggan memesan beberapa varian produk
Terima notifikasi email saat pelanggan memesan beberapa varian dari produk yang sama. Lihat templat
Kirim notifikasi saat pesanan berisi paket
Alur kerja ini dimulai saat pesanan dibuat dan memeriksa apakah ada produk dalam pesanan yang dibeli sebagai bagian dari paket. Jika ditemukan, email internal akan dikirim dengan detail paket. Selain itu, Anda dapat menggunakan alur kerja ini sebagai titik awal untuk kasus penggunaan apa pun yang perlu mendeteksi keberadaan paket dalam pesanan. Lihat templat
Beri tag pada pesanan dengan kampanye UTM terkait
Menambahkan tag ke pesanan yang berisi nama kampanye UTM terkait. Lihat templat