Funktioner er værktøjer, der hjælper dig med at få adgang til dynamiske data, såsom at tjekke om i morgen er en arbejdsdag eller finde den næste helligdag for afsenderen. De bruges, når du skriver avancerede betingelser. Denne vejledning forklarer, hvordan funktioner fungerer, og hvordan man bruger dem.
Indhold i denne artikel:
- Hvad er en funktion?
- Funktion input og data
- Liste over tilgængelige funktioner
- Inspektion af funktioner
- Specielle funktioner
- Afrundingsfunktioner
-
Join-funktioner
Hvad er en funktion?
En funktion er et genanvendeligt værktøj, der returnerer data baseret på visse input. For eksempel kan en funktion fortælle dig:
- Den næste offentlige helligdag
- Om en bestemt dato er en arbejdsdag
- Et tal, en dato eller en tekststreng baseret på dit input
Hvis du ikke angiver noget input (kaldet et argument), vil funktionen bruge en standard, som normalt er baseret på dags dato og den relevante tidszone.
Funktion input og data
Nogle funktioner accepterer et eller flere argumenter (input). Disse input skal følge to regler:
- Korrekt type: En funktion, der forventer en dato, accepterer ikke et tal eller tekst.
- Korrekt rækkefølge: Hvis en funktion forventer en streng først og et tal som andet, skal du følge den rækkefølge.
Du kan nogle gange udelade senere argumenter, men du skal altid inkludere de tidligere.
Gyldigt: FunctionB(String, Integer)
Ugyldigt: FunctionB(String, Date)
Funktioner returnerer forskellige typer data:
- Tekst (f.eks. et helligdagsnavn)
- Tal (f.eks. antal dage til en dato)
- Datoer (f.eks. den næste arbejdsdag)
Du kan bruge disse data i yderligere betingelser, som at tilføje dage til en dato eller sammenligne værdier.
Liste over tilgængelige funktioner
| Navn | Resultattype | Argumenttyper | Obligatoriske argumenter | Kun tilgængelig for udtryk ? |
| 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 | Time | - | - | - |
| 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 | - | - | - |
Valideringsfunktioner (inspecting functions)
Betingelser evalueres i to faser:
- Fase 1: Grundlæggende kontroller (ingen valideringsfunktioner)
- Fase 2: Avancerede kontroller ved brug af valideringsfunktioner
Valideringsfunktioner kigger på mere detaljerede eller eksterne data (som helligdage) og er markeret med etiketten "INSPECTING". Hvis der ikke bruges valideringsfunktioner, vil fase 2 være tom.
Valideringsfunktioner har ikke en normal returtype. I stedet påvirker de Checkout-leveringsmuligheder på en mere generel måde, for eksempel ved at omarrangere de returnerede muligheder.
| Navn | Resultat |
| enabled | Boolean |
| costPrice | Double |
| salesPrice | Double |
Specielle funktioner
Følgende "enhedsfunktioner" er også tilgængelige til brug i kombination med visse operationer (ingen af dem understøtter argumenter):
| Navn | Resultattype |
| hour | TimePeriod |
| minute | TimePeriod |
| year | Period |
| month | Period |
| day | Period |
| workdaySender/workdayReceiver | WorkdayPeriod |
Arbejdsdage kan variere afhængigt af placering. Hvad der er en arbejdsdag for afsenderen, kan være en helligdag for modtageren. Derfor skal arbejdsdagsenheden bruges med enten Sender eller Receiver.
Når man tilføjer arbejdsdage til en dato, tages der hensyn til weekender og nationale helligdage baseret på den relevante tidszone.
Bemærk: Du kan kun tilføje eller trække op til 60 arbejdsdage fra. Alt derover (f.eks. 61) behandles som 60. Denne grænse hjælper med at opretholde systemets stabilitet og kan kun øges med forsigtighed.
Vi tilbyder også konstante funktioner, som repræsenterer almindeligt anvendte værdier i betingelser. De forenkler udtryk, som at kontrollere om en dato falder på en hverdag, f.eks. ”weekday(dateNowSender) between monday;friday”.
| Navn | Resultattype |
| monday | Integer |
| tuesday | Integer |
| wednesday | Integer |
| thursday | Integer |
| friday | Integer |
| saturday | Integer |
| sunday | Integer |
Afrundingsfunktioner
Afrundingsfunktionerne kan bruges til at runde en værdi af (f.eks. prisen). Værdien kan enten være numerisk eller en funktion som costprice/salesprice:
round(123.45) → afrund op til heltal
round(123.45; 10.0) → afrund op til 10
round(123.45; 10.0; “down”) → afrund ned til 10
round(123.45; 10.0; “down99”) → afrund ned til 10 og træk det mindste beløb fra baseret på decimaler for at få 119.99
Join-funktioner
join()-funktionen giver dig mulighed for at kombinere flere strengværdier til én enkelt streng. Dette kan være særligt nyttigt, når du ønsker at opbygge dynamiske opslagstaster baseret på flere datapunkter og bruge disse taster til at hente værdier fra en betingelsesliste.
Typiske anvendelsestilfælde kan inkludere:
- Opbygning af sammensatte nøgler til opslag (f.eks. Zone + Valuta)
- Forenkling af kompleks regel-logik
- Dynamisk valg af værdier som gratis-fragt-grænser eller pristrin baseret på zone, vægt, volumen eller valuta
Ved at kombinere værdier ved kørsel kan join() erstatte lange betingede udtryk med kortere regel-logik.
Funktionssyntaks
join("/"; ["hello";"world"]) => "hello/world"
join("+"; ["hello"; 1; 2; 3]) => "hello+1+2+3"
Eksempel:
cart_price >= toNumber(join(""; [tocountry from "Zones"; currency]) from "FreeShipThresholds")
I udtrykket ovenfor oversættes landet til en zone ved hjælp af opslaget tocountry fra en betingelsesliste kaldet "Zones", som forventes at returnere en streng som "Zone1". Ved at bruge join kombineres zonen derefter med valutaen, hvilket producerer for eksempel "Zone1EUR". Denne værdi bruges derefter til at slå grænsen op i en betingelsesliste kaldet "FreeShipThresholds".
Outputtet er en enkelt sammenkædet streng.