Import/Export: Grundmodul

Mit Hilfe des Import / Exports Plugins lassen sich große Dateimengen mittels CSV oder XML importieren. 

Installation

Das Plugin "Shopware Import/Export" wird wie ein ganz gewöhnliches Plugin installiert. 

Nach der Installation des Plugins solltest Du das Backend einmal neu laden, damit das Plugin in der Menüstruktur sichtbar ist. Gegebenenfalls leerst Du den Konfigurationscache und lädst die Seite nochmals neu. Das Plugin ist anschließend unter dem Menüpunkt "Inhalte" zu finden:

Konfiguration des Plugins

Die Konfiguration des Plugins bietet aktuell die folgenden Einstellungen:

  • Mit der Option Mit Import/Export fortfahren, wenn ein Fehler auftritt wird definiert, ob bei einem Fehler der Import abgebrochen werden soll, oder alternativ die fehlerhafte Zeile übersprungen wird.
  • Der Bildimport-Modus legt fest, ob gleiche Artikelbilder mehrmals importiert werden sollen oder nur einmal.
  • Die Option Komma als Dezimal-Trennzeichen nutzen legt fest, ob als Dezimaltrennzeichen ein Komma oder Punkt verwendet wird.

Das Backend-Modul

Das neue Backend-Modul des Import/Exportes bietet Dir 4 Bereiche: Import, Export, Protokoll und die Profile.

Import/Export-Manager

In diesem Bereich findest Du die Möglichkeit verschiedene Daten zu importieren oder zu exportieren, sowie die letzten Änderungen zu verwalten.

Export

Im Export-Reiter kannst Du Exporte aus dem System im CSV oder XML Format vornehmen. Du wählst hier Dein zuvor angelegtes Profil und das Export-Format (CSV oder XML).

Abhängig vom Export-Typ (Artikel, Bestellungen, Kunde, Kategorien) werden ggf. zusätzliche Export-Optionen abgefragt, die die Exportierten Daten genauer einschränken. 
Die einzelnen Filter-Möglichkeiten werden in den weiteren Artikeln zu den einzelnen Profiltypen genauer erläutert.

Sind die entsprechenden Einstellungen vorgenommen, kannst Du mit einem Klick auf den "Export"-Knopf den Export anstoßen. Hierbei erscheint zunächst ein Fenster mit der Anzahl der ermittelten Datensätze.

Ein Klick auf "Export starten" wird die Datensätze in eine Datei exportieren, die am Ende mit einem Klick auf "Herunterladen" auf dem eigenen PC gespeichert werden kann. 
Wird die Datei erst später benötigt, kann Sie auch jeder Zeit im Reiter "Protokoll" heruntergeladen werden.

Import

Im Reiter "Import" können bestehende XML und CSV-Dateien in das Shopware-System importiert werden. 
Die gewünschte Datei kann dabei via Drag'n'Drop in die dafür vorgesehene Zone gezogen oder über den Punkt "Datei wählen" vom lokalen PC ausgewählt werden.

Danach musst Du nur noch angeben, welches Profil für diese Datei angewendet wird. Hierbei musst Du unbedingt darauf achten, dass die Spaltennamen, bzw. 
XML-Knoten-Namen genau mit den im Profil bestimmten Spalten-Namen übereinstimmen.

Jetzt kann durch einen Klick auf "Import" der Import angestoßen werden. Auch hier öffnet sich zunächst ein Fenster, das die Anzahl der erkannten Datensätze zeigt und durch einen weiteren Klick auf den "Import" Button den eigentlichen Import startet.

Der Import erfolgt in kleinen Schritten, so dass auch langsame Server bei großen Importen nicht in einen Timeout laufen. 
Wird ein Import abgebrochen, kann er im Reiter "Protokoll" bequem fortgesetzt oder beendet werden.

Protokoll

In diesem Bereich findet sich eine Übersicht aller durchgeführten Operationen. 
So können zuvor importierte Dateien jeder Zeit erneut eingespielt, heruntergeladen oder gelöscht werden. 
Gleichzeitig haben wir die Möglichkeit, abgebrochene Importe fortzusetzen oder einzusehen, wie viele Artikel importiert wurden.

Diese Ansicht ist also eine wertvolles Tool, um die vorgenommen Import und Exporte im Blick zu behalten, die importierten Inhalte auch später noch nachzuvollziehen oder Fehler aufzuspüren.

Profil

Der Reiter "Profil" ist das Herzstück des Import/Export-moduls. Ein Profil definiert das "Aussehen" eines Importes oder Exportes, oder auch die Verknüpfung(Mapping) zu den einzelnen Datenbank-Spalten. 
Das Import/Export-modul bietet bereits im Standard einige nützliche vorgefertigte Profile z.B. für die Artikelanlage, Kundenimport oder Bestellexporte.

