Zum Inhalt

Feld-Mapping

Das Mapping verbindet Spalten/Felder aus Deiner Quelldatei mit Feldern der Shopware-DAL. Das passiert vollständig im visuellen UI – kein YAML, kein Code.

Wie das Mapping-UI aufgebaut ist

Beim Bearbeiten eines Profils ist der Tab „Mapping" dreigeteilt:

  • Links: Quell-Spalten (CSV-Header / XLSX-Header / XML-XPath-Treffer).
  • Mitte: Verbindungen, jeweils mit Resolver und Optionen.
  • Rechts: Shopware-DAL-Felder (entity-spezifisch).

Du verbindest per Klick eine Quell-Spalte links mit einem DAL-Feld rechts. Jede Verbindung kann zusätzlich:

  • Resolver-Logik anwenden (z.B. „Manufacturer-Name → Manufacturer-ID nachschlagen")
  • Default-Wert setzen, wenn die Quelle leer ist
  • Pflicht oder optional sein

Standard-Resolver

Das Plugin bringt für die häufigsten Anwendungsfälle vordefinierte Resolver mit.

Produkt-Resolver

Resolver Quelle Auflösung
ProductNumber-Match Produktnummer-String findet productNumber exakt
EAN/GTIN-Match EAN-String findet ean exakt
Custom-Field-Match beliebiger String findet über customFields.<field>

Kategorien-Resolver

Resolver Quelle Auflösung
Kategorie-Pfad Hauptkategorie > Unterkategorie > Detail folgt der Hierarchie und ermittelt die richtige Category-ID
Kategorie-Nummer Eindeutige Kategorie-ID/Number direkte Suche
Was passiert wenn der Pfad nicht existiert?

Im Profil unter Verhalten wählbar: - create_if_missing: fehlende Kategorien werden angelegt - skip_record: Datensatz übersprungen, Log-Eintrag - fail_job: gesamter Job bricht ab

Hersteller-Resolver

Resolver Quelle Auflösung
Hersteller-Name Hersteller-Name-String findet name (case-insensitive)
Hersteller-ID UUID direkte ID

Custom-Field-Resolver

Resolver Quelle Auflösung
Custom-Field-Wert direkt beliebiger Wert schreibt in customFields.<technical_name>
Custom-Field-Set-Pfad Set-Name + Field-Name findet automatisch das passende Feld

Übersetzungs-Resolver

Resolver Quelle Auflösung
Sprache aus Spaltenname z.B. name_de, name_en schreibt jeweils in passende translation
Sprache fix Wert fix schreibt in eine konfigurierte Sprache

Bestand-/Preis-Resolver

Resolver Quelle Auflösung
Bestand absolut Zahl stock direkt
Bestand relativ +5, -3 rechnet auf vorhandenen Bestand drauf
Preis brutto/netto Zahl + Wahl füllt Bruttopreis und berechnet Netto über Steuersatz – oder umgekehrt
Preis mit Steuersatz aus Quelle Preis + Steuer-% nutzt explizit übergebenen Steuersatz

Beispiel-Mapping: Lieferanten-CSV → Produkte

Quelldatei lieferant.csv:

SKU;EAN;Bestand;Preis_Netto;Hersteller;Kategorie
ACME-1001;4001234567890;25;9.50;ACME GmbH;Werkzeuge > Bohrer
ACME-1002;4001234567891;0;14.99;ACME GmbH;Werkzeuge > Säge

Mapping:

Quell-Spalte Resolver DAL-Feld
SKU Match: ProductNumber-Match productNumber (= Match-Schlüssel)
EAN – (direkt) ean
Bestand Bestand absolut stock
Preis_Netto Preis netto → brutto rechnen price.net + price.gross (auto)
Hersteller Hersteller-Name manufacturerId
Kategorie Kategorie-Pfad (Separator >) categories

Bei Bestand=0 würde Shopware standardmäßig den Bestand auf 0 setzen. Soll das Plugin das überspringen? → Validation-Mode in den Profil-Verhalten anpassen, oder Custom Pre-Hook nutzen.

Eigene Resolver per Plugin-Erweiterung

Für seltenere Mappings (z.B. eigene ERP-Logik) lässt sich das Plugin erweitern. Ein eigener Resolver implementiert das Interface Kommora\ImportExportPro\Resolver\ResolverInterface und wird per Service-Tag registriert. Details siehe Plugin-Erweiterbarkeit – kommt mit nächster Doku-Iteration.

Default-Werte und Bedingungen

Pro Mapping-Verbindung gibt es zusätzlich:

  • Default-Wert: wird gesetzt, wenn die Quell-Spalte leer ist
  • Pflicht (an/aus): wenn Pflicht und leer, wird der Datensatz übersprungen + Fehler protokolliert
  • Transformation (vor Resolver): String trimmen, Replace ,., Uppercase/Lowercase, Regex-Extract
  • Bedingung (After-Resolver): nur schreiben wenn Wert > 0, !empty, regex-match

Mapping testen ohne Schreibvorgänge

Im Profil „Dry-Run" aktivieren und den Job starten. Das Plugin liest die Datei, wendet alle Resolver an, schreibt aber nichts in die DB. Im Job-Log steht pro Datensatz, was geschrieben WORDEN WÄRE.

Mapping kopieren von Profil zu Profil

Über „Profil als JSON exportieren" und „aus JSON importieren" lässt sich das Mapping zwischen Profilen übertragen – auch zwischen verschiedenen Shopware-Instanzen.

Weiter