Zurück zum Blog
engineering||10 Min. Lesezeit

SAP-Hybris-Impex, wenn niemand im Team – mich eingeschlossen – es lesen kann

AR
Aral Roca

Ersteller von Kitmul

Ein Arbeitsplatz mit Code auf dem Bildschirm und ein Entwickler, der ein SAP-Hybris-Impex-Importskript durchsieht
Ein Arbeitsplatz mit Code auf dem Bildschirm und ein Entwickler, der ein SAP-Hybris-Impex-Importskript durchsieht

Ich bin gerade als Externer in einem Team eingebunden, das die Hybris Management Console, kurz HMC, für die Administration einer SAP-Commerce-Umgebung nutzt. Alle paar Tage wird die gemeinsam genutzte Umgebung aus der Produktion aufgefrischt, was genau das ist, was man für die meisten Daten will, und genau das, was man für halbfertige Konfigurationen, die es noch nicht in die Produktion geschafft haben, nicht will. Ein Inhaltstyp, den Sie am Dienstag registriert haben, eine Workflow-Anpassung vom Mittwoch, ein Testbenutzer, den Sie für ein Demo gebraucht haben; alles weg am Freitagmorgen. Jeder im Team hat diese Schleife oft genug durchlebt, um nicht mehr überrascht zu sein.

Impex ist die naheliegende Antwort. Wenn Sie eine Konfigurationsänderung als Impex-Datei beschreiben können, können Sie sie nach jedem Refresh wieder einspielen, ins Repo committen, im Code-Review anschauen und wie den Rest der Plattform behandeln. Das ist das offizielle Playbook und es ist das richtige.

Das Problem ist mehr menschlich als technisch. Niemand im Team liest Impex flüssig. Das Format ist älter als die meisten Sprachen, die das Team täglich schreibt, das Werkzeug drumherum ist dünn gesät, und ein Pull Request mit sechzig Zeilen Semikolon-separiertem Text lädt nicht gerade zu sorgfältiger Durchsicht ein. Also klicken die Leute lieber durch die HMC, akzeptieren, dass die Arbeit in ein paar Tagen verdunstet, und machen weiter. Weil ich weiß, dass sich das mit Werkzeugen lösen lässt und nicht mit einem Schulungstermin, habe ich eine Woche damit verbracht, die acht Browser-Tools zu bauen, um die es in diesem Beitrag geht.

Was Impex ist, in einem Absatz

Impex ist ein textbasiertes Skriptformat, das SAP Commerce verwendet, um Zeilen im Typsystem der Plattform einzufügen, zu aktualisieren oder zu entfernen. Jedes Hybris-Objekt (Product, Catalog, Category, PriceRow, User, Customer, Order) ist ein in Java definierter Typ, und Impex ist der Weg, Daten gegen diese Typen zu schieben, ohne Java zu schreiben. Eine Datei ist eine Folge von "Blöcken", jeder mit einer Kopfzeile, die Modus und Typ deklariert (INSERT_UPDATE Product;code[unique=true];name), gefolgt von Semikolon-separierten Datenzeilen (;P-0001;My Product). Kommentare beginnen mit #. Makros beginnen mit $. Qualifikationspfade stehen in runden Klammern: catalogVersion(catalog(id),version). Die offizielle Impex-Interpreter-Referenz ist die maßgebliche Spezifikation.

Das ist die ganze Sprache. Sie ist wirklich klein. Was das Lesen schwer macht, ist nicht die Grammatik; es ist ein tabellarisches Format, das in einem Texteditor angezeigt wird, ohne Spaltenausrichtung, ohne Syntax-Highlighting, ohne irgendeine der Annehmlichkeiten, die man sich für das Durchsehen einer Tabellenkalkulation wünschen würde.

Warum HMC plus ein regelmäßiger Refresh dieses Gespräch erzwingt

Es gibt ein wiederkehrendes Muster in SAP-Commerce-Projekten: Sie haben eine produktionsähnliche Umgebung, die sich Produkt, QA und Entwicklung teilen. Um sie nahe an der Realität zu halten, führt jemand nach einem Zeitplan einen Refresh aus der Produktion durch; wöchentlich, zweiwöchentlich, über Nacht. Dieser Refresh ist nicht verhandelbar; so werden Bugs reproduziert. Aber das heißt, dass jede Konfigurationsänderung, die nur in der HMC lebt, eine Halbwertszeit hat.

