Exécuter du code
L’action Exécuter du code exécute du JavaScript. Vous pouvez transmettre les données des étapes précédentes du flux de travail en tant qu’entrée à l’action Exécuter du code et retourner des valeurs à utiliser dans les étapes suivantes.
Sur cette page
Champs
L’action Exécuter du code contient les champs suivants.
| Champ | Description |
|---|---|
| Entrée | Requis. Une requête GraphQL pour utiliser les données des étapes précédentes comme entrée pour l’action Exécuter du code. |
| Sortie | Requis. Une représentation des données à retourner par l’action, définie dans le langage de définition de schéma (SDL) de GraphQL. |
| Code | Requis. Le JavaScript que l’action Exécuter du code exécutera. |
Données d’entrée
Les données d’entrée peuvent être transmises à partir des étapes qui précèdent l’action Exécuter du code. Pour inclure ces données, vous pouvez écrire une requête GraphQL dans le champ Entrée. Les données retournées par la requête seront disponibles en tant qu’argument input de la fonction marquée avec export default, appelée main par convention.
La requête d’entrée est une requête pour les données de l’environnement Flow et non une requête à la Shopify Admin API. Par conséquent, vous ne pouvez pas insérer de requête Shopify dans les données d’entrée. De plus, Flow gère les éléments edges et nodes dans la requête. Vous n’avez donc pas besoin de les ajouter, ni d’ajouter une autre syntaxe de pagination à votre requête.
Exemple d’entrée qui récupère une note de commande et le titre d’un article de ligne :
{
order {
note
lineItems {
title
}
}
}Ces données sont converties en une variable input qui peut être utilisée dans le code :
export default function main(input) {
// input.order.note
// input.order.lineItems[0].title
}Les entrées peuvent également être déstructurées dans la signature de la fonction :
export default function main({order}) {
// order.note
// order.lineItems[0].title
}Champs méta
Pour accéder aux valeurs d’un champ méta unique dans Exécuter du code, vous devez d’abord ajouter le champ méta aux données d’environnement de Flow. Cela peut être fait dans n’importe quelle action ou condition autre que Exécuter du code. Par exemple, vous pouvez ajouter une action Consigner la sortie, puis suivre les instructions pour ajouter le champ méta.
Une fois qu’un champ méta a été ajouté à l’environnement du flux de travail, vous pouvez y accéder dans Exécuter du code. Par exemple, supposons que vous ayez ajouté un champ méta de commande avec le nom d’alias giftMessage. Vous pouvez ensuite y accéder dans votre requête d’entrée :
{
order {
giftMessage {
value
}
}
}Données de sortie
L’action Exécuter le code peut renvoyer des données personnalisées. Pour définir le type de données que le code renverra, utilisez le champ Sortie et le langage de définition de schéma (SDL) de GraphQL. Les types de sortie pris en charge sont String, Int, Float, Boolean et ID, qui suivent la spécification SDL sur la manière de spécifier les champs obligatoires, les listes et les données personnalisées.
Par exemple, pour renvoyer une chaîne appelée giftMessage et un nombre appelé totalGifts :
type Output {
"The message to include in the gift"
giftMessage: String!
"The total number of gifts"
totalGifts: Int!
}Les commentaires sont facultatifs, mais ils seront utilisés pour décrire les données dans l’interface utilisateur de Flow. Pour générer ces données dans le code JavaScript, renvoyez un objet correspondant au type :
export default function main(input) {
// your code
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}Vous pouvez également définir un type personnalisé pour renvoyer des données plus complexes. Par exemple, pour renvoyer un type appelé Gift qui contient une chaîne appelée message et un nombre appelé 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!
}Pour accéder à ces données dans les étapes qui suivent cette action, utilisez la variable nommée Exécuter le code, qui sera typée en fonction du schéma Sortie que vous définissez dans la configuration de l’action Exécuter le code. Vous pouvez utiliser cette variable dans les conditions et les actions.
Console.log
Vous pouvez utiliser console.log pour générer des données dans le journal d’exécution du flux de travail de Flow à des fins de résolution de problèmes. La sortie sera visible dans le journal d’exécution du flux de travail. Par exemple, les éléments suivants sont valides :
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,
};
}Vous ne pouvez pas utiliser console.info, console.error ou d’autres fonctions dans l’action Exécuter le code.
Exemple
Vous trouverez des exemples pour l’action de code dans le référentiel d’exemples Flow.
Limites
L’action Exécuter le code présente les limites suivantes :
- L’action Exécuter le code prend en charge ECMA2020 JavaScript. Elle ne prend pas en charge les API NodeJS ou CommonJS, ni l’importation de modules.
- Votre code ne peut pas effectuer d’appels HTTP (
fetch). - Les fonctions aléatoires et basées sur l’horloge ne peuvent pas être utilisées. Les données de date, telles que
scheduledAtoucreatedAt, peuvent être transmises en tant qu’entrée. - Console.log n’enregistre pas les données dans la console du navigateur.
- Pour réduire la taille de la charge utile, la charge utile des données de sortie ne renvoie que les variables utilisées dans les étapes en aval.
- Vous ne pouvez pas ajouter d’alias de champ méta directement dans l’action Exécuter le code. Pour ce faire, consultez la section Champs méta sur cette page.
De plus, les limites suivantes s’appliquent :
- La requête de données d’entrée est limitée à 5 000 caractères.
- Le schéma de données de sortie est limité à 5 000 caractères.
- La charge utile des données de sortie et la sortie Console.log sont limitées à un total combiné de 50 Ko.
- Le code ne peut pas dépasser 50 000 caractères.
- La durée totale d’exécution est limitée à 5 secondes.
- L’utilisation de la mémoire est limitée à 10 Mo.
Modèles
Ajouter un article gratuit (avec une réduction de 100 %) aux nouvelles commandes
Ce modèle ajoute un article gratuit avec une réduction aux nouvelles commandes lorsque l’article est en stock. Il vérifie le stock, applique une réduction de 100 % et met à jour la commande sans en aviser le client. Ce flux de travail peut aider à ajouter de l’automatisation aux scénarios suivants :
- Améliorer la satisfaction client en incluant un article gratuit surprise dans sa commande.
- Promouvoir des produits nouveaux ou moins connus en les ajoutant comme échantillons gratuits dans les commandes.
- Rationaliser les promotions en automatisant l’inclusion et la réduction d’articles gratuits.
Annuler les retours inactifs
Annuler automatiquement un retour qui n’a pas été remboursé ou restocké dans un certain délai. Afficher le modèle
Convertir les balises avec un préfixe en un champ méta de produit à l’aide de l’action Exécuter le code
Ce flux de travail prendra les balises qui commencent par un préfixe tel que « color: » et les ajoutera à une liste de champs méta de produit. Il utilise l’action Exécuter le code pour analyser les balises et les articles existants dans la liste de champs méta. Le flux de travail s’exécute lorsqu’un produit est créé, mais peut être exécuté manuellement sur des produits existants. Afficher le modèle
Envoyer une notification lorsqu’un client commande plusieurs variantes d’un produit
Recevoir une notification par e-mail lorsqu’un client commande plusieurs variantes du même produit. Afficher le modèle
Envoyer une notification lorsqu’une commande contient un lot
Ce flux de travail commence lorsqu’une commande est créée et vérifie si l’un des produits de la commande a été acheté dans le cadre d’un lot. Le cas échéant, un e-mail interne est envoyé avec les détails du lot. De plus, vous pouvez utiliser ce flux de travail comme point de départ pour tout cas d’utilisation qui doit détecter la présence d’un lot dans une commande. Afficher le modèle
Baliser les commandes avec la campagne UTM associée
Ajoute des balises aux commandes qui contiennent les noms de toutes les campagnes UTM associées. Afficher le modèle