Hoppa till huvudinnehåll

Filtrera uttryck

Prime Penguin använder ett enkelt uttrycksspråk för att dirigera order, eller för att skriva order som B2B eller DTC . Det gör att du kan skriva kraftfulla, men ändå enkla uttalanden om order som antingen är sanna eller falska och avgör hur Prime Penguin fungerar. Du kan t.ex. lägga till följande filter till ett lager i orderdirigeringen

shippingAddress.countryCode = "SE"

... och endast order för Sverige skulle skickas till det angivna lagret.

Ett mer komplext exempel är om du vill se till att ett lager bara tar emot en order om den gäller Stockholms stad (enligt postnummer) och lagret har tillräckligt med varor för att leverera ordern, då skulle det se ut så här:

number_in_range(to_digits(shippingAddress.zip), 11100, 11199) 
OCH 
har_lager()

Observera att "AND" kombinerar två uttryck, så att hela filtret bara är sant om både postnumret ligger i rätt intervall och lagret har lager. Radbrytningarna är endast för läsbarhetens skull och spelar ingen roll.

Översikt över uttryck

Varje filter är ett uttryck, vilket är en finare programmeringsterm för att säga att det resulterar i ett värde, och det värde som behövs för filter bör vara ett sant eller falskt värde. Följande uttryck kan till exempel användas som ett filter:

contactEmail = "mylittlepony@test.com"

Om en order har fältet contactEmail och det fältet är lika med "mylittlepony@test.com", utvärderas uttrycket (och filtret) till true . Men om ordern har någon annan e-postadress som contactEmail skulle det utvärderas till false .

Uttryck kan även användas för siffror, t.ex. är följande uttryck sant om en order har fler än eller lika med 4 rader artiklar:

items_count() >= 4

Du kan kombinera små uttryck med hjälp av "AND" eller "OR":

contactEmail = "mylittlepony@test.com" OR items_count() >=4

Ovanstående filter skulle vara sant antingen om kontaktadressen för ordern är "mylittlepony@test.com" eller om den har fler än eller lika med 4 artiklar.

Slutligen kan du gruppera uttryck med hjälp av parenteser och använda operatorn "NOT" för att uttrycka negationer:

NOT contactEmail = "mylittlepony@test.com"
AND
(shippingAddress.countryCode = "SE" or items_count() < 4)

Ovanstående filter skulle bara vara sant om kontaktadressen inte är "mylittlepony@test.com" och antingen landet är Sverige eller ordern har färre än 4 rader artiklar.

Fält, funktioner och operatorer

Det finns tre olika saker som utgör ett uttryck:

  • Fält: Du kan komma åt värdet för valfritt fält i ordern, t.ex. contactEmail enligt bilden ovan.
  • Funktioner: Det här är speciella konstruktioner som antingen kan hjälpa dig att manipulera fältdata eller hitta extra data. Ett exempel:
    • items_count() - Denna funktion returnerar antalet artiklar i ordern
    • string_starts_with(string, prefix ) - Denna funktion kontrollerar om en sträng börjar med ett visst prefix
  • Operatörer: Dessa används oftast för att jämföra ett fältvärde med ett förhandsvillkor. Till exempel
    • = - Returnerar sant om värdena på båda sidor om "=" är lika
    • > - Returnerar true om talet på vänster sida är större än det på höger sida

Datatyper

I orderfälten och i uttrycken kommer du att hantera tre typer av data:

  • string - Detta är en uppsättning tecken, t.ex. ett namn eller en adressdel
  • number - Detta är ett tal som kan ha eller inte ha decimaler, t.ex. antalet artiklar i en order
  • boolean - Detta är ett finare namn för något som antingen är sant eller falskt
  • set - Detta är en lista med strängar, t.ex. alla SKU:er från en order

Det finns också en speciell typ av sträng:

  • date - Detta är en sträng som kan tolkas som ett datum, eller till och med ett datum och en tid. Den kommer alltid att använda det så kallade ISO 8601-formatet (se "Datumformat" nedan).

Negationer

Du kan testa för negativa uttryck genom att helt enkelt lägga till "NOT" framför uttrycket. Så till exempel skulle följande uttryck matcha varje order som inte skickas till Sverige:

NOT shippingAddress.countryCode = "SE"

Ett annat sätt att göra samma sak skulle vara att använda operatorn "not equals" (se "Operatorer" nedan):

shippingAddress.countryCode != "SE"

Vanliga exempel

Filter för landskod för leveransadress

Följande matcher Sverige eller Tyskland:

shippingAddress.countryCode = "SE" OR shippingAddress.countryCode = "DE"

Filter för postnummerintervall

Följande matchar postnummer i intervallet 10000 till 15000. Observera att den använder "hjälpfunktionen" to_digits() som tar bort icke-siffriga tecken från strängvärdet. Detta är användbart eftersom postnummer ofta innehåller både mellanslag och tecken:

number_in_range(to_digits(shippingAddress.zip), 10000, 15000)

Filter för matchning av kundnamn

Följande matchar alla kundnamn som börjar med "Popup Store" (se även "Strängmatchning" nedan):

string_match(kundnamn, "Popup-butik*")

Filter för lagertillgänglighet

Följande är endast tillgängligt i orderdirigeringen och kontrollerar att det aktuella lagret har lager för att kunna leverera alla artiklar i ordern:

har_lager()

Använd en variabel uppsättning

Om du har en variabeluppsättning med t.ex. postnummer kan du använda den så här för att kontrollera om mottagaradressen finns i uppsättningen:

set_contains(variable_set("myZipCodes"), fraktAddress.zip)

Kontrollera om en order har en specifik tagg

På så sätt kan du kontrollera om en order har en specifik tagg:

set_contains(string_split(tags, ","), "myTag")

Fuzzy SKU- eller produktfilter

Följande matchar en specifik SKU eller en produkttitel i varuposterna:

items_contains_sku("AS101") OR items_contains_title_match("Läppstift 666 *")

Tillgängliga fält

Det här är de fält som kan nås i en order:

  • salesChannel - sträng
  • salesChannelId - nummer
  • orderNumber - sträng
  • totalPrice - antal
  • totalSkatt - antal
  • skapad - sträng (datum-tid)
  • createdDate - sträng (datum)
  • valuta - sträng
  • not - sträng
  • shippingType - sträng
  • shippingCompany - sträng
  • shippingPrice - antal
  • isPaid - boolean
  • leveransinstruktioner - sträng
  • requestedDeliveryDate - sträng (datum)
  • kundnamn - sträng
  • contactEmail - sträng
  • taggar - sträng
  • freeText1 - sträng
  • freeText2 - sträng
  • freeText3 - sträng
  • shippingAddress.address1 - sträng
  • shippingAddress.address2 - sträng
  • shippingAddress.zip - sträng
  • shippingAddress.city - sträng
  • shippingAddress.province - sträng
  • shippingAddress.countryCode - sträng
  • shippingAddress.country - sträng
  • billingAddress.address1 - sträng
  • billingAddress.address2 - sträng
  • billingAddress.zip - sträng
  • billingAddress.city - sträng
  • billingAddress.province - sträng
  • billingAddress.countryCode - sträng
  • billingAddress.country - sträng

Tillgängliga funktioner

Observera att funktionen has_stock endast är tillgänglig i orderdirigeringen eftersom den är beroende av lagernivåerna på ett visst lager.

Verktygsfunktioner

  • has_stock() - Returnerar true om lagret kan uppfylla ordern
  • to_digits(string) - Returnerar en ny sträng där alla icke-siffror har tagits bort
  • to_alphanumeric(string) - Returnerar en ny sträng med endast siffror och tecken
  • variable_set(string) - Hämtar värden från en variabeluppsättning

Datumfunktioner

  • now() - Returnerar aktuellt datum och aktuell tid som en sträng
  • now_date() - Returnerar aktuellt datum som en sträng
  • date_in_range(date, from, to ) - Kontrollerar om datum (sträng) ligger inom intervallet för två andra datum (även strängar)
  • date_before(date, to ) - Kontrollerar om datum (sträng) är före ett annat datum (sträng)
  • date_after(date, from ) - Kontrollerar om datum (sträng) är efter ett annat datum (sträng)