Es gibt drei Auswege und nur einer skaliert.

Option eins: den Refresh einstellen. Sie driften sofort von der Produktion ab, die QA übersieht echte Bugs, der Refresh kommt irgendwann zurück und Sie haben einen Monat verloren.

Option zwei: die Leute bitten, nicht in der HMC zu klicken. Das ist ein Sozialvertrag, der ungefähr einen Sprint lang hält. Das Tool ist da, es funktioniert, Deadlines gibt es.

Option drei: jede Änderung geht als Impex-Datei in die Versionsverwaltung und wird nach jedem Refresh erneut eingespielt. Das ist die Antwort, die die Plattform von Anfang an wollte. Es ist auch die, für die Ihr Team mit dem Lesen und Schreiben von Impex vertraut sein muss, was mich zum Anfang dieses Beitrags zurückbringt.

Die acht Tools

Regale eines Retail-Katalogs; Impex ist die Rohrleitung hinter jeder Produktkachel, die Sie in einem SAP-Commerce-Storefront sehen
Regale eines Retail-Katalogs; Impex ist die Rohrleitung hinter jeder Produktkachel, die Sie in einem SAP-Commerce-Storefront sehen

Alles Folgende läuft lokal im Browser. Nichts wird hochgeladen. Der Parser ist ein TypeScript-Modul von etwa 550 Zeilen, das Felder in Anführungszeichen, escapte Semikolons, Zeilenfortsetzungen, Makros, Modifier-Blöcke und Mehrfachblock-Dateien behandelt. Falls Sie reales Impex finden, mit dem dieser Parser nicht umgehen kann, würde mich das interessieren.

Impex-Tabelleneditor

Das ist das Tool, das in meinem Team die Hauptlast trägt. Fügen Sie einen Block ein, bekommen Sie ein Raster im Tabellenkalkulations-Stil, bearbeiten Sie Zellen direkt, fügen Sie Zeilen hinzu oder entfernen sie, kopieren Sie das neu generierte Impex wieder heraus. Wenn die Person, die die Änderung schreibt, kein Impex liest, aber Excel liest, ist das die Brücke. Es ist auch das Tool, zu dem ich zuerst greife, wenn ich eine Änderung über zehn Zeilen machen muss, ohne durch Semikolons zu scrollen.

Wenn nichts anderes aus diesem Beitrag hängen bleibt, ist der Tabelleneditor der, den man als Lesezeichen setzt.

Impex-zu-CSV-Konverter

Verwandelt jeden Impex-Block in CSV, ein Header pro Spalte. Nützlich, wenn jemand aus dem Content den aktuellen Stand eines Katalogabschnitts in einer Tabellenkalkulation sehen möchte, ohne auf einen Entwickler zu warten.

CSV-zu-Impex-Konverter

Der umgekehrte Weg: Ein CSV (oft aus Google Sheets eingefügt) wird zu einem Impex-Skript, mit explizit ausgewähltem Typnamen und Unique-Spalte. Produktleute können die Änderung in Sheets entwerfen, der Entwickler konvertiert und committet sie. Der Review-Diff bleibt prüfbar.

Impex zu JSON und JSON zu Impex

JSON ist die Lingua franca von allem, was nicht Impex ist. Wenn Sie eine Migration skripten, Impex aus einer Single Source of Truth generieren oder zwei Versionen diffen, ist eine strukturierte Darstellung einfacher als mit Regex auf Semikolons einzuschlagen. Jeder Block wird zu {mode, type, headers, rows}, Makros sind First-Class, und die beiden Tools laufen als Round-Trip, damit Sie das JSON bearbeiten und zurückkonvertieren können. Ein Swap-Button oben auf jeder Seite dreht die Richtung um.

Impex-Validator / Linter

Meldet fehlende Typnamen, unbekannte Modifier, doppelte Unique-Keys über Datenzeilen hinweg, undefinierte Makros und Unstimmigkeiten bei der Spaltenanzahl. Nichts davon ist exotisch; all das sind Dinge, die der SAP-Interpreter akzeptiert und dann still einen schlechten Import produziert. Dieses Tool als CI-Check für .impex-Dateien einzuziehen, ist die wirkungsvollste Einzelmaßnahme, die ein Team, das Impex in der Versionsverwaltung nutzt, treffen kann.