Diese Standard-Profile kannst Du ausblenden indem Du die Checkbox "Standardprofile ausblenden" aktivierst, so bekommst Du nur Deine individuellen Profile angezeigt.

Du kannst allerdings auch ganz eigene Profile anlegen, welche genau auf Deine Anforderungen zugeschnitten sind. 
Klicke zunächst auf "Profil hinzufügen", um ein neues Profil zu erzeugen. Dann wirst Du aufgefordert, einen Namen und ein Standard-Profil auszuwählen, auf welchem Dein eigenes Profil basiert.

Soll z.B. ein Artikel-Profil erzeugt werden, wählst Du als "Basierend auf" beispielsweise "Artikel minimal", den Namen kannst Du dann frei vergeben, Beispiel "Artikel - Shopware". 
Nach einem Klick auf "Save" wird ein vorgefülltes Profil erzeugt, das bereits alle Felder des Basis Profils enthält. 
Diesem kannst Du dann beliebig neue Spalten und Attribute hinzufügen, oder bestehende entfernen.

Auf der linken Seite im Profil-Fenster siehst Du nun einen Baum, der die XML-Datenstruktur wieder gibt. 
Wenn Du ein Feld auswählst (etwa: ordernumber), kannst Du rechts den Namen des Knotens innerhalb der XML / CSV bearbeiten - und diesen beispielsweise auch "bestellnummer" nennen, genauso wie die Spalte, bzw. der Knoten später in Deiner Datei heißen soll.

Darunter kannst Du wählen, aus welcher Shopware-Spalte der Knoten befüllt wird (in diesem Fall also "orderNumber"). 
Zur Auswahl stehen hier alle verfügbare Spalten des aktuellen Datentyps - da zuvor "Artikel" als Typ gewählt wurde, können hier also alle verfügbaren Artikel-Felder gewählt werden.

Welche Felder für die einzelnen Profiltypen verfügbar sind findest Du in den weiterführenden Wiki-Artikeln zu den jeweiligen Typen genau erläutert.

Konfiguration des Profils

Über die Schaltflächen "Datensatz erweitern", "Neue Spalte" und "Neues Attribut (XML)" kannst Du dem Profil weitere Datenfelder hinzufügen.

Eine "Spalte" ist ein Datenfeld, das eine Information wie "Artikel-Name" beinhalten kann. Der anzuzeigende Datensatz einer Spalte wird über das Feld "Shopware-Spalte" ausgewählt, der Name der Spalte unter "Knoten-Name".

Neben Spalten gibt es in XML auch sogenannte "Attribute". Das sind Datenfelder, die in der Spalte selbst definiert werden können:


<meineSpalte meinAttribut="hallo">
    Welt
</meineSpalte>

Hier gibt es einen Knoten mit dem Namen "meineSpalte" und ein Attribut mit dem Namen "meinAttribut". 
Letztlich können Spalten und Attribute also gleichermaßen Daten beinhalten, es hängt von Deinen Erfordernissen und Schnittstellen ab, was Du verwenden willst.

Ein Datensatz schließlich ist ein spezielles Element für Datenfelder, von denen ein Artikel mehrere haben kann (sog. ToMany-Relationen). 
Darunter fallen beispielsweise Preise, Kategorien oder Eigenschaften. Ein Datensatz hat einen Knoten-Namen (etwa "MeinePreise"), einen Adapter ("category" für Kategorien, "price" für Preise) und einen "Eltern-Schlüssel", über den beispielsweise ein Preis dem eigentlichen Artikel zugeordnet wird.

Der Datensatz selbst enthält zunächst keine Daten - werden ihm aber weitere Knoten und Attribute hinzugefügt, können hier nun die Datenfelder des entsprechenden Adapters ausgewählt werden - etwa der pseudoprice des jeweiligen Preises oder der Name der jeweiligen Kategorie. 
Letztlich können Datensätze auch als "Unterprofile" verstanden werden, da Sie es erlauben, in einem Artikel-Profil weitere Informationen einzubinden, welche nicht direkt in den Artikel-Tabellen verfügbar wären.

Auf Datenbankebene ist der Datensatz wie ein join, also eine Verbindung zu einer weiteren Tabelle. 
Am Beispiel des "price"-Datensatzs wäre dies z.B. die Verbindung der Hauptartikel-Tabelle (s_articles) zur Artikel-Preis-Tabelle (s_articles_prices). 
Der Datensatz verschafft nur eine Verknüpfung der Tabellen, sorgt also dafür, dass die beiden Tabellen "sich kennen", gibt jedoch noch keine Daten wider. 
Erst nachdem der Datensatz korrekt verknüpft ist können Felder aus der Preis-Tabelle widergegeben und importiert werden, da der Importer weiß, zu welchem Artikel die Preise gehören.

