Run code
[Run code] アクションでは、JavaScriptが実行されます。ワークフローの前のステップに関するデータを [Run code] アクションの入力として渡し、後に続くステップで使用する値を返します。
フィールド
[Run code] アクションには、次のフィールドが含まれます。
フィールド | 説明 |
---|---|
入力 | 必須です。[Run code] アクションへの入力として、前のステップのデータを使用するためのGraphQLクエリを作成します。 |
出力 | 必須です。アクションによって返されるデータ表現であり、GraphQLのスキーマ定義言語 (SDL) を使用して定義されます。 |
コード | 必須です。[Run code] アクションによって実行されるJavaScriptです。 |
入力データ
入力データは、[Run code] アクションの前に発生するステップから渡されます。このデータを組み込むには、[入力] フィールドにGraphQLクエリを記述します。クエリから返されるデータは、export default
でマークされた関数に対するinput
引数として使用できます。規則ではmain
と表示されます。
入力クエリは、Shopify Admin APIに対するクエリではなく、Flow環境データに関するクエリです。そのため、入力データにShopifyクエリを挿入することはできません。さらに、Flowはクエリの edges
および nodes
を処理するため、クエリには、これらやその他のページ構文を追加する必要はありません。
注文メモと項目のタイトルを取得するための入力例:
{
order {
note
lineItems {
title
}
}
}
このデータは、以下のコードで使用できるinput
変数に変換されます。
export default function main(input) {
// input.order.note
// input.order.lineItems[0].title
}
入力は、以下の関数の署名によって構造分解することもできます。
export default function main({order}) {
// order.note
// order.lineItems[0].title
}
メタフィールド ()
Run codeで単一のメタフィールド値にアクセスするには、まず、Flowの環境データにメタフィールドを追加する必要があります。これは、Run code以外のアクションまたは状態で実行されます。例えば、ログ出力アクションを追加し、その後メタフィールドを追加する手順に従うことができます。
ワークフロー環境にメタフィールドを追加した後は、[Run code] でアクセスできます。たとえば、OrderメタフィールドをgiftMessage
というエイリアス名で追加したとします。すると、次の入力クエリでこのメタフィールドにアクセスできます。
{
order {
giftMessage {
value
}
}
}
出力データ
[Run code] アクションでは、カスタムデータを返すことができます。コードが返すデータのタイプを定義するには、[出力] フィールドとGraphQLのスキーマ定義言語 (SDL) を使用します。対応している出力タイプは、String
、Int
、Float
、Boolean
、ID
です。これらは、必須フィールド、リスト、カスタムデータの指定方法に関するSDL仕様に従っています。
たとえば、giftMessage
という文字列とtotalGifts
という番号を返すには、以下のコードを使用します。
type Output {
"The message to include in the gift"
giftMessage: String!
"The total number of gifts"
totalGifts: Int!
}
コメントは任意ですが、Flow UIでデータを記述するために使用されます。このデータをJavaScriptコードで出力するために、次のタイプと一致するオブジェクトを返します。
export default function main(input) {
// your code
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}
さらに複雑なデータを返すカスタムタイプを定義することもできます。たとえば、message
という文字列およびamount
という番号を含む、Gift
というタイプを返すには、以下のコードを使用します。
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
スキーマに従って入力されるRun codeという変数を使用します。この変数は、条件とアクションの両方で使用できます。
Console.log
console.log
を使用すると、トラブルシューティング用にFlowのワークフロー実行ログにデータを出力できます。出力はワークフローの実行ログに表示されます。例えば、以下のものが有効です。
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,
};
}
Run codeアクションではconsole.info
やconsole.error
などの関数は使えません。
例
コード実行アクションの例は、Flowのリポジトリ例で確認できます。
制限
[Run code] アクションには、以下の制限があります。
- [Run code] アクションは、ECMA2020 JavaScriptに対応しています。NodeJSやCommonJS API、またはモジュールのインポートには対応していません。
- コードでhttpコール (
fetch
) を実行することはできません。 - ランダムな機能やクロックベースの機能を使用することはできません。
scheduledAt
やcreatedAt
などの日付データは、インプットとしてパスされます。 - Console.logはブラウザーコンソールにログインできません。
- メタフィールドエイリアスは、Run codeアクション内に直接追加することはできません。これを行う方法については、メタフィールドセクションを参照してください。
さらに、以下の制限が適用されます。
- 入力データのクエリの上限は5000文字です。
- 出力データのスキーマの上限は5000文字です。
- 出力データペイロードとConsole.log出力は、合計で50 kbに制限されています。
- コードの長さの上限は50000文字です。
- 実行時間の合計の上限は5秒です。
- メモリ使用量の上限は10MBです。
テンプレート
新規注文に無料 (100%ディスカウント) のアイテムを追加する
このテンプレートは、アイテムが在庫にある場合、新規注文にディスカウントされた無料のアイテムを追加します。在庫を確認し、100%のディスカウントを適用し、お客様に通知することなく注文を更新します。この自動化は、(1) 注文にサプライズの無料アイテムを追加することでお客様満足度を向上させる、(2) 注文に無料サンプルとして新商品やあまり知られていない商品を追加することで販売促進を図る、(3) 無料アイテムの追加やディスカウントを自動化することで販売促進を効率化する、といった場合に役立ちます。テンプレートを表示する
無効な返品をキャンセルする
一定期間内に返金または補充されていない返品を自動的にキャンセルします。テンプレートを表示する
コード実行アクションを使用して、プリフィックスが付いているタグを商品メタフィールドに変換する
このワークフローは、「color:」などのプリフィックスで始まるタグを取得し、商品メタフィールドリストに追加します。コード実行アクションを使用して、メタフィールドリスト内のタグと既存のアイテムを解析します。このワークフローは商品が作成された際に実行されますが、既存の商品に対して手動で実行することも可能です。テンプレートを表示する
お客様が商品の複数のバリエーションを注文した場合に通知を送信する
お客様は同じ商品の複数のバリエーションを注文すると、メール通知を受け取ります。テンプレートを表示する
注文にバンドルが含まれている場合に通知を送信する
このワークフローは、注文が作成されると開始され、注文内の商品がバンドルの一部として購入されたかどうかを確認します。見つかった場合、バンドルの詳細が記載された内部メールが送信されます。さらに、このワークフローは、注文内のバンドルの存在を検出する必要があるユースケースの開始点として使用できます。テンプレートを表示する
関連するUTMキャンペーンで注文にタグを付ける
関連するUTMキャンペーンの名前を含む注文にタグを追加します。テンプレートを表示する