Impex-Makro-Expander

Aus einer Impex-Datei mit $macros wird dieselbe Datei mit jeder Referenz inline ersetzt. Fixpunkt-Expansion, damit Makros, die auf andere Makros verweisen, sauber aufgelöst werden. Das ist, was Sie in ein Audit-Artefakt committen. Auditoren werden keine $macros durch Ihr Repo jagen.

Impex zu SQL (approximativ)

Hybris abstrahiert die Datenbank weg. Manchmal ist diese Abstraktion undicht; ein DBA fragt, was tatsächlich geschrieben wird, oder Sie denken über Performance nach. Dieses Tool flacht Impex in approximative INSERT / UPDATE / DELETE für PostgreSQL, MySQL oder ANSI-Standard-SQL ab, mit INSERT_UPDATE als ON CONFLICT / ON DUPLICATE KEY / MERGE, je nach Dialekt. Das ist explizit approximativ; Qualifikationspfade wie catalogVersion(catalog(id),version) lassen sich ohne Ihre items.xml nicht treu als Joins darstellen. Aber für ein Gespräch, bei dem es darum geht, sich ein mentales Modell zu bauen, geht das schneller, als ein lokales Hybris hochzufahren und ins Query-Log zu schauen.

Das Laptop eines Entwicklers zeigt Terminal-Ausgabe; die meiste Impex-Arbeit passiert an der Grenze zwischen Code und Plattform-Konsole
Das Laptop eines Entwicklers zeigt Terminal-Ausgabe; die meiste Impex-Arbeit passiert an der Grenze zwischen Code und Plattform-Konsole

Der Workflow, den ich in meinem Team vorantreibe

Kurzfassung, nach ROI sortiert.

Impex geht in beide Richtungen: exportieren Sie, was Sie in der HMC gemacht haben, in eine .impex-Datei, oder bearbeiten Sie .impex und importieren es, um die HMC ganz zu umgehen. Die HMC ist langsam für Konfiguration; ein Formular mit zwanzig Feldern nervt beim dritten Anfassen. Für alles Repetitive oder Massenhafte ist es mehrfach schneller, das Impex direkt zu schreiben und den Import zu starten, als zu klicken. Und was Sie in der HMC doch tun mussten, wird nach .impex exportiert, damit es den nächsten Refresh überlebt.

Nicht-triviale Bearbeitungen laufen über den Tabelleneditor. Der Flat-Editor reicht, um eine Spalte hinzuzufügen oder ein Flag umzulegen. Für alles jenseits einer Handvoll Zeilen ist der Tabelleneditor die richtige Wahl, der Flat-Editor nicht.

Lassen Sie den Impex-Validator vor jedem Import laufen. Das sind 90 % des Werts des Werkzeugs in diesem Beitrag. Er fängt doppelte Unique-Keys, unbekannte Modifier und undefinierte Makros ab, bevor der SAP-Interpreter sie still akzeptiert und einen schlechten Import produziert. Derzeit ziehen wir ihn von Hand über jede .impex, bevor wir den Import starten; nicht automatisiert, aber er fängt die meisten Überraschungen ab.

Diffs werden auf JSON gemacht. Konvertieren Sie beide Versionen einer Datei über Impex zu JSON und diffen das Ergebnis. Zeilenweise Semikolon-Diffs sind unlesbar; strukturierte Diffs nicht.

Makros werden in Audit-Artefakten expandiert. Committen Sie die kompakte Form. Wenn Compliance fragt, was das Deployment wirklich getan hat, geben Sie ihnen die expandierte Version.

Was weiterhin wehtut

Nicht jedes Impex-Problem hat eine Browser-Tool-Antwort.

Die Evolution des Typsystems ist das große Thema. Wenn jemand in items.xml ein Feld umbenennt, schreibt jede Impex-Datei, die den alten Namen referenziert, still in die falsche Spalte oder scheitert auf verwirrende Weise. Kein Linter im Browser kann das abfangen, ohne Zugriff auf Ihre konkreten Typdefinitionen. Ein kleines projektlokales Skript, das durch Ihre .impex-Dateien läuft und Attribute gegen das aktuelle Typsystem abgleicht, ist ein Wochenende wert. Ich habe keines ausgeliefert, weil jedes Team ein anderes Setup hat.

