Tausende Produktbilder in Plentymarkets importieren – Gesagt, getan… oder vielleicht doch nicht?

Die Anforderung des Projekts.

Ein Kunde möchte 60.000 Bilder von seinem FTP in Plentymarkets hochladen. Initial sollten alle Produktbilder aus dem ausgewählten Ordner in Plentymarkets importiert werden. Zudem lagen die Bilder in zwei verschiedenen Ordnern. Ein Ordner für Produktbilder im Hochformat und ein Order für Produktbilder im Querformat. Beim Importieren sollten außerdem noch Mandanten, Herkünfte und Listings der Bilder anhand dem Ordner festgelegt werden, sowie der Bildposition, die im Bildnamen steht. Welche Hürden dabei auftraten 60.000 Bilder in Plentymarkets zu importieren und wie ich diese gemeistert haben, erfahren Sie in diesem Artikel.

Prüfung der Produktbilder

Es sollten initial rund 60.000 Produktbilder importiert werden. Die Artikelnummern (542687) oder Variantennummern(A12 34.12) samt Lehrzeichen und Punkt, sollten als Namen der Bilddatei zur Identifikation dienen. Ebenfalls zur Bestimmung der Position dienten auch andere Identifier wie der Bildpositionen, die mit Bindestrich von den Variantennummern getrennt sind.  Anhand dieser Nummern konnten die Produktbilder dann, an die entsprechenden Artikel hochgeladen werden. Zudem wurde mir auch eine Liste mit den geforderten Mandanten, Herkünfte und Listings zur Verfügung gestellt.

Meine Vorüberlegung – So schwer kann das doch nicht sein Produktbilder in Plentymarkets zu importieren!

Gesagt, geschätzt. Was soll denn da schon so schwierig sein? Ich lade die Bilder herunter und lade diese dann an die Artikel wieder hoch. So zu mindestens der Plan. Ich habe schließlich “alles” vorher in unseren Testsystemen ausprobiert.

  1. Bekomme ich eine Liste der Bilder vom FTP? – Check.
  2. Haben wir einen Step, der die Bilder samt Mandant, Herkunft und Listing an Plentymarkets übergibt? – Check.
  3. Kann ich Bilder in deren Namen ein Leerzeichen oder ein Punkt enthalten ist, an Plentymarkets übergeben? – Check.

Die Umsetzung mit Hürden.

Begonnen hatte ich, wie auch schon beim Testen mit dem herunterladen einer Liste der Namen von den Produktbilder vom FTP. Anhand dieser Liste konnte ich dann die Bild-URL zusammenbauen, von der dann Plentymarkets das Bild an den Artikel hoch lädt. Bevor ich das aber machen konnte, musste ich erst einmal die Bildnamen nach Artikelnummer oder Variantennummer und Bildposition aufdröseln. Das ging relativ Problemlos, indem ich mit verschiedenen Freemarker-Funktionen die Bildnamen aufgeschlüsselt habe und die entsprechenden Nummern in separate Spalten schrieb.

 

 

Die erste Hürde.

Dann kam aber auch schon die erste Hürde. Die Bilder waren entweder nach der Artikelnummer oder der Variantennummer benannt. Ich brauchte aber immer nur die Artikelnummer für unseren PlentyAddItemImages Step. Also habe ich mir eine Logik gebaut, die zuerst Anhand der Variantennummer per Querverweis im Datastore schaut, ob es diese Variante gibt. Wenn ja, wird die Artikelnummer zurück gegeben, wenn nicht, wird mit Hilfe der Artikelnummer nachgeschaut. Das mag auf dem ersten Blick etwas redundant wirken, allerdings war der Datastore nicht ganz konsistent gepflegt.

Die zweite Hürde.

