Chạy mã
Hành động Chạy mã thực thi mã JavaScript. Bạn có thể truyền dữ liệu từ các bước trước đó trong dòng công việc làm đầu vào cho hành động Chạy mã, và trả về các giá trị để sử dụng ở những bước tiếp theo.
Trên trang này
Trường
Hành động Chạy mã có các trường sau.
| Trường | Mô tả |
|---|---|
| Đầu vào | Bắt buộc. Truy vấn GraphQL để sử dụng dữ liệu từ các bước trước đó làm đầu vào cho hành động Chạy mã. |
| Đầu ra | Bắt buộc. Bản trình bày dữ liệu sẽ được hành động trả về, được xác định bằng ngôn ngữ định nghĩa lược đồ (SDL) của GraphQL. |
| Mã | Bắt buộc. Mã JavaScript mà hành động Chạy mã sẽ thực thi. |
Dữ liệu đầu vào
Dữ liệu đầu vào có thể được truyền từ các bước diễn ra trước hành động Chạy mã. Để đưa dữ liệu này vào, bạn có thể viết truy vấn GraphQL trong trường Đầu vào. Dữ liệu được trả về từ truy vấn sẽ hiển thị dưới dạng đối số input cho hàm được đánh dấu export default, được gọi là main theo quy ước.
Truy vấn đầu vào là truy vấn dữ liệu môi trường Flow chứ không phải truy vấn tới Shopify Admin API. Do đó, bạn không thể chèn truy vấn Shopify vào dữ liệu đầu vào. Ngoài ra, Flow xử lý edges và nodes trong truy vấn nên bạn không cần thêm các cú pháp này hoặc cú pháp phân trang khác vào truy vấn của mình.
Ví dụ về đầu vào lấy ghi chú đơn hàng và tiêu đề của mặt hàng:
{
order {
note
lineItems {
title
}
}
}Dữ liệu này được chuyển đổi thành biến input có thể dùng trong mã:
export default function main(input) {
// input.order.note
// input.order.lineItems[0].title
}Biến đầu vào cũng có thể được phân giải trong chữ ký hàm:
export default function main({order}) {
// order.note
// order.lineItems[0].title
}Trường siêu dữ liệu
Để truy cập các giá trị trường siêu dữ liệu đơn lẻ trong Run code, trước tiên bạn phải thêm trường siêu dữ liệu vào dữ liệu môi trường của Flow. Thao tác này có thể thực hiện trong bất kỳ hành động hoặc điều kiện nào ngoài Run code. Ví dụ: bạn có thể thêm hành động Log output rồi làm theo hướng dẫn để thêm trường siêu dữ liệu.
Sau khi thêm trường siêu dữ liệu vào môi trường dòng công việc, bạn có thể truy cập trường siêu dữ liệu này trong Run code. Ví dụ: giả sử bạn đã thêm trường siêu dữ liệu Đơn hàng với bí danh là giftMessage. Sau đó, bạn có thể truy cập trường này trong truy vấn đầu vào:
{
order {
giftMessage {
value
}
}
}Dữ liệu đầu ra
Hành động Run code có thể trả về dữ liệu tùy chỉnh. Để xác định loại dữ liệu mà mã sẽ trả về, hãy sử dụng trường Output và Ngôn ngữ xác định lược đồ (SDL) của GraphQL. Các loại đầu ra được hỗ trợ là String, Int, Float, Boolean và ID, tuân theo thông số kỹ thuật SDL về cách chỉ định các trường bắt buộc, danh sách và dữ liệu tùy chỉnh.
Ví dụ: để trả về chuỗi có tên là giftMessage và số có tên là totalGifts:
type Output {
"The message to include in the gift"
giftMessage: String!
"The total number of gifts"
totalGifts: Int!
}Các chú thích là tùy chọn nhưng sẽ được sử dụng để mô tả dữ liệu trong giao diện người dùng Flow. Để xuất dữ liệu này trong mã JavaScript, hãy trả về đối tượng khớp với loại sau:
export default function main(input) {
// your code
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}Bạn cũng có thể xác định một loại tùy chỉnh để trả về dữ liệu phức tạp hơn. Ví dụ: để trả về một loại có tên là Gift chứa chuỗi có tên message và số có tên 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!
}Để truy cập dữ liệu này trong các bước sau hành động này, hãy sử dụng biến có tên Run code. Biến này sẽ được phân loại theo lược đồ Output mà bạn xác định trong cấu hình hành động Run code. Bạn có thể sử dụng biến này trong cả điều kiện và hành động.
Console.log
Bạn có thể sử dụng console.log để xuất dữ liệu sang nhật ký chạy dòng công việc của Flow nhằm mục đích khắc phục sự cố. Đầu ra sẽ hiển thị trong Nhật ký chạy của dòng công việc. Ví dụ: các nội dung sau đây là hợp lệ:
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,
};
}Bạn không thể sử dụng console.info, console.error hoặc các hàm khác trong hành động Run code.
Ví dụ
Bạn có thể tìm thấy ví dụ về hành động mã trong kho lưu trữ ví dụ của Flow.
Giới hạn
Hành động Run code có những giới hạn sau:
- Hành động Run code hỗ trợ ECMA2020 JavaScript. Hành động này không hỗ trợ NodeJS API, CommonJS API hoặc nhập mô-đun.
- Mã của bạn không thể thực hiện các lệnh gọi HTTP (
fetch). - Không thể sử dụng các hàm ngẫu nhiên và hàm dựa trên đồng hồ. Bạn có thể truyền dữ liệu ngày như
scheduledAthoặccreatedAtlàm dữ liệu đầu vào. - Console.log không ghi nhật ký vào bảng điều khiển của trình duyệt.
- Để tiết kiệm kích thước tải trọng, tải trọng dữ liệu đầu ra chỉ trả về các biến được sử dụng ở những bước sau đó.
- Bạn không thể thêm bí danh trường siêu dữ liệu trực tiếp vào hành động Run code. Để thực hiện việc này, hãy xem lại phần Trường siêu dữ liệu trên trang này.
Ngoài ra, các giới hạn sau đây sẽ được áp dụng:
- Truy vấn dữ liệu đầu vào bị giới hạn ở mức 5.000 ký tự.
- Lược đồ dữ liệu đầu ra bị giới hạn ở mức 5.000 ký tự.
- Tổng kích thước của tải trọng dữ liệu đầu ra và đầu ra Console.log bị giới hạn ở mức 50 KB.
- Mã không được dài quá 50.000 ký tự.
- Tổng thời lượng thực thi bị giới hạn ở mức 5 giây.
- Mức sử dụng bộ nhớ bị giới hạn ở mức 10 MB.
Mẫu
Thêm mặt hàng miễn phí (giảm giá 100%) vào đơn hàng mới
Mẫu này thêm một mặt hàng miễn phí, được giảm giá vào đơn hàng mới khi mặt hàng đó còn trong hàng tồn kho. Mẫu sẽ kiểm tra hàng tồn kho, áp dụng mức giảm giá 100% và cập nhật đơn hàng mà không thông báo cho khách hàng. Dòng công việc này có thể giúp tự động hóa trong các tình huống sau:
- Nâng cao sự hài lòng của khách hàng bằng cách thêm mặt hàng miễn phí bất ngờ vào đơn hàng của họ.
- Quảng bá các sản phẩm mới hoặc ít người biết đến bằng cách thêm làm mẫu dùng thử miễn phí trong đơn hàng.
- Đơn giản hóa các chương trình khuyến mãi bằng cách tự động hóa việc thêm và giảm giá mặt hàng miễn phí.
Hủy đơn hàng trả lại không hoạt động
Tự động hủy đơn hàng trả lại chưa được hoàn tiền hoặc bổ sung vào kho trong một khoảng thời gian nhất định. Xem mẫu
Chuyển đổi thẻ có tiền tố thành trường siêu dữ liệu sản phẩm bằng hành động Run code
Dòng công việc này sẽ lấy các thẻ bắt đầu bằng tiền tố, chẳng hạn như 'color:' và thêm vào danh sách trường siêu dữ liệu sản phẩm. Dòng công việc sử dụng hành động Run code để phân tích cú pháp thẻ và các mặt hàng hiện có trong danh sách trường siêu dữ liệu. Dòng công việc chạy khi sản phẩm được tạo nhưng có thể chạy thủ công trên sản phẩm hiện có. Xem mẫu
Gửi thông báo khi khách hàng đặt hàng nhiều mẫu mã của một sản phẩm
Nhận thông báo qua email khi khách hàng đặt hàng nhiều mẫu mã của cùng một sản phẩm. Xem mẫu
Gửi thông báo khi đơn hàng có chứa gói sản phẩm
Dòng công việc này bắt đầu khi đơn hàng được tạo và kiểm tra xem có bất kỳ sản phẩm nào trong đơn hàng được mua theo gói sản phẩm hay không. Nếu có, hệ thống sẽ gửi một email nội bộ chứa chi tiết về gói sản phẩm. Ngoài ra, bạn có thể sử dụng dòng công việc này làm điểm khởi đầu cho mọi trường hợp sử dụng cần phát hiện sự hiện diện của gói sản phẩm trong đơn hàng. Xem mẫu
Gắn thẻ đơn hàng theo chiến dịch UTM liên kết
Thêm thẻ vào các đơn hàng có chứa tên của mọi chiến dịch UTM liên kết. Xem mẫu