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.

Bidang

Tindakan Jalankan kode berisi bidang-bidang berikut.

Bidang yang digunakan dalam tindakan Jalankan kode.
BidangDeskripsi
InputWajib diisi. Kueri GraphQL untuk menggunakan data dari langkah-langkah sebelumnya sebagai input ke tindakan Jalankan kode.
OutputWajib diisi. Representasi data yang akan dikembalikan oleh tindakan, yang ditentukan dalam bahasa definisi skema (SDL) GraphQL.
KodeWajib 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 scheduledAt atau createdAt, 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.

Lihat templat

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