Zum Inhalt

Transformer

Ein Transformer ist die reine Mapping-Brücke von den Sources eines DataContract zum Zielschema einer Entity. Jede Zielspalte erhält einen Mapping-Ausdruck, der aus den Quellspalten liest.

Mappings sind DuckDB-Ausdrücke

Ein Mapping ist ein DuckDB-SQL-Ausdruck, kompiliert über den AST von SQLGlot. Beispiele:

Art Beispiel
Durchreichen "Konto"
Transformation LPAD(TRIM("Konto"), 6, '0')
Typumwandlung CAST(REPLACE("Betrag", ',', '.') AS DECIMAL(18,4))
Wörterbuch-Lookup (SELECT "name" FROM dict_kontenplan WHERE "code" = ...)
Kontext-Injektion CAST("Betrag" AS DECIMAL) * (SELECT rate FROM session_context)
Lookup in Kontexttabelle (SELECT "name" FROM ctx_objektname WHERE "code" = "Objekt" LIMIT 1) — eine Tabelle aus dem Session-Kontext (z. B. per Context Source geholt), unter demselben ctx_<name> wie in den Regeln

Gequotete Identifier ("Konto") sind die tatsächlichen Spaltenüberschriften des Lieferanten aus der Vertrags-Source.

Bearbeiten in der Oberfläche. Jedes Mapping-Feld und jeder Zeilenfilter hat die Schaltfläche Open in SQL editor. Der Editor listet src (die Spalten dieser Rolle), src_<rolle> für die übrigen Rollen der Revision, die Kataloge des Projekts (cat_*) und den Kontext (session_context, ctx_<name>) und vervollständigt ihre Namen automatisch; ein Klick auf eine Tabelle oder Spalte fügt sie ein.

Sicher durch Konstruktion

Ausdrücke werden nie als Strings zusammengesetzt. Sie werden in einen typisierten AST geparst, gegen eine Funktions-Allowlist geprüft (String-, Mathe-, Typ-Cast-, Null-Handling- und Datumsfunktionen) und bei Author-Zeit abgelehnt, wenn sie etwas außerhalb davon verwenden. Dateisystem- und Umgebungsfunktionen sind blockiert. Ein ungültiges oder unsicheres Mapping schlägt also beim Speichern des Transformers fehl — nicht zur Laufzeit gegen echte Daten.

Zeilenfilter — nur die gewünschten Zeilen behalten

Standardmäßig wird jede Quellzeile gemappt. Ein Transformer kann zusätzlich pro Source-Rolle einen optionalen Zeilenfilter tragen — ein boolesches DuckDB-Prädikat. Eine Zeile bleibt erhalten, wenn das Prädikat wahr ist; Zeilen, für die es falsch ergibt, werden vor dem Mapping verworfen und erreichen weder die Entity-Daten noch Validierung, Abstimmung oder das Export-Paket.

Typischer Einsatz ist der Ausschluss von Konten, die bewusst nicht nach SAP gemappt werden („explizit nicht gemappt"):

"Konto" NOT IN (SELECT "code" FROM cat_kontenplan__provider WHERE "mapping_type" = 'ignore')

Gesetzt wird er im Tab Row Filter des Transformers — ein Prädikat pro Rolle. Der Filter wird wie ein Mapping validiert (AST + Funktions-Allowlist), ein fehlerhaftes Prädikat wird also beim Speichern abgelehnt. Beim Lauf einer Session werden verworfene Zeilen auf der Stufe Transformed ausgewiesen — „N rows excluded by row filter", mit der Anzahl pro Rolle und dem Prädikat —, sodass der Ausschluss nachvollziehbar und nie stillschweigend ist.

Reine Mapper

Transformer bilden nur einen Vertrag auf eine Entity ab. Sie tragen keine dateiübergreifende Logik — die Abstimmung (Reconciliation) zwischen mehreren Entities liegt am Projekt, wodurch Transformer einfach und über Revisionen hinweg wiederverwendbar bleiben.

Verwandt