Zum Inhalt

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.

Ü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
# my_functions.py
from datamimic_ee.scripting import load_memstore, get_variable

def get_customer_name(customer_id: str) -> str:
    """Kundenname aus Memstore nachschlagen."""
    customers = load_memstore("customers")
    for customer in customers:
        if customer.get("id") == customer_id:
            return customer.get("name", "Unbekannt")
    return "Nicht gefunden"

def format_amount(multiplier: float = 1.0) -> str:
    """Betrag des aktuellen Datensatzes mit Währung formatieren."""
    amount = get_variable("amount", 0)
    currency = get_variable("currency", "USD")
    return f"{currency} {amount * multiplier:,.2f}"

2. In XML-Modell verwenden

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<setup>
    <!-- Dein Skript laden -->
    <execute uri="my_functions.py"/>

    <!-- Memstore mit Kundendaten füllen -->
    <memstore id="mem"/>
    <generate name="customers" source="data/customers.ent.csv" target="mem"/>

    <!-- Deine Funktionen in Ausdrücken verwenden -->
    <generate name="invoices" source="data/invoices.ent.csv" target="JSON">
        <!-- Quellspalten sind bereits im Kontext; <key> nur zum Überschreiben/Hinzufügen -->
        <key name="customer_name" script="get_customer_name(customer_id)"/>
        <key name="formatted_total" script="format_amount(1.1)"/>
    </generate>
</setup>

API-Referenz

Import

1
2
3
4
5
6
7
8
9
from datamimic_ee.scripting import (
    load_memstore,
    load_memstore_page,
    get_variable,
    get_property,
    get_current_product,
    get_record_position,
    get_context_info,
)

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
def my_function():
    # Wird während der Ausdrucksauswertung aufgerufen
    return load_memstore("data")  # Funktioniert

Falsch:

1
2
# Wird zur Importzeit aufgerufen - führt zu Fehler!
data = load_memstore("data")  # Fehler: I858

Best Practices

  1. Funktionen definieren, nicht zur Importzeit ausführen - API funktioniert nur während der Auswertung
  2. Standardwerte verwenden - Fehlende Variablen elegant behandeln
  3. Teure Lookups cachen - Modulebene-Caches für wiederholte Lookups verwenden
  4. Funktionen rein halten - Kontext nicht ändern; berechnete Werte zurückgeben
  5. Funktionen dokumentieren - Anderen Teammitgliedern bei der Verwendung helfen