So, erste Hürde überwunden und schon stolperte ich in die zweite. Um die Produktbilder an die Artikel zu bringen, musste ich eine Bild-URL bauen, von der Plentymarkets das Bild runterladen konnte und am entsprechenden Artikel hoch lädt. Aber wie es nun mal sein sollte, konnte Plentymarkets das Bild anhand meiner gebauten Bild-URL nicht herunterladen. Warum? Weil die Bild-URL ungültige Zeichen enthielt. Drei Mal dürfen Sie raten, was diese Zeichen waren? Richtig, die Leerzeichen! Das sollte mich aber nicht weiter stören. Also habe ich einfach die Leerzeichen mithilfe von der Freemarker-Funktion ‘replace‘ mit %20 ersetzt. Dem URL-Encoding für Leerzeichen. Aber warum hat es in unserem Testsystem funktioniert? Meine Vermutung lag darin, dass der FTP des Kunden, der von Plentymarkets bereitgestellt ist, anscheinend über Einstellungen verfügte, die ich beim Testen nicht beachtet habe.

So, beide Hürden mehr oder weniger gemeistert, jetzt sollte doch nichts mehr schief gehen, oder?

Die Zielgeraden – dritte Hürde.

Initial sollten 60.000 Artikelbilder importiert werden. Diese aber mit einem einzigen Flowrun hochzuladen, war selbst mir bewusst, dass dies keine gute Idee ist! Also habe ich mich mit unserem Kunden erstmal an die großen Mengen herangetastet. Erst 100 Bilder, dann 500, danach 1000 und selbst mit 5000 Bildern ging alles reibungslos über die Bühne. Mit der Zeit blieben auch keine 60.000 Bilder mehr übrig, also meinte ich, könnten wir auch die letzten 25.000 Produktbilder mit einem Rutsch erledigen. Allerdings kam mir nicht ansatzweise der Gedanke, was passiert, wenn während der Flowausführung technische Probleme auftauchen? Sei es von unserer Seite oder von einer anderen. Die Bilder, die importiert werden, wurden erst als letzter Step im Flow in den Fertig-Ordner verschoben. Was heißt das? Wenn während dem Upload ein Fehler auftritt, werden die importierten Produktbilder nicht in den Fertig-Ordner verschoben und sind somit nicht von Bildern zu unterscheiden, die noch importiert werden müssen. Ich schreibe die Info nicht ohne Grund, denn es ist natürlich genau der Fehler aufgetreten!

Wenn man keine Arbeit hat, macht man sich welche.

Die Frage war jetzt, wie bekomme ich heraus, welche Bilder schon importiert wurden und welche nicht? Nach etlichen Überlegungen, ist mir schlussendlich eine Lösung eingefallen (eigentlich meinem Kollegen, aber es geht hier schließlich um mich). Wir haben im Synesty Studio unzählige Steps, mit dem man viele Probleme lösen kann, so auch dieses. Mit dem PlentyGetItemImages Step bekomme ich eine Liste aller Bilder, sowie den entsprechenden Artikeln und auch einem LastUpdate Wert, der, wie es der Name schon verrät, das Datum ausgibt. Also habe ich in der Liste nach dem Datum und Zeitpunkt gesucht, wann der Fehler aufgetreten ist und habe bis dahin alle Produktbilder, mit Hilfe eines Flows in den Fertig-Ordner verschoben.

Fazit – Damit Sie nicht die gleichen Fehler machen!

Was ich in unserer Testumgebung probiert habe:

  1. Ich bekomme eine Liste mit Bildnamen vom FTP.
  2. Wir haben einen Step der die Produktbilder an Plentymarkets übergibt.
  3. Ich kann Bilder mit Sonderzeichen an Plentymarkets übergeben.

Was schlussendlich auf mich zukam:

  1. Bildnamen in einzelne Werte auftrennen.
  2. Bild-URL bearbeiten.
  3. Logik für Artikelnummer und Variantennummer bauen.
  4. Querverweis auf den Datastore, um die Artikelnummern zu bekommen.
  5. Bildmenge iterativ erhöhen und manuell (Flow ausführen) hochladen.
  6. Lösung finden um bereits importierte Bilder zu finden.

Mein Tipp! Testen Sie immer nach Möglichkeit in dem Kundensystem, denn ‘Works in our system.’ ist keine Entschuldigung!

Autor: Lukas