Funksjoner er verktøy som hjelper deg med å få tilgang til dynamiske data, som å sjekke om i morgen er en arbeidsdag eller finne neste helligdag for avsenderen. De brukes når du skriver avanserte betingelser. Denne guiden forklarer hvordan funksjoner fungerer og hvordan du bruker dem.
Innhold i denne artikkelen:
- Hva er en funksjon?
- Funksjonsinngang og data
- Liste over tilgjengelige funksjoner
- Inspisere funksjoner
- Spesielle funksjoner
- Avrundingsfunksjoner
-
Join-funksjoner
Hva er en funksjon?
En funksjon er et gjenbrukbart verktøy som returnerer data basert på bestemte innganger. For eksempel kan en funksjon fortelle deg:
- Neste offentlige fridag
- Om en bestemt dato er en arbeidsdag
- Et tall, en dato eller en tekststreng basert på din inngang
Hvis du ikke oppgir noen inngang (kalt et argument), vil funksjonen bruke en standard, vanligvis basert på dagens dato og relevant tidssone.
Funksjonsinnganger og data
Noen funksjoner godtar ett eller flere argumenter (innganger). Disse inngangene må følge to regler:
- Korrekt type: En funksjon som forventer en dato vil ikke akseptere et tall eller tekst.
- Korrekt rekkefølge: Hvis en funksjon forventer en streng først og et tall som andre argument, må du følge den rekkefølgen.
Du kan noen ganger utelate senere argumenter, men du må alltid inkludere de tidligere.
Gyldig: FunctionB(String, Integer)
Ugyldig: FunctionB(String, Date)
Funksjoner returnerer forskjellige typer data:
- Tekst (f.eks. navnet på en helligdag)
- Tall (f.eks. antall dager til en dato)
- Datoer (f.eks. neste arbeidsdag)
Du kan bruke disse dataene i videre betingelser, som å legge til dager til en dato eller sammenligne verdier.
Liste over tilgjengelige funksjoner
| Navn | Resultattype | Argumenttyper | Obligatoriske argumenter | Kun tilgjengelig for uttrykk ? |
| 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 eller carrierEtaDate | Date | - | - | Ja |
| dateTimeNowSender/dateTimeNowReceiver | DateTime | - | - | - |
| carrierEtaFromDateTime | DateTime | - | - | Ja |
| carrierEtaToDateTime eller 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 eller carrierEtaDay | String | - | - | Ja |
| carrierEtaInterval | String | - | - | Ja |
| toUpperCase | String | String | - | - |
| allPackageContents | Array | - | - | - |
Inspisere funksjoner
Betingelser evalueres i to faser:
- Fase 1: Grunnleggende kontroller (ingen inspiseringsfunksjoner)
- Fase 2: Avanserte kontroller ved bruk av inspiseringsfunksjoner
Inspiseringsfunksjoner ser på mer detaljerte eller eksterne data (som helligdager) og er merket med etiketten "INSPECTING". Hvis ingen inspiseringsfunksjoner brukes, vil fase 2 være tom.
Inspiseringsfunksjoner har ikke en vanlig returtype. I stedet påvirker de betalingsløsningens leveringsalternativer på en mer generell måte, for eksempel ved å omorganisere de returnerte alternativene.
| Navn | Resultat |
| enabled | Boolean |
| costPrice | Double |
| salesPrice | Double |
Spesielle funksjoner
Følgende "enhetsfunksjoner" er også tilgjengelige for bruk i kombinasjon med visse operasjoner (ingen av dem støtter argumenter):
| Navn | Resultattype |
| hour | TimePeriod |
| minute | TimePeriod |
| year | Period |
| month | Period |
| day | Period |
| workdaySender/workdayReceiver | WorkdayPeriod |
Arbeidsdager kan variere avhengig av sted. Det som er en arbeidsdag for avsenderen kan være en helligdag for mottakeren. Derfor må arbeidsdagsenheten brukes med enten Sender eller Receiver.
Når du legger til arbeidsdager til en dato, tas helger og nasjonale helligdager i betraktning basert på relevant tidssone.
Merk: Du kan bare legge til eller trekke fra opptil 60 arbeidsdager. Alt utover det (f.eks. 61) behandles som 60. Denne begrensningen bidrar til å opprettholde systemstabilitet og kan bare økes med forsiktighet.
Vi tilbyr også konstante funksjoner, som representerer ofte brukte verdier i betingelser. De forenkler uttrykk, som å sjekke om en dato faller på en ukedag, f.eks. ”weekday(dateNowSender) mellom monday;friday”.
| Navn | Resultattype |
| monday | Integer |
| tuesday | Integer |
| wednesday | Integer |
| thursday | Integer |
| friday | Integer |
| saturday | Integer |
| sunday | Integer |
Avrundingsfunksjoner
Avrundingsfunksjonene kan brukes til å runde av en verdi (f.eks. prisen). Verdien kan være enten numerisk eller en funksjon som costprice/salesprice:
round(123.45) → runde opp til heltall
round(123.45; 10.0) → runde opp til 10
round(123.45; 10.0; “down”) → runde ned til 10
round(123.45; 10.0; “down99”) → runde ned til 10 og trekk fra minste verdi basert på desimaler for å få 119.99
Join-funksjoner
join()-funksjonen lar deg kombinere flere strengverdier til én enkelt streng. Dette kan være spesielt nyttig når du ønsker å bygge oppslagstaster dynamisk basert på flere datapunkter og bruke disse tastene til å hente verdier fra en betingelsesliste.
Typiske bruksområder kan inkludere:
- Konstruksjon av sammensatte nøkler for oppslag (f.eks. Sone + Valuta)
- Forenkling av kompleks regel-logikk
- Dynamisk valg av verdier som terskler for fri frakt eller pristrinn basert på sone, vekt, volum eller valuta
Ved å kombinere verdier ved kjøretid kan join() erstatte lange betingede uttrykk med kortere regel-logikk.
Funksjonssyntaks
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 uttrykket ovenfor blir landet oversatt til en sone ved bruk av oppslaget tocountry fra en betingelsesliste kalt "Zones", som forventes å returnere en streng som "Zone1". Ved bruk av join kombineres sonen deretter med valutaen, og gir for eksempel "Zone1EUR". Denne verdien brukes deretter til å slå opp terskelen i en betingelsesliste kalt "FreeShipThresholds".
Utdata er en enkelt sammensatt streng.