Funktioner är verktyg som hjälper dig att få tillgång till dynamiska data, såsom att kontrollera om imorgon är en arbetsdag eller att hitta nästa helgdag för avsändaren. De används när man skriver avancerade villkor. Denna guide förklarar hur funktioner fungerar och hur man använder dem.
Innehåll i denna artikel:
- Vad är en funktion?
- Funktionens indata och data
- Lista över tillgängliga funktioner
- Inspektera funktioner
- Speciella funktioner
- Rundningsfunktioner
-
Join-funktioner
Vad är en funktion?
En funktion är ett återanvändbart verktyg som returnerar data baserat på vissa indata. Till exempel kan en funktion berätta för dig:
- Nästa helgdag
- Om ett specifikt datum är en arbetsdag
- Ett nummer, datum eller textsträng baserat på din indata
Om du inte anger någon indata (kallad ett argument) kommer funktionen att använda en standard, vanligtvis baserad på dagens datum och relevant tidszon.
Funktionens indata och data
Vissa funktioner accepterar ett eller flera argument (indata). Dessa indata måste följa två regler:
- Korrekt typ: En funktion som förväntar sig ett datum accepterar inte ett nummer eller text.
- Korrekt ordning: Om en funktion förväntar sig en sträng först och ett nummer andra, måste du följa den ordningen.
Ibland kan du utelämna senare argument, men du måste alltid inkludera de tidigare.
Giltigt: FunctionB(String, Integer)
Ogiltigt: FunctionB(String, Date)
Funktioner returnerar olika typer av data:
- Text (t.ex. ett helgdagsnamn)
- Nummer (t.ex. antal dagar till ett datum)
- Date (t.ex. nästa arbetsdag)
Du kan använda dessa data i vidare villkor, som att lägga till dagar till ett datum eller jämföra värden.
Lista över tillgängliga funktioner
| Namn | Resultattyp | Argumenttyper | Obligatoriska argument | Endast tillgänglig för uttryck ? |
| todayIsWeekendSender/todayIsWeekendReceiver | Boolean | - | - | - |
| todayIsHolidaySender/todayIsHolidayReceiver | Boolean | - | - | - |
| dateNowSender/dateNowReceiver | Date | Date | - | - |
| nextHolidayDateSender/nextHolidayDateReceiver | Date | Date | - | - |
| nextWorkDateSender/nextWorkDateReceiver | Date | Date | - | - |
| nearestWorkDateSender/nearestWorkDateReceiver | Date | Date | - | - |
| carrierEtaFromDate | Date | - | - | Ja |
| carrierEtaToDate or carrierEtaDate | Date | - | - | Ja |
| dateTimeNowSender/dateTimeNowReceiver | DateTime | - | - | - |
| carrierEtaFromDateTime | DateTime | - | - | Ja |
| carrierEtaToDateTime or carrierEtaDateTime | DateTime | - | - | Ja |
| timeNowSender/timeNowReceiver | Tid | - | - | - |
| todayAsNumberInYearSender/todayAsNumberInYearReceiver | Integer | - | - | - |
| weekdayNumberSender/weekdayNumberReceiver | Integer | - | - | - |
| weekday | Integer | DateTime | - | - |
| maximumPackageWeightKg | Double | - | - | - |
| minimumPackageWeightKg | Double | - | - | - |
| totalPackageWeightKg | Double | - | - | - |
| maximumPackageVolumeCm3 | Double | - | - | - |
| minimumPackageVolumeCm3 | Double | - | - | - |
| totalPackageVolumeCm3 | Double | - | - | - |
| maximumPackageLengthCm | Double | - | - | - |
| minimumPackageLengthCm | Double | - | - | - |
| totalPackageLengthCm | Double | |||
| maximumPackageWidthCm | Double | - | - | - |
| minimumPackageWidthCm | Double | - | - | - |
| totalPackageWidthCm | Double | |||
| maximumPackageHeightCm | Double | - | - | - |
| minimumPackageHeightCm | Double | - | - | - |
| totalPackageHeightCm | Double | |||
| maximumPackageCircumferenceCm | Double | |||
| minimumPackageCircumferenceCm | Double | |||
| maximumPackageLengthCircumferenceCm | Double | |||
| minimumPackageLengthCircumferenceCm | Double | |||
| monthNowSender/monthNowReceiver | String | - | - | - |
| dayNowSender/dayNowReceiver | String | - | - | - |
| nextWorkDaySender/nextWorkDayReceiver | String | Date | - | - |
| nearestWorkDaySender/nearestWorkDayReceiver | String | Date | - | - |
| carrierEtaFromDay | String | - | - | Ja |
| carrierEtaToDay or carrierEtaDay | String | - | - | Ja |
| carrierEtaInterval | String | - | - | Ja |
| toUpperCase | String | String | - | - |
| allPackageContents | Array | - | - | - |
Inspektera funktioner
Villkor utvärderas i två faser:
- Fas 1: Grundläggande kontroller (inga inspekterande funktioner)
- Fas 2: Avancerade kontroller med inspekterande funktioner
Inspekterande funktioner tittar på mer detaljerad eller extern data (som helgdagar) och markeras med etiketten "INSPECTING". Om inga inspekterande funktioner används kommer fas 2 att vara tom.
Inspekterande funktioner har inte en normal returtyp. Istället påverkar de Checkout-leveransalternativen på ett mer generellt sätt, till exempel genom att omordna de alternativ som returneras.
| Namn | Resultat |
| enabled | Boolean |
| costPrice | Double |
| salesPrice | Double |
Speciella funktioner
Följande "enhetsfunktioner" är också tillgängliga att använda i kombination med vissa operationer (ingen av dem stödjer några argument):
| Namn | Resultattyp |
| hour | TimePeriod |
| minute | TimePeriod |
| year | Period |
| month | Period |
| day | Period |
| workdaySender/workdayReceiver | WorkdayPeriod |
Arbetsdagar kan variera beroende på plats. Vad som är en arbetsdag för avsändaren kan vara en helgdag för mottagaren. Därför måste arbetsdagsenheten användas med antingen Sender eller Receiver.
När man lägger till arbetsdagar till ett datum beaktas helger och nationella helgdagar baserat på relevant tidszon.
Observera: Du kan endast lägga till eller subtrahera upp till 60 arbetsdagar. Allt utöver det (t.ex. 61) behandlas som 60. Denna begränsning hjälper till att bibehålla systemets stabilitet och kan endast ökas med försiktighet.
Vi erbjuder också konstanter, som representerar vanliga värden i villkor. De förenklar uttryck, som att kontrollera om ett datum infaller på en vardag, t.ex. ”weekday(dateNowSender) between monday;friday”.
| Namn | Resultattyp |
| monday | Integer |
| tuesday | Integer |
| wednesday | Integer |
| thursday | Integer |
| friday | Integer |
| saturday | Integer |
| sunday | Integer |
Rundningsfunktioner
Rundningsfunktionerna kan användas för att avrunda ett värde (t.ex. priset). Värdet kan vara antingen numeriskt eller en funktion som costprice/salesprice:
round(123.45) → avrunda upp till heltal
round(123.45; 10.0) → avrunda upp till 10
round(123.45; 10.0; “down”) → avrunda ned till 10
round(123.45; 10.0; “down99”) → avrunda ned till 10 och subtrahera minsta belopp baserat på decimaler för att få 119.99
Join-funktioner
join()-funktionen låter dig kombinera flera strängvärden till en enda sträng. Detta kan vara särskilt användbart när du vill bygga uppslagstangenter dynamiskt baserat på flera datapunkter och använda dessa tangenter för att hämta värden från en villkorslista.
Typiska användningsfall kan inkludera:
- Konstruera sammansatta nycklar för uppslag (t.ex. Zon + Valuta)
- Förenkla komplex regel-logik
- Dynamiskt välja värden såsom tröskelvärden för fri frakt eller prisklasser baserat på zon, vikt, volym eller valuta
Genom att kombinera värden vid körning kan join() ersätta långa villkorsuttryck med kortare regel-logik.
Funktionssyntax
join("/"; ["hello";"world"]) => "hello/world"
join("+"; ["hello"; 1; 2; 3]) => "hello+1+2+3"
Exempel:
cart_price >= toNumber(join(""; [tocountry from "Zones"; currency]) from "FreeShipThresholds")
I uttrycket ovan översätts landet till en zon med uppslaget tocountry från en villkorslista kallad "Zones", som förväntas returnera en sträng som "Zone1". Med hjälp av join kombineras sedan zonen med valutan, vilket ger till exempel "Zone1EUR". Det värdet används sedan för att slå upp tröskelvärdet i en villkorslista kallad "FreeShipThresholds".
Utdata är en enda sammansatt sträng.