เรียกใช้โค้ด

การดำเนินการรันโค้ดจะประมวลผล JavaScript คุณสามารถส่งข้อมูลจากขั้นตอนก่อนหน้านี้ในขั้นตอนการทำงานเป็นอินพุตไปยังการดำเนินการรันโค้ด และส่งคืนค่าที่จะใช้ในขั้นตอนถัดไปได้

ช่อง

การดำเนินการเรียกใช้โค้ดจะมีฟิลด์ดังต่อไปนี้

ช่องที่ใช้ในการดำเนินการรันโค้ด
ช่อง คำอธิบาย
อินพุต ต้องระบุ คิวรี GraphQL เพื่อใช้ข้อมูลจากขั้นตอนก่อนหน้าเป็นอินพุตไปยังการดำเนินการรันโค้ด
เอาท์พุต ต้องระบุ การแสดงข้อมูลที่จะส่งคืนตามการดำเนินการ ซึ่งกําหนดไว้ในภาษากำหนดสคีมา (SDL) ของ GraphQL
รหัส ต้องระบุ JavaScript ที่การดำเนินการรันโค้ดจะประมวลผล

ข้อมูลอินพุต

คุณสามารถส่งข้อมูลอินพุตได้จากขั้นตอนที่เกิดขึ้นก่อนการดำเนินการรันโค้ด หากต้องการรวมข้อมูลนี้ คุณสามารถเขียนคิวรี GraphQL ในช่องอินพุตได้ ข้อมูลที่ส่งคืนจากคิวรีจะพร้อมใช้งานเป็นอาร์กิวเมนต์ input กับฟังก์ชันที่ทำเครื่องหมาย export default คุณไม่จำเป็นต้องจัดการการจัดหน้าหรือใช้ edges และ nodes ในคิวรี เนื่องจาก Flow จะจัดการให้คุณ

ตัวอย่างการอินพุตที่ได้รับหมายเหตุคำสั่งซื้อและชื่อของสินค้าเฉพาะรายการ มีลักษณะดังนี้

{
  order {
    note
    lineItems {
      title
    }
  }
}

ข้อมูลนี้จะถูกแปลงเป็นตัวแปร input ที่สามารถใช้ในโค้ดได้ ดังนี้

export default function main(input) {
  // input.order.note
  // input.order.lineItems[0].title
}

อินพุตสามารถลดโครงสร้างใน Function Signature ได้ ดังนี้

export default function main({order}) {
  // order.note
  // order.lineItems[0].title
}

ข้อมูลเอาท์พุต

การดำเนินการรันโค้ดสามารถส่งคืนข้อมูลแบบกำหนดเองได้ หากต้องการกําหนดประเภทของข้อมูลที่โค้ดจะส่งคืน ให้ใช้ช่องเอาท์พุตและภาษากำหนดสคีมา (SDL) ของ GraphQL ตัวอย่างเช่น หากต้องการส่งคืนสตริงที่ชื่อ giftMessage และตัวเลขที่ชื่อ totalGifts ให้ดำเนินการดังนี้

type Output {
  "The message to include in the gift"
  giftMessage: String!
  "The total number of gifts"
  totalGifts: Int!
}

ความคิดเห็นเป็นส่วนที่ไม่บังคับ แต่จะถูกนำไปใช้เพื่ออธิบายข้อมูลใน UI Flow หากต้องการเอาท์พุตข้อมูลนี้ในโค้ด JavaScript ให้ส่งคืนออบเจ็กต์ที่ตรงกับประเภท ให้ดำเนินการดังนี้

export default function main(input) {
  // your code
  return {
    giftMessage: 'Hello',
    totalGifts: 1,
  };
}

นอกจากนี้คุณยังสามารถกําหนดประเภทแบบกําหนดเองเพื่อส่งคืนข้อมูลที่ซับซ้อนมากขึ้นได้ ตัวอย่างเช่น หากต้องการส่งคืนประเภทที่ชื่อ Gift ซึ่งมีสตริงที่ชื่อ message และหมายเลขที่ชื่อ 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!
}

หากต้องการเข้าถึงข้อมูลนี้ตามขั้นตอนการดำเนินการข้างต้น ให้ใช้ตัวแปรที่มีชื่อว่า Run code ซึ่งจะจัดประเภทตามสคีมา Output ที่คุณกําหนดในการกำหนดค่าการดำเนินการรันโค้ด โดยคุณสามารถใช้ตัวแปรนี้ได้ทั้งในเงื่อนไขและการดำเนินการ

ตัวอย่าง

สามารถดูตัวอย่างการดำเนินการเรียกใช้งานโค้ดได้ที่พื้นที่จัดเก็บตัวอย่าง Flow

ข้อจำกัด

การดำเนินการรันโค้ดมีข้อจํากัดดังต่อไปนี้

  • โค้ดของคุณไม่สามารถนําเข้าโมดูลได้
  • โค้ดของคุณไม่สามารถดำเนินการเรียก http (fetch) ได้
  • โค้ดของคุณไม่สามารถใช้ console.log ได้
  • ไม่สามารถใช้ฟังก์ชันแบบสุ่มและฟังก์ชันตามเวลาได้ ส่วนข้อมูลวันที่ เช่น scheduledAt หรือ createdAt สามารถส่งผ่านในรูปแบบอินพุตได้

นอกจากนี้ยังมีการบังคับใช้ขีดจํากัดต่อไปนี้ด้วย

  • จํากัดคำค้นหาข้อมูลอินพุตไม่เกิน 5,000 อักขระ
  • จํากัดสคีมาข้อมูลเอาท์พุตไม่เกิน 5,000 อักขระ
  • จํากัดเพย์โหลดข้อมูลเอาท์พุตไม่เกิน 50kb
  • โค้ดต้องมีความยาวไม่เกิน 50,000 อักขระ
  • จำกัดระยะเวลาการเรียกใช้งานทั้งหมดไม่เกิน 5 วินาที
  • จำกัดการใช้หน่วยความจําไม่เกิน 10MB

แผนงาน

ทีม Flow วางแผนที่จะทยอยเพิ่มคุณสมบัติการดำเนินการรันโค้ด โดยตารางต่อไปนี้สรุปการปรับปรุงที่วางแผนไว้และวันที่คาดว่าจะดำเนินการเสร็จสิ้น

แผนงานการปรับปรุงการดำเนินการรันโค้ด
การปรับปรุง คำอธิบาย ระยะเวลาจัดส่งโดยประมาณ
แก้ไขจุดบกพร่อง การแก้ไขจุดบกพร่องและการล้างข้อมูล กุมภาพันธ์ 2024
การบันทึกข้อมูล ใช้ `console.log` เพื่อเอาท์พุตข้อมูลไปยังบันทึก Run เพื่อวัตถุประสงค์ในการแก้ไขปัญหา ต้นเดือนเมษายน 2024
การเรียก API ภายนอก ใช้การดึงข้อมูลของ JavaScript เพื่อเรียก API ไตรมาสที่ 3 ปี 2024

ความคิดเห็น

การดำเนินการรันโค้ดเป็นขั้นตอนประเภทใหม่ใน Shopify Flow หากคุณมีความคิดเห็นและข้อสงสัย โปรดแสดงความคิดเห็นบนโพสต์ชุมชน Flow นี้

พร้อมเริ่มต้นการขายด้วย Shopify แล้วหรือยัง

ทดลองใช้งานฟรี