Scripting API¶
Die Scripting API bietet schreibgeschützten Zugriff auf DATAMIMIC-Kontextdaten aus benutzerdefinierten Python-Skripten. Verwende sie, um wiederverwendbare Funktionen zu erstellen, die aus script=-Ausdrücken aufgerufen werden können.
Note
Diese Seite dokumentiert die Python-Helfer-API, die während der Ausdrucksauswertung verfügbar ist. Wenn Du nach DSL-Regeln zur Variablenauflösung wie this.*, this.parent.* oder benannten verschachtelten Pfaden innerhalb von <generate> suchst, siehe Variablen-Scope in verschachtelten Generates.
DateTimeGenerator(reference=...) unterstuetzt nur die Lookup-Teilmenge aus bare Identifiern, this.<field>, this.parent.<field> und root.<field>.
Übersicht¶
| Feature | Beschreibung |
|---|---|
| Zweck | Zugriff auf Kontextdaten aus benutzerdefinierten Python-Funktionen |
| Zugriff | Schreibgeschützt (gibt Kopien zurück, keine Live-Referenzen) |
| Geltungsbereich | Funktioniert nur während der Ausdrucksauswertung |
Schnellstart¶
1. Python-Skript erstellen¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
2. In XML-Modell verwenden¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Datetime-Helfer In Ausdruecken¶
Datetime-Arithmetik steht auch direkt in script=...-Ausdruecken ohne Importe zur Verfuegung.
add_days(dt, n)add_hours(dt, n)add_minutes(dt, n)add_seconds(dt, n)add_weeks(dt, n)add_months(dt, n)add_years(dt, n)date_offset(dt, '30d')start_of_day(dt),end_of_day(dt)start_of_month(dt),end_of_month(dt)start_of_year(dt),end_of_year(dt)
Datetime-Werte im Evaluator bieten ausserdem chainbare Methoden wie issue_at_raw.add_days(30) und created_at.add_months(1).end_of_month().
1 2 3 4 | |
Wichtig:
- Arithmetik ist bewusst raw-only.
- Nach
outDateFormatsehen nachfolgende Ausdruecke einen String und kein Datetime mehr. - Wenn ein formatierter Wert versehentlich verwendet wird, liefert die Runtime einen typisierten Script-Fehler mit Hinweis auf die Raw-Regel.
- Datencontainer behalten reale Underline-Keys wie
_idund_dtwaehrend der Ausdrucksauswertung bei. Diese gelten als Datenfelder und nicht als oeffentliche API fuer beliebige Objekt-Interna.
API-Referenz¶
Import¶
1 2 3 4 5 6 7 8 9 | |
Funktionen¶
load_memstore(product_name) -> list[dict]¶
Alle Datensätze aus einem Memstore laden.
load_memstore_page(product_name, skip, limit) -> list[dict]¶
Eine Seite von Datensätzen aus dem Memstore laden (für große Datensätze).
get_variable(name, default=None) -> Any¶
Einen Variablenwert aus dem aktuellen Datensatzkontext abrufen.
get_property(name, default=None) -> Any¶
Eine Eigenschaft aus dem Root-Kontext abrufen (z.B. aus .properties-Dateien).
get_current_product() -> dict | None¶
Eine Kopie des aktuellen Produkts abrufen (alle bisher generierten Schlüssel).
get_record_position() -> int | None¶
Die 1-basierte Position des aktuellen Datensatzes abrufen.
get_context_info() -> dict¶
Einen schreibgeschützten Snapshot der Kontextmetadaten abrufen.
Wichtig: Nur während Auswertung¶
Nur innerhalb von Funktionen aufrufen
Die Scripting API funktioniert nur während der Ausdrucksauswertung. Rufe diese Funktionen nicht zur Modul-Importzeit auf.
Korrekt:
1 2 3 | |
Falsch:
1 2 | |
Best Practices¶
- Funktionen definieren, nicht zur Importzeit ausführen - API funktioniert nur während der Auswertung
- Standardwerte verwenden - Fehlende Variablen elegant behandeln
- Teure Lookups cachen - Modulebene-Caches für wiederholte Lookups verwenden
- Funktionen rein halten - Kontext nicht ändern; berechnete Werte zurückgeben
- Funktionen dokumentieren - Anderen Teammitgliedern bei der Verwendung helfen