Feld-Mapping¶
Im Feld-Mapping legst du fest, welcher Wert in der Eingangsdatei auf welches Shopware-Feld in der finalen Bestellung gemappt wird.
Beispiel: dein Großkunde sendet eine CSV mit den Spalten email, sku, qty. In Shopware brauchen wir aber header.customerEmail, lineItem.productNumber, lineItem.quantity. Genau das macht das Mapping.
Mapping anlegen¶
- Importprofil öffnen → ganz nach unten zum Card Feld-Mapping scrollen
- Auf + Mapping hinzufügen klicken — eine neue leere Zeile erscheint
- Im Inline-Edit-Modus die Felder ausfüllen
- Mit Klick auf das blaue ✓ rechts speichern

Mapping-Felder¶
| Feld | Bedeutung |
|---|---|
| Ziel-Feld (Shopware) | Was in der Bestellung gesetzt wird (Dropdown mit allen erlaubten Werten) |
| Quell-Pfad (Eingangsdatei) | Dotted-Path in die geparste Eingangsdatei (z. B. rows.0.email) |
| Transformer | Optional: Wert vor dem Setzen verändern (trim, upper, lookup, …) |
| Pflicht | Wenn an, schlägt die Pipeline fehl, wenn der Wert nicht gefunden wird |
| Priorität | Reihenfolge bei mehreren Mappings auf das gleiche Feld (höher = später) |
Ziel-Felder (Übersicht)¶
Header (gilt für die ganze Bestellung)¶
| Ziel-Feld | Typ | Bedeutung |
|---|---|---|
header.sourceReference |
string | Externe Referenz (z. B. PO-Nummer) — landet in der Bestellung als Notiz |
header.customerEmail |
string | E-Mail des Kunden — Pflicht bei Match-Strategie: Per E-Mail |
header.customerNumber |
string | Kundennummer — Pflicht bei Match-Strategie: Per Kundennummer |
header.customerName |
string | Anzeigename (für die Bestellung) |
header.currencyIsoCode |
string | ISO-Code der Währung (z. B. EUR) |
header.requestedDeliveryDate |
datetime | Wunsch-Liefertermin |
header.billingStreet, billingZip, billingCity, billingCountryIso |
string | Rechnungsadresse |
header.shippingStreet, shippingZip, shippingCity, shippingCountryIso |
string | Lieferadresse |
header.comment |
string | Kunden-Kommentar zur Bestellung |
LineItem (gilt pro Bestellzeile)¶
| Ziel-Feld | Typ | Bedeutung |
|---|---|---|
lineItem.lineNumber |
string | Position in der Bestellung |
lineItem.productNumber |
string | Artikelnummer — Pflicht bei Produkt-Strategie: Artikelnummer |
lineItem.ean |
string | EAN/GTIN — Pflicht bei Produkt-Strategie: EAN |
lineItem.manufacturerNumber |
string | Hersteller-Nummer — Pflicht bei Produkt-Strategie: Hersteller-Nummer |
lineItem.customerProductNumber |
string | Kunden-eigene SKU (für Cross-Reference, optional) |
lineItem.description |
string | Zusätzliche Produktbeschreibung |
lineItem.quantity |
number | Menge — Standard 1 |
lineItem.unitPrice |
number | Einzelpreis aus der Bestelldatei |
lineItem.totalPrice |
number | Gesamtpreis pro Position |
lineItem.requestedDeliveryDate |
datetime | Liefertermin pro Position |
Quell-Pfade (Dotted-Notation)¶
Der Quell-Pfad zeigt innerhalb der geparsten Eingangsdatei auf den Wert. Die Notation hängt vom Format ab:
CSV¶
Die CSV wird als Liste von Objekten geparst. Mappe Header-Werte mit rows.0.<Spalte> (= erste Zeile), LineItem-Werte mit <Spalte> (= aktuelle Zeile beim Iterieren der Items).
Beispiel-CSV:
Mapping:
| Ziel-Feld | Quell-Pfad |
|---|---|
header.customerEmail |
rows.0.email |
lineItem.productNumber |
sku |
lineItem.quantity |
qty |
JSON¶
Direkt die Verschachtelung des JSON-Dokuments. Header-Werte aus dem Wurzel-Objekt, LineItem-Werte relativ zu jedem Item.
Beispiel-JSON:
{
"buyer": {
"email": "b2b@example.com",
"customerNumber": "1337"
},
"items": [
{ "sku": "SW10000", "qty": 2 },
{ "sku": "SW10001", "qty": 1 }
]
}
Mapping (Profil mit lineItemsPath = items):
| Ziel-Feld | Quell-Pfad |
|---|---|
header.customerEmail |
buyer.email |
header.customerNumber |
buyer.customerNumber |
lineItem.productNumber |
sku |
lineItem.quantity |
qty |
XML¶
XML wird über SimpleXML geparst und in eine assoziative Struktur umgewandelt.
Beispiel-XML:
<?xml version="1.0" encoding="UTF-8"?>
<Order>
<Buyer>
<EmailAddress>b2b@example.com</EmailAddress>
</Buyer>
<OrderLines>
<OrderLine>
<SKU>SW10000</SKU>
<Quantity>2</Quantity>
</OrderLine>
</OrderLines>
</Order>
Mapping (Profil mit lineItemsPath = Order.OrderLines.OrderLine):
| Ziel-Feld | Quell-Pfad |
|---|---|
header.customerEmail |
Order.Buyer.EmailAddress |
lineItem.productNumber |
SKU |
lineItem.quantity |
Quantity |
Transformer-Library¶
Optional kannst du den Wert vor dem Setzen umwandeln:
| Transformer | Beispiel | Was es tut |
|---|---|---|
trim |
" ABC " → "ABC" |
Leerzeichen am Anfang/Ende entfernen |
upper |
"abc" → "ABC" |
Groß-Schreibung |
lower |
"ABC" → "abc" |
Klein-Schreibung |
prefix |
"123" → "DE-123" |
Festen Präfix voranstellen |
suffix |
"123" → "123-EU" |
Festen Suffix anhängen |
replace |
"a-b" → "a_b" |
Suchen + Ersetzen |
lookup |
"DE" → "Germany" |
Lookup-Tabelle anwenden (z. B. Länder-Code-Mapping) |
date_format |
"02/05/2026" → "2026-05-02" |
Datums-Umformatierung |
Die Transformer-Optionen werden im Inline-Edit als JSON-Wert hinterlegt (z. B. {"value":"DE-"} für Prefix).
Häufige Fehler¶
| Fehler | Ursache + Lösung |
|---|---|
No matching customer found |
Mapping header.customerEmail zeigt auf falschen Pfad — prüfe in der Inbound-Detail-Ansicht unter „Geparste Daten", welcher Pfad tatsächlich auf den Wert zeigt |
Some products could not be resolved |
Dieselbe Logik für lineItem.productNumber — Wert nicht gefunden oder Produkt-Strategie passt nicht |
| Pipeline läuft, aber Werte sind leer | lineItemsPath im Profil zeigt auf falsche Liste — bei JSON z. B. items statt lineItems |
Nächster Schritt¶
→ Eingangs-Queue & Pipeline — Datei hochladen, Pipeline starten, Ergebnis prüfen.