XML / CSV

Grundsätzlich unterstützt das ImportExport-modul CSV und XML-Formate. 
Auch wenn die Profil-Erstellung sehr an das XML-Format angelehnt ist: Jedes Profil kann immer auch als CSV exportiert oder importiert werden. 
Das Modul wird dann statt eines verschachtelten XMLs ein flaches CSV-Format nutzen, wobei die CSV-Spaltennamen auf Basis der Knoten-Namen gewählt werden.

Wenn Du also gar kein XML-Profil benötigst, sondern nur CSV damit exportieren möchtest, kannst Du die Verschachtelung der Knoten außer Acht lassen und ein flaches Profil erzeugen, ebenso kannst Du auf Attribute verzichten. 
Das oben erzeugte Profil "Artikel - Shopware" würde in CSV exportiert wie folgt aussehen:

Als XML-Export aber beispielsweise so:

Aus Performance-Gründen unterstützt der Importer nur formatiertes XML! Die verwendete Library unterstützt keine unformatierten XML-Dateien.

Dateien bearbeiten

CSV

Um CSV-Dateien zu bearbeiten oder zu erstellen sollte ein Programm wie Open Office verwendet werden, welches in der Lage ist eine Datei in validem UTF-8 Format zu erzeugen. 
Aktuell ist Excel hierzu nicht gut geeignet, da dieses kein valides UTF-8 Format unterstützt. Bearbeitest Du eine Datei in Excel kann es zu Problemen mit Umlauten und Sonderzeichen kommen.

Sollte eine Datei doch einmal in einem Programm bearbeitet werden, welches kein UTF-8 unterstützt, so kann diese mit einem Programm wie Notepad ++ einfach korrigiert werden. 
Hierzu öffnest Du die nicht korrekt formatierte Datei in Notepad ++ und öffnest zusätzlich eine weitere leere Datei, für diese stellst du über das Menü Kodierung manuell UTF-8 ein. 
Nun kannst Du aus deiner eigentlichen Datei mit Strg-A und Strg-C den gesamten Text kopieren und mit Strg-V in die neue korrekt kodierte Datei einfügen. 
Diese neue Datei speicherst Du dann als .csv Datei wieder ab und kannst Sie korrekt kodiert in das System importieren.

XML

Für die Bearbeitung von XML-Dateien kannst Du ein beliebiges Programm nutzen. Wichtig hierbei ist nur, dass die Struktur und das Format der XML-Datei erhalten bleibt.

Konvertierungen

Im Profil-Reiter des Moduls hast Du die Möglichkeit, Konvertierungen vorzunehmen. 
Damit kann der Feldinhalt bei Importen und Exporten unabhängig voneinander manipuliert werden.

Auf diese Weise kannst Du beispielsweise definieren, dass das "active"-Flag eines Artikels beim Export nicht als 0 oder 1 ausgegeben wird, sondern als "aktiviert" oder "deaktiviert". 
Für Importe können wir umgekehrt definieren, dass die Zeichenkette "aktiviert" als "1" und "deaktiviert" als "0" importiert werden soll.

Ebenso können Ersetzungen und andere Zeichenkettenoperation vorgenommen werden - auch mathematische Berechnungen und Bedingungen sind möglich.

Verwendet wird dazu die Smarty-Engine. Die Namen der zur Verfügung stehenden Felder können für das aktuelle Profil im Konvertierungs-Fenster eingesehen werden, nachdem ein neuer Eintrag hinzugefügt wurde: 
In der Auswahlbox steht eine Liste aller Felder bereit, wie für Smarty üblich muss ein Dollar-Zeichen vor das bezeichnete vorangestellt werden, um darauf zu verweisen.

Namen auf 30 Zeichen kürzen


{$name|truncate:30}

Preis um Faktor 10 erhöhen


{math equation="x*10" x=$price}

Abfragen anderer Felder, Bedingungen


{if $attributeAttr8 < 10}
    4  
{else}
    $attributeAttr9
{/if}

"aktiviert" und "deaktiviert" statt des active-Flags ausgeben


{if $active == 0}deaktiviert{else}aktiviert{/if}

Konsolenwerkzeuge & Cronjobs

Das Import/Export-Plugin erlaubt es, Import und Exporte auch über die Kommandozeile vorzunehmen. Weiterhin kannst Du durch Ablegen von Importen in ein vorgegebenes Verzeichnis automatisierte Importe via Cronjob laufen lassen.

