Kör kod

Åtgärden Kör kod exekverar JavaScript. Du kan skicka data från föregående steg i arbetsflödet som indata till åtgärden Kör kod och returnera värden som ska användas i efterföljande steg.

Fält

Åtgärden Kör kod innehåller följande fält.

Fält som används i åtgärden Kör kod.
FältBeskrivning
IndataKrävs. En GraphQL-förfrågan för att använda data från föregående steg som indata till åtgärden Kör kod.
UtdataKrävs. En representation av de data som ska returneras av åtgärden, definierad i GraphQL:s schemadefinitionsspråk (SDL).
KodKrävs. Den JavaScript som åtgärden Kör kod kommer att exekvera.

Indata

Indata kan skickas från steg som inträffar före åtgärden Kör kod. Om du vill inkludera dessa data kan du skriva en GraphQL-förfrågan i fältet Indata. De data som returneras från förfrågan kommer att vara tillgängliga som indata-argument för den funktion som är märkt med export default, som enligt konvention kallas main.

Indataförfrågan är en förfrågan om Flow-miljödata, inte en förfrågan till Shopify Admin API. Därför kan du inte infoga en Shopify-förfrågan i indata. Flow hanterar dessutom edges och nodes i förfrågan, så du behöver inte lägga till dem eller annan sidnumreringssyntax i din förfrågan.

Ett exempel på indata som hämtar en orderanteckning och titeln på en radartikel:

{
  order {
    note
    lineItems {
      title
    }
  }
}

Dessa data konverteras till en indata-variabel som kan användas i koden:

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

Indata kan även destruktureras i funktionssignaturen:

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

Metafält

För att komma åt enskilda metafältsvärden i Kör kod måste du först lägga till metafältet i Flows miljödata. Detta kan göras i valfri åtgärd eller valfritt villkor förutom Kör kod. Du kan till exempel lägga till en åtgärd för Loggutdata och sedan följa anvisningarna för att lägga till metafältet.

När ett metafält har lagts till i arbetsflödets miljö kan du komma åt det i Kör kod. Anta till exempel att du har lagt till ett ordermetafält med aliasnamnet giftMessage. Du kan sedan komma åt det i din indataförfrågan:

{
  order {
    giftMessage {
      value
    }
  }
}

Utdata

Åtgärden Kör kod kan returnera anpassade data. Använd fältet Utdata och GraphQL:s Schema Definition Language (SDL) för att definiera typen av data som koden ska returnera. Utdatatyper som stöds är String, Int, Float, Boolean och ID, som följer SDL-specifikationen för hur du anger obligatoriska fält, listor och anpassade data.

Om du till exempel vill returnera en sträng som heter giftMessage och ett nummer som heter totalGifts:

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

Kommentarerna är valfria, men kommer att användas för att beskriva data i Flow-gränssnittet. Returnera ett objekt som matchar typen för att mata ut dessa data i JavaScript-koden:

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

Du kan även definiera en anpassad typ för att returnera mer komplexa data. Om du till exempel vill returnera en typ som heter Gift som innehåller en sträng som heter message och ett nummer som heter 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!
}

Använd variabeln med namnet Kör kod för att komma åt dessa data i steg som följer efter den här åtgärden. Den kommer att skrivas enligt det Utdata-schema som du definierar i konfigurationen för åtgärden Kör kod. Du kan använda den här variabeln i både villkor och åtgärder.

Console.log

Du kan använda console.log för att mata ut data till Flows körningslogg för arbetsflöden i felsökningssyfte. Utdata kommer att synas i körningsloggen för arbetsflödet. Följande är till exempel giltiga:

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,
  };
}

Du kan inte använda console.info, console.error eller andra funktioner i åtgärden Kör kod.

Exempel

Exempel för kodåtgärden finns i Flow-exempellagringsplatsen.

Begränsningar

Åtgärden Kör kod har följande begränsningar:

  • Åtgärden Kör kod har stöd för ECMA2020 JavaScript. Den har inte stöd för NodeJS- eller CommonJS-API:er, eller för att importera moduler.
  • Din kod kan inte göra HTTP-anrop (fetch).
  • Slumpmässiga och klockbaserade funktioner kan inte användas. Datumdata, som scheduledAt eller createdAt, kan skickas in som indata.
  • Console.log loggar inte till webbläsarkonsolen.
  • För att spara på nyttolaststorleken returnerar nyttolasten för utdata endast variabler som används i efterföljande steg.
  • Du kan inte lägga till ett metafältalias direkt i åtgärden Kör kod. Granska avsnittet Metafält på den här sidan för att göra det.

Dessutom gäller följande gränser:

  • Indatafrågan är begränsad till 5 000 tecken.
  • Utdataschemat är begränsat till 5 000 tecken.
  • Nyttolasten för utdata och Console.log-utdata är begränsade till sammanlagt 50 KB.
  • Koden får inte vara längre än 50 000 tecken.
  • Total körningstid är begränsad till 5 sekunder.
  • Minnesanvändningen är begränsad till 10 MB.

Mallar

Lägg till gratisartikel (rabatterad 100 %) i nya ordrar

Denna mall lägger till en kostnadsfri, rabatterad artikel i nya ordrar när artikeln finns i lager. Den kontrollerar lagersaldot, tillämpar 100 % rabatt och uppdaterar ordern utan att meddela kunden. Detta arbetsflöde kan hjälpa till att lägga till automatisering i följande scenarier:

  • Förbättra kundnöjdheten genom att inkludera en kostnadsfri överraskningsartikel i deras order.
  • Marknadsför nya eller mindre kända produkter genom att lägga till dem som gratisprover i ordrar.
  • Effektivisera kampanjer genom att automatisera inkludering och rabattering av gratisartiklar.

Visa mall

Avbryt inaktiva returer

Avbryt automatiskt en retur som inte har återbetalats eller återlagts i lager inom en viss tidsperiod. Visa mall

Konvertera taggar med ett prefix till ett produktmetafält med hjälp av åtgärden Kör kod

Detta arbetsflöde tar taggar som börjar med ett prefix, såsom ”color:”, och lägger till dem i en produktmetafältlista. Det använder åtgärden Kör kod för att tolka taggarna och befintliga artiklar i metafältlistan. Arbetsflödet körs när en produkt skapas, men kan köras manuellt på befintliga produkter. Visa mall

Skicka avisering när en kund beställer flera varianter av en produkt

Ta emot ett e-postmeddelande när en kund beställer flera varianter av samma produkt. Visa mall

Skicka avisering när en order innehåller ett paket

Detta arbetsflöde börjar när en order skapas och kontrollerar om någon av produkterna i ordern köptes som en del av ett paket. Om ett paket hittas skickas ett internt e-postmeddelande med paketinformation. Dessutom kan du använda det här arbetsflödet som en utgångspunkt för alla användningsfall som behöver upptäcka förekomsten av ett paket i en order. Visa mall

Tagga ordrar med tillhörande UTM-kampanj

Lägger till taggar i ordrar som innehåller namnen på eventuella tillhörande UTM-kampanjer. Visa mall