Performance ist das andere. Große Impex-Importe verhalten sich anders als Bulk-SQL-Loads; der Interpreter validiert jede Zeile, löst Plattform-Events aus und invalidiert Caches. Wenn ein Import über eine Million Zeilen sechs Stunden dauert, ist die Lösung fast nie "die Datenbank tunen". Sie lautet "die Datei splitten und parallel importieren" oder "Cache-Eviction während des Ladens deaktivieren". Die SAP-Commerce-Performance-Dokumentation deckt das gut ab.

Warum ich das gebaut habe und nicht etwas anderes

Die ehrliche Antwort: mein Team (mich eingeschlossen) würde Impex nicht dadurch lesen lernen, dass es mehr Impex liest. Dokumentation hat es nicht gelöst. Pair Programming hat es nicht gelöst. Die Wette war, dass man durch das Überreichen einer Tabellenkalkulations-UI auf einem Impex-Block mit den Worten "bearbeite das wie alles andere auch, das Tool schreibt das Impex für dich" die Schwelle so weit senken könnte, dass Impex ein Format wird, das das Team wie CSV behandelt; eine Transportdarstellung, die zufällig die Form ist, in der SAP Commerce die Daten haben will, keine Sprache, die man beherrschen muss.

Wird das wirklich funktionieren? Ich weiß es noch nicht.

Ich will offen sein, wo ich damit stehe. Diese Tools existieren, weil mein Team versucht, eine größere Frage zu beantworten: kann Configuration-as-Code über Impex das Klicken durch die HMC dauerhaft ersetzen, und zwar für ein Team, das nicht fließend Impex kann? Die Tools sind eine Wette auf "ja". Sie sind kein Beweis.

Es gibt ein paar Wege, wie dieses Experiment auseinanderfallen könnte. Vielleicht ist der Tabelleneditor für 80 % der Bearbeitungen okay, aber die restlichen 20 %, die mit verschachtelten Qualifikationspfaden, Makros, die andere Kataloge referenzieren, und Modifier-Feinheiten zu tun haben, schieben die Leute doch wieder in die HMC zurück und die Disziplin erodiert. Vielleicht ist das Schreiben von Impex der einfache Teil und der harte Teil ist die CI-Pipeline, die die Skripte nach einem Refresh tatsächlich erneut einspielt, worüber dieser Beitrag nicht handelt. Vielleicht entwickelt sich das Typsystem schneller, als das Werkzeug mitkommt, und der Validator produziert Rauschen, das die Leute ignorieren lernen. Jedes davon würde bedeuten, dass "Infrastructure-as-Code in der HMC via Impex" nicht wirklich der richtige Rahmen ist und dass wir eine andere Abstraktion brauchen.

Ich schreibe in ein paar Monaten einen Follow-up, wenn es echte Daten gibt. Entweder werden diese Tools zum Standardweg und Configuration-as-Code funktioniert so, wie SAP es sich schon immer gewünscht hat, oder wir lernen etwas Interessantes darüber, warum es nicht klappt, und das ist dann ein eigener Beitrag. Ich habe keine starke Erwartung in die eine oder andere Richtung.

Wenn Sie SAP Commerce mit demselben HMC-plus-Refresh-Setup betreiben und etwas Ähnliches versuchen wollen: die Tools sind kostenlos, lokal und werden weiter funktionieren, egal zu welchem Schluss ich komme. Setzen Sie die, die zu Ihrem Workflow passen, als Lesezeichen. Falls Sie eigene Daten sammeln, positiv oder negativ, würde ich gern davon hören.

Für den Ökosystem-Kontext: die ImpEx-Dokumentation auf SAP Help ist die kanonische Referenz, die SAP-Commerce-Community-Foren sind besser als Stack Overflow für versionsspezifische Fragen, und der Gartner Magic Quadrant for Digital Commerce zeigt, wo SAP Commerce in der breiteren Enterprise-E-Commerce-Landschaft steht.

Mehr in ein paar Monaten.

Diesen Artikel teilen

Newsletter

Erhalte Produktivitätstipps und Neue Tools Zuerst

Schließe dich Machern und Entwicklern an, die Datenschutz schätzen. Jede Ausgabe: neue Tools, Produktivitäts-Hacks und Updates — kein Spam.

Prioritätszugang zu neuen Tools
Jederzeit abbestellen, ohne Rückfragen