Jalankan kod
Tindakan Jalankan kod melaksanakan JavaScript. Anda boleh menghantar data daripada langkah sebelumnya dalam aliran kerja sebagai input ke tindakan Jalankan kod dan memulangkan nilai untuk digunakan dalam langkah yang seterusnya.
Pada halaman ini
Medan
Tindakan Jalankan kod mengandungi medan yang berikut.
| Medan | Penerangan |
|---|---|
| Input | Diperlukan. Pertanyaan GraphQL untuk menggunakan data daripada langkah sebelumnya sebagai input kepada tindakan Jalankan kod. |
| Output | Diperlukan. Perwakilan data yang akan dipulangkan oleh tindakan, ditakrifkan dalam bahasa takrifan skema (SDL) GraphQL. |
| Kod | Diperlukan. JavaScript yang akan dilaksanakan oleh tindakan Jalankan kod. |
Data input
Data input boleh dihantar daripada langkah yang berlaku sebelum tindakan Jalankan kod. Untuk menyertakan data ini, anda boleh menulis pertanyaan GraphQL dalam medan Input. Data yang dipulangkan daripada pertanyaan akan tersedia sebagai argumen input kepada fungsi yang ditandakan dengan export default, yang secara konvensionalnya dipanggil main.
Pertanyaan input ialah pertanyaan untuk data persekitaran Flow, bukan pertanyaan pada Shopify Admin API. Oleh itu, anda tidak boleh memasukkan pertanyaan Shopify dalam data input. Selain itu, Flow mengendalikan edges dan nodes dalam pertanyaan, oleh sebab itu anda tidak perlu menambahkan sintaks tersebut atau sintaks penentuan halaman yang lain ke pertanyaan anda.
Contoh input yang mendapatkan nota pesanan dan tajuk item baris:
{
order {
note
lineItems {
title
}
}
}Data ini ditukar kepada pemboleh ubah input yang boleh digunakan dalam kod:
export default function main(input) {
// input.order.note
// input.order.lineItems[0].title
}Input juga boleh dinyahstrukturkan dalam tandatangan fungsi:
export default function main({order}) {
// order.note
// order.lineItems[0].title
}Medan meta
Untuk mengakses nilai medan meta tunggal dalam Jalankan kod, anda mesti menambahkan medan meta pada data persekitaran Flow terlebih dahulu. Ini boleh dilakukan dalam sebarang tindakan atau syarat selain Jalankan kod. Contohnya, anda boleh menambah tindakan Log output dan kemudian ikut arahan untuk menambah medan meta.
Selepas medan meta ditambahkan pada persekitaran aliran kerja, anda boleh mengaksesnya dalam Jalankan kod. Contohnya, katakan anda menambah medan meta Pesanan dengan nama alias giftMessage. Anda kemudiannya boleh mengaksesnya dalam pertanyaan input anda:
{
order {
giftMessage {
value
}
}
}Data output
Tindakan Jalankan kod boleh mengembalikan data tersuai. Untuk mentakrifkan jenis data yang akan dikembalikan oleh kod tersebut, gunakan medan Output dan Bahasa definisi skema (SDL) GraphQL. Jenis output yang disokong ialah String, Int, Float, Boolean dan ID, yang mengikuti spesifikasi SDL tentang cara menentukan medan, senarai dan data tersuai yang diperlukan.
Contohnya, untuk mengembalikan rentetan yang dipanggil giftMessage dan nombor yang dipanggil totalGifts:
type Output {
"The message to include in the gift"
giftMessage: String!
"The total number of gifts"
totalGifts: Int!
}Komen adalah pilihan, tetapi akan digunakan untuk menerangkan data dalam UI Flow. Untuk mengeluarkan data ini dalam kod JavaScript, kembalikan objek yang sepadan dengan jenis tersebut:
export default function main(input) {
// your code
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}Anda juga boleh mentakrifkan jenis tersuai untuk mengembalikan data yang lebih kompleks. Contohnya, untuk mengembalikan jenis yang dipanggil Gift yang mengandungi rentetan bernama message dan nombor 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 dalam langkah yang mengikuti tindakan ini, gunakan pemboleh ubah bernama Jalankan kod, yang ditentukan jenisnya berdasarkan skema Output yang anda takrifkan dalam konfigurasi tindakan Jalankan kod. Anda boleh menggunakan pemboleh ubah ini dalam kedua-dua syarat dan tindakan.
Console.log
Anda boleh menggunakan console.log untuk mengeluarkan data kepada log jalankan aliran kerja Flow untuk tujuan penyelesaian masalah. Output akan kelihatan dalam log Jalankan untuk aliran kerja tersebut. Contohnya yang berikut adalah sah:
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 boleh menggunakan console.info, console.error atau fungsi lain dalam tindakan Jalankan kod.
Contoh
Contoh untuk tindakan kod boleh didapati dalam repositori contoh Flow.
Pengehadan
Tindakan Jalankan kod mempunyai pengehadan yang berikut:
- Tindakan Jalankan kod menyokong JavaScript ECMA2020. Tindakan ini tidak menyokong API NodeJS atau CommonJS, atau pengimportan modul.
- Kod anda tidak boleh membuat panggilan HTTP (
fetch). - Fungsi rawak dan berasaskan jam tidak boleh digunakan. Data tarikh, seperti
scheduledAtataucreatedAt, boleh disalurkan sebagai input. - Console.log tidak melog kepada konsol pelayar.
- Untuk menjimatkan saiz muatan, muatan data output hanya mengembalikan pemboleh ubah yang digunakan dalam langkah hiliran.
- Anda tidak boleh menambahkan alias medan meta secara langsung dalam tindakan Jalankan kod. Untuk berbuat demikian, semak bahagian Medan meta pada halaman ini.
Selain itu, had berikut dikuatkuasakan:
- Pertanyaan data input dihadkan kepada 5000 aksara.
- Skema data output dihadkan kepada 5000 aksara.
- Muatan data output dan output Console.log dihadkan kepada gabungan 50 KB.
- Kod tidak boleh melebihi 50000 aksara.
- Jumlah tempoh pelaksanaan dihadkan kepada 5 saat.
- Penggunaan memori dihadkan kepada 10 MB.
Templat
Tambahkan item percuma (diskaun 100%) pada pesanan baharu
Templat ini menambahkan item percuma dan berdiskaun pada pesanan baharu apabila item tersebut ada dalam stok. Ini menyemak inventori, mengenakan diskaun 100% dan mengemas kini pesanan tanpa memberitahu pelanggan. Aliran kerja ini dapat membantu menambah automasi pada senario yang berikut:
- Meningkatkan kepuasan pelanggan dengan menyertakan item percuma kejutan dalam pesanan mereka.
- Mempromosikan produk baharu atau yang kurang diketahui dengan menambahkannya sebagai sampel percuma dalam pesanan.
- Memperkemas promosi dengan mengautomasikan penyertaan dan pendiskaunan item percuma.
Batalkan pemulangan tidak aktif
Membatalkan pemulangan secara automatik yang belum dibayar balik atau distokkan semula dalam tempoh masa tertentu. Lihat templat
Tukar tag yang berawalan kepada medan meta produk menggunakan tindakan Jalankan kod
Aliran kerja ini akan mengambil tag yang bermula dengan awalan seperti 'color:' dan menambahkannya pada senarai medan meta produk. Ini menggunakan tindakan Jalankan kod untuk menghuraikan tag dan item sedia ada dalam senarai medan meta. Aliran kerja ini berjalan apabila produk dicipta, tetapi boleh dijalankan secara manual pada produk sedia ada. Lihat templat
Hantar pemberitahuan apabila pelanggan memesan berbilang varian bagi suatu produk
Terima pemberitahuan e-mel apabila pelanggan memesan berbilang varian bagi produk yang sama. Lihat templat
Hantar pemberitahuan apabila pesanan mengandungi berkas
Aliran kerja ini bermula apabila pesanan dicipta dan menyemak sama ada mana-mana produk dalam pesanan telah dibeli sebagai sebahagian daripada berkas. Jika ditemukan, e-mel dalaman akan dihantar dengan butiran berkas. Selain itu, anda boleh menggunakan aliran kerja ini sebagai titik mula untuk sebarang kes penggunaan yang perlu mengesan kehadiran berkas dalam suatu pesanan. Lihat templat
Tag pesanan dengan kempen UTM yang berkaitan
Menambahkan tag pada pesanan yang mengandungi nama mana-mana kempen UTM yang berkaitan. Lihat templat