Funktionen sind Werkzeuge, die Ihnen den Zugriff auf dynamische Daten ermöglichen, z. B. um zu prüfen, ob morgen ein Arbeitstag ist oder um den nächsten Feiertag für den Absender zu finden. Sie werden beim Schreiben fortgeschrittener Bedingungen verwendet. Diese Anleitung erklärt, wie Funktionen funktionieren und wie man sie verwendet.
Inhalt dieses Artikels:
- Was ist eine Funktion?
- Funktionseingaben und Daten
- Liste der verfügbaren Funktionen
- Funktionen prüfen
- Spezielle Funktionen
- Rundungsfunktionen
-
Join-Funktionen
Was ist eine Funktion?
Eine Funktion ist ein wiederverwendbares Werkzeug, das Daten basierend auf bestimmten Eingaben zurückgibt. Zum Beispiel kann eine Funktion Ihnen sagen:
- Den nächsten gesetzlichen Feiertag
- Ob ein bestimmtes Datum ein Arbeitstag ist
- Eine Zahl, ein Datum oder einen Textstring basierend auf Ihrer Eingabe
Wenn Sie keine Eingabe (genannt Argument) angeben, verwendet die Funktion einen Standardwert, der normalerweise auf dem heutigen Datum und der relevanten Zeitzone basiert.
Funktionseingaben und Daten
Einige Funktionen akzeptieren ein oder mehrere Argumente (Eingaben). Diese Eingaben müssen zwei Regeln folgen:
- Richtiger Typ: Eine Funktion, die ein Datum erwartet, akzeptiert keine Zahl oder Text.
- Richtige Reihenfolge: Wenn eine Funktion zuerst einen String und dann eine Zahl erwartet, müssen Sie diese Reihenfolge einhalten.
Sie können manchmal spätere Argumente weglassen, müssen aber immer die früheren einschließen.
Gültig: FunctionB(String, Integer)
Ungültig: FunctionB(String, Date)
Funktionen geben verschiedene Datentypen zurück:
- Text (z. B. ein Feiertagsname)
- Zahlen (z. B. Anzahl der Tage bis zu einem Datum)
- Datum (z. B. der nächste Arbeitstag)
Sie können diese Daten in weiteren Bedingungen verwenden, z. B. um Tage zu einem Datum hinzuzufügen oder Werte zu vergleichen.
Liste der verfügbaren Funktionen
| Name | Ergebnistyp | Argumenttypen | Pflichtargumente | Nur für Ausdrücke verfügbar? |
| 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 oder carrierEtaDate | Date | - | - | Ja |
| dateTimeNowSender/dateTimeNowReceiver | DateTime | - | - | - |
| carrierEtaFromDateTime | DateTime | - | - | Ja |
| carrierEtaToDateTime oder carrierEtaDateTime | DateTime | - | - | Ja |
| timeNowSender/timeNowReceiver | Zeit | - | - | - |
| 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 oder carrierEtaDay | String | - | - | Ja |
| carrierEtaInterval | String | - | - | Ja |
| toUpperCase | String | String | - | - |
| allPackageContents | Array | - | - | - |
Funktionen prüfen
Bedingungen werden in zwei Phasen ausgewertet:
- Phase 1: Grundlegende Prüfungen (keine Prüf-Funktionen)
- Phase 2: Erweiterte Prüfungen mit Prüf-Funktionen
Prüf-Funktionen betrachten detailliertere oder externe Daten (wie Feiertage) und sind mit dem Label „INSPECTING“ gekennzeichnet. Wenn keine Prüf-Funktionen verwendet werden, bleibt Phase 2 leer.
Prüf-Funktionen haben keinen normalen Rückgabetyp. Stattdessen beeinflussen sie die Checkout-Lieferoptionen auf allgemeinere Weise, z. B. indem sie die Reihenfolge der zurückgegebenen Optionen ändern.
| Name | Ergebnis |
| enabled | Boolean |
| costPrice | Double |
| salesPrice | Double |
Spezielle Funktionen
Die folgenden „Einheitsfunktionen“ sind ebenfalls verfügbar und können in Kombination mit bestimmten Operationen verwendet werden (keine von ihnen unterstützt Argumente):
| Name | Ergebnistyp |
| hour | TimePeriod |
| minute | TimePeriod |
| year | Period |
| month | Period |
| day | Period |
| workdaySender/workdayReceiver | WorkdayPeriod |
Arbeitstage können je nach Standort variieren. Was für den Absender ein Arbeitstag ist, kann für den Empfänger ein Feiertag sein. Deshalb muss die Arbeitstag-Einheit entweder mit Sender oder Empfänger verwendet werden.
Beim Hinzufügen von Arbeitstagen zu einem Datum werden Wochenenden und nationale Feiertage basierend auf der relevanten Zeitzone berücksichtigt.
Hinweis: Sie können nur bis zu 60 Arbeitstage addieren oder subtrahieren. Alles darüber hinaus (z. B. 61) wird als 60 behandelt. Diese Begrenzung dient der Systemstabilität und kann nur mit Vorsicht erhöht werden.
Wir bieten auch Konstantenfunktionen an, die häufig verwendete Werte in Bedingungen darstellen. Sie vereinfachen Ausdrücke, wie z. B. die Prüfung, ob ein Datum auf einen Wochentag fällt, z. B. „weekday(dateNowSender) zwischen monday;friday“.
| Name | Ergebnistyp |
| monday | Integer |
| tuesday | Integer |
| wednesday | Integer |
| thursday | Integer |
| friday | Integer |
| saturday | Integer |
| sunday | Integer |
Rundungsfunktionen
Die Rundungsfunktionen können verwendet werden, um einen Wert (z. B. den Preis) zu runden. Der Wert kann entweder numerisch sein oder eine Funktion wie costprice/salesprice:
round(123.45) → aufgerundete Ganzzahl
round(123.45; 10.0) → auf 10 runden
round(123.45; 10.0; „down“) → auf 10 abrunden
round(123.45; 10.0; „down99“) → auf 10 abrunden und den kleinsten Betrag basierend auf Nachkommastellen subtrahieren, um 119,99 zu erhalten
Join-Funktionen
Die join()-Funktion ermöglicht es Ihnen, mehrere Zeichenkettenwerte zu einer einzigen Zeichenkette zu kombinieren. Dies ist besonders nützlich, wenn Sie dynamisch Suchschlüssel basierend auf mehreren Datenpunkten erstellen und diese Schlüssel verwenden möchten, um Werte aus einer Bedingungsliste abzurufen.
Typische Anwendungsfälle könnten sein:
- Kombinieren von zusammengesetzten Schlüsseln für Nachschlagen (z. B. Zone + Währung)
- Vereinfachung komplexer Regel-Logik
- Dynamische Auswahl von Werten wie Schwellenwerte für kostenlosen Versand oder Preisklassen basierend auf Zone, Gewicht, Volumen oder Währung
Durch das Kombinieren von Werten zur Laufzeit kann join() lange bedingte Ausdrücke durch kürzere Regel-Logik ersetzen.
Funktionssyntax
join("/"; ["hello";"world"]) => "hello/world"
join("+"; ["hello"; 1; 2; 3]) => "hello+1+2+3"
Beispiel:
cart_price >= toNumber(join(""; [tocountry from "Zones"; currency]) from "FreeShipThresholds")
Im obigen Ausdruck wird das Land mithilfe der Nachschlagefunktion tocountry aus einer Bedingungsliste namens „Zones“ in eine Zone übersetzt, die voraussichtlich einen String wie „Zone1“ zurückgibt. Mit join wird die Zone dann mit der Währung kombiniert, wodurch beispielsweise „Zone1EUR“ entsteht. Dieser Wert wird dann verwendet, um den Schwellenwert in einer Bedingungsliste namens „FreeShipThresholds“ nachzuschlagen.
Das Ergebnis ist eine einzelne zusammengefügte Zeichenkette.