Aktuell ist ein Export von Bildern via CLI nicht möglich.

Konsolenbefehle

Profile anzeigen

Für den Export und Import benötigst Du bestehende Profile.

Mit dem Befehl


php bin/console sw:importexport:profiles

kannst Du Dir eine Liste aller vorhandenen Profile ausgeben lassen.

Export

Aus dem Shopware-Verzeichnis heraus kannst Du mit diesem Befehl Exporte vornehmen:


php bin/console sw:importexport:export

Hierfür musst Du die folgenden Parameter angeben:

  • -p/--profile: Name des zu verwendenden Profils, etwa "Artikel - Shopware"
  • filepath: Name der zu exportierenden Datei, etwa: "out.xml"

Beispiel Standard Bestellungen:


php bin/console sw:importexport:export -p "default_orders"

Beispiel erweitert mit Datum:


php bin/console sw:importexport:export --dateFrom "16-05-2021" -p "default_orders" out.xml

Beispiel erweitert von/bis:


php bin/console sw:importexport:export --dateFrom "10-05-2021" --dateTo "15-05-2021" -p "default_orders" out.xml

Das Export-Format wird über die Endung der angegebenen Datei automatisch bestimmt, endet der Name also auf ".xml", wird automatisch nach XML exportiert, endet er auf ".csv", wird nach CSV exportiert.

php bin/console sw:importexport:export --dateFrom "01-05-2021" -p "default_orders"

Weitere mögliche Parameter sind:

  • -f/--format: Um ein Ausgabeformat (CSV, XML) zu erzwingen
  • -x/--exportVariants: Bei Artikeln: Varianten ebenfalls exportieren
  • -o/--offset: Versatz
  • -l/--limit: Limit
  • -u/-customerstream: exportieren von ein customerstream
  • --dateFrom: Datum von
  • --dateTo: Datum bis
  • -c/-category: exportieren von eine Kategorie
  • --productStream: exportieren von ein Product stream

Import

Um eine bestehende Datei in das System zu importieren lautet der Befehl:


php bin/console  sw:importexport:import

Erwartet werden die Parameter:

  • -p/--profile: Name des zu verwendenden Profils, etwa "Artikel - Shopware"
  • filepath: Name der zu importierenden Datei

Beispiel:


php bin/console sw:importexport:import -p "Artikel - Shopware" in.xml

, wobei sich der Dateipfad immer auf den aktuellen Ordner bezieht. Bist Du also im Shopware Stammverzeichnis und wählst "out.xml", so muss sich die Datei im gleichen Verzeichnis, also im Stammverzeichnis liegen.

Optional möglich:

  • -f/--format: Importformat (CSV, XML) erzwingen

Cronjobs

Das neue Import/Export-modul erlaubt es, CSV oder XML-Dateien in das Verzeichnis files/import_cron/ abzulegen. 
Wenn der Cronjob im Standard ausgeführt wird, werden einmal am Tag alle Dateien aus dem Verzeichnis in das System importiert. 
Die Dauer zwischen zwei Import-Vorgängen kannst Du natürlich in den Grundeinstellungen anpassen: (Informationen: Cronjobs).

Um eine dort abgelegte Datei zu importieren zu können, muss der Name des Profils im Dateinamen zwischen zwei Punkten vorhanden sein. 
Für das Profil Artikel könnte dies z.B. so aussehen:


export.Artikel.Shopware.24.09.2014.csv

oder


Artikel.Shopware.csv

Die Importe können im Nachgang im Backendmodul unter "Protokoll" überprüft werden. Fehlgeschlagene Importe werden mit dem Präfix "broken-" im Verzeichnis files/import_export/ abgelegt.

Du kannst den Cronjob entweder direkt über die Konsole anstoßen indem Du z.B. einen Befehl wie diesen hier verwendest:


php shopware.php SwagImportExport/cron

Oder Du stößt den Cronjob über wget oder einen Browser-Aufruf an:


http://www.meine-domain.de/backend/SwagImportExportCron/cron

Ein Export der Daten ist ausdrücklich nur über die Shopware-Konsole möglich. Per Cronjobs können nur Importe durchgeführt werden!

Ein Profil exportieren/importieren

Im Import/Export-modul gibt es die Möglichkeit erstellte Profile zu importieren, welche Du zuvor als JSON Datei exportiert hast. 
Hierzu kannst Du die Schaltfläche "Profil importieren" im Reiter Profile nutzen. 
Ein Profil kannst Du über den blauen Export-Button direkt in der Profil-Zeile exportieren.

War dieser Artikel hilfreich?