Strängfunktioner

  • string_starts_with(string, prefix ) - Kontrollerar om strängen börjar med prefixet (skiftlägesokänslig)
  • string_ends_with( string, postfix) - Kontrollerar om strängen börjar med postfix (skiftlägesokänslig)
  • string_match(string, pattern ) - Kontrollerar om strängen matchar mönstret (sträng, se "Strängmatchning" nedan)
  • string_split( string, pattern) - Dela upp strängen till en uppsättning med mönstret som avgränsare
  • string_split_digits( string, pattern) - Dela upp strängen i en uppsättning med mönstret som avgränsare, använd "to_digits" på alla strängar i den nya uppsättningen
  • string_split_alphanumeric( string, pattern) - Dela upp strängen till en uppsättning med mönstret som avgränsare, använd "to_alphanumeric" på alla strängar

Nummerfunktioner

  • is_number(value) - Returnerar true om fältet eller uttrycket kan användas som ett tal
  • number_in_range(number, from, to ) - Kontrollerar om ett tal (sträng eller tal) ligger inom intervallet för två andra tal (också sträng eller tal)

Linjepostfunktioner

  • lines_count() - Returnerar antalet orderrader i ordern
  • items_count() - Returnerar antalet artiklar i ordern
  • items_contains_sku(sku ) - Returnerar true om den angivna SKU:n (sträng) finns bland artiklarna i raden
  • items_contains_title_match(pattern) - Returnerar true om någon produkttitel matchar mönstret (sträng, se "Strängmatchning" nedan)
  • items_contains_variantTitle_match(pattern) - Returnerar true om någon produktvariants titel matchar mönstret (sträng, se "Strängmatchning" nedan)
  • items_contains_comment_match(pattern) - Returnerar true om någon produktkommentar matchar mönstret (sträng, se "Strängmatchning" nedan)
  • items_sku_set() - Returnerar en uppsättning med alla SKU:er från ordern
  • items_comments_set() - Returnerar en uppsättning med alla kommentarer från ordern

Ställ in funktioner

  • set_contains(set, string ) - Kontrollera om den angivna uppsättningen innehåller den angivna strängen
  • set_contains_match(set, pattern) - Kontrollera om någon sträng i setet "matchar" den angivna strängen
  • set_contains_digits(set, string|number ) - Anropa "to_digits" på strängen och kontrollera sedan om setet innehåller dessa siffror
  • set_contains_alphanumeric(set, string ) - Anropa "to_alphanumeric" på strängen och kontrollera sedan om setet innehåller resultatet
  • set_contains_all( set, set) - Kontrollera om set ett innehåller alla strängar från set två
  • set_contains_any( set, set) - Kontrollera om set ett innehåller någon sträng från set två
  • set_count( set) - Returnerar antalet strängar i setet

Datumformat

Datum representeras som strängar och alltid i ISO 8601-format, antingen som datum-tid-strängar (exklusive nanosekunder, men inklusive tidszon) eller som enkla datum:

  • Datum: "åååå-MM-dd", t.ex. "2021-01-01"
  • Datumtid: "yyyy-MM-dd'T'HH:mm:ssZ", t.ex. "2021-01-01T23:12:01+01:00"

Matchning av strängar

Strängens ekvilibrism och substrängar

  • Stränglikhet med operatorn "=" är skiftlägeskänslig
  • Jämförelse av substrängar med hjälp av string_starts_with eller string_ends_with är okänslig för skiftlägesanalys

Matchning av strängmönster

Mönstermatchning är skiftlägesokänslig och använder matchning i Glob-stil. Några exempel:

  • true: string_matches("kalle", "*lle")
  • false: string_matches("kalle", "kall[aoi]")
  • true: string_matches("kalle", "kall?")
  • false: string_matches("kalle 1", "kalle [2-8]")

Operatörer

Följande operatörer finns tillgängliga:

  • NOT (eller!)
  • AND (eller &)
  • OR (eller |)
  • =
  • !=
  • >
  • <
  • <=
  • >=

Gruppering

Du kan t.ex. gruppera uttryck med hjälp av parenteser:

has_stock() AND (items_count() > 5 | items_contains_sku("asd123"))
Var den här artikeln till hjälp?

Relaterade artiklar