Import/Export: Wie bei Import vorhandenen Wert durch leeren String ersetzen?

Hallo zusammen,

ich habe über ein Importprofil (Plugin Import/Export Advanced) eine simple Anbindung an unsere Warenwirtschaft realisiert. Meine Wawi erzeugt eine CSV-Datei mit Lagerbeständen und Angabe zur Lieferzeit in Tagen. Das Feld „Lieferzeit in Tagen“ wird in der Wawi nur bei Bedarf gefüllt, falls der Wert vom normalen Wert abweicht. Wenn der Grund für die Abweichung wegfällt, wird diese Angabe wieder aus der Wawi entfernt und in der CSV-Datei ist kein Wert mehr enthalten (die Spalte/das Feld bei dem jeweiligen Datensatz ist leer).

Jetzt ist es so, dass beim Import in Shopware der vorher importierte Wert nicht herausgelöscht wird, wenn man eine leere Spalte übermittelt, es steht weiterhin der Wert aus dem vorherigen Import darin. Gerade beim Feld „Lieferzeit in Tagen“ ist es aber so, dass der Wert auf jeden Fall herausgelöscht werden muss, damit die Standardfunktionalität wieder greift.

Was kann ich tun? Die CSV-Datei aus meiner Wawi kann leider nicht angepasst werden. Gibt es vielleicht die Möglichkeit, das Importprofil entsprechend anzupassen?

Grüße
Pierre
 

Hey pierre-schmitz,

ja gibt es. Dazu kannst du die “Konvertierungs”-Konfiguration an deinem Profil einstellen.
Hier findest du ein Beispiel:
http://community.shopware.com/Import/Export-Grundmodul_detail_1769.html#Konvertierungen

Viele Grüße,
Simon

Hallo Simon,

vielen Dank! Kannst du vielleicht noch etwas genauer erklären, was man hier machen muss? Die Anleitung hatte ich mir auch durchgelesen, bin aber nicht wirklich schlau daraus geworden. Der Konvertierungsmechanismus leuchtet mir schon ein, nur wie wandelt man nichts in nichts um und sorgt dafür, dass der Importer das Feld auch wirklich überschreibt anstatt es zu ignorieren?

Grüße

Aktuell kann das Modul dort keine leeren Werte schreiben. Du könntest versuchen über die Import Conversion den Leerstring abzufangen und dann bspw ein Leerzeichen setzen (oder ein anderes x-beliebiges Zeichen). Dann müsstest du noch die Anzeige anpassen, dass bei deinem definierten Zeichen die Ausgabe nicht angepasst wird.

Sowas klappt als Conversion: {if $shippingTime == “”}leer{/if}

Hier müsstest du dann die Abrfage auf der Detailseite anpassen: shopware/delivery_informations.tpl at 27507fe404cede0b75ad561fc081ce4fc9554569 · shopware/shopware · GitHub

Hey pierre-schmitz,

da hatte ich wohl nicht ganz korrekt gelesen. Import/Export löscht keine Daten aus deiner Datenbank. Leere Felder werden ignoriert.

Viele Grüße,
Simon

Hallo,

okay, danke für die Informationen, dann ist es also so, dass es aktuell nicht möglich ist, die beiden Datenbestände ohne Verrenkungen syncron zu halten? Wieso?

Mit den Importprofilen steht doch eine super Möglichkeit zur Verfügung, selektiv nur einzelne Felder zu importieren und selbst im Standard-Artikelprofil ist die Funktionalität so, dass man nur die Spalten übermitteln muss, die man updaten will, alles andere wird doch sowieso ignoriert. Diese beiden Funktionen sollten doch ausreichen, um zu verhindern, dass man aus Versehen etwas aus der Datenbank herauslöscht.

Manchmal müssen aber eben auch Daten gelöscht werden, um Datenbestände synchron zu halten. Ich kann mir gar nicht erklären, dass bisher noch niemand auf die Idee gekommen ist, das machen zu wollen.

Wie ist eure Einschätzung? Ist damit zu rechnen, dass die Funktion demnächst implementiert wird? Ich könnte auch mit einem einfachen Schalter im CLI-Befehl („force-update“ oder sowas) leben; ich stoße den Import über einen Konsolenbefehl mit Cron an.

Grüße

 

Hallo,

ich war mal so frei, für das Problem einen Eintrag im Issuetracker anzulegen:

Grüße
Pierre

*PUSH*

Wäre für uns auch wichtig!

Voten: https://issues.shopware.com/issues/PT-7270

Da kannste warten, bis du schwarz wirst.

Ich habe meinem Script gesagt, dass ein # importiert werden soll, wenn das Feld in der Wawi leer ist. Diesen Wert frage ich in der Templatelogik ensprechend ab. Für meine Anforderung reicht es, komplexere Sachen werden mit diesem Workaround wahrscheinlich nicht funktionieren.

 

Grüße
Pierre

 

Hallo zusammen,

genau für solche Fällen wenn es eine WaWi OHNE direkte Schnittstelle zu Shopware als Grundlage gibt haben wir SHOPLUKASFLEX entwickelt vor ca. 5 Jahren.

Die WaWi exportiert die Daten in ene XLS, CSV, txt oder ähnliche Datei und SLF nimmt sich diese und pfelgt die Daten in SHOPWARE. Wenn die Daten NICHT mehr in der Datei sind, werden die Artikel in Shiopware gesperrt/oder gelöscht. Also nicht nur ein reiner Import sondern ein Abgleich.

JEDES sinnvolle Feld kann individuell bespielt werden. .

 

Evtl. wäre genau das die Lösung für diejenigen die auf eine Wawi ohne Schnittstelle setzen (müssen) aber nicht auf die Pflege des Shops verzichten wollen.

 

@pierre-schmitz schrieb:

Da kannste warten, bis du schwarz wirst.

Ich habe meinem Script gesagt, dass ein # importiert werden soll, wenn das Feld in der Wawi leer ist. Diesen Wert frage ich in der Templatelogik ensprechend ab. Für meine Anforderung reicht es, komplexere Sachen werden mit diesem Workaround wahrscheinlich nicht funktionieren.

 

Grüße
Pierre

 

 

Das Gefühl habe ich leider auch, es gibt einige Details bei denen Shopware dringend Handlungsbedarf hat.

Kannst du mir sagen wie der #-Wert beim Importieren abgefangen wird und durch einen leeren Wert ersetzt wird?

Hallo Brombeere,

das kann man leider nicht allgemein beantworten, das kommt auf den Wert und seine Funktion im Template an. Bei mir ging es konkret um den Wert _ shippingtime._ Ich habe mir dafür ein Freifeld in meiner Wawi ausgesucht und meine Wawi erzeugt - neben anderen Werten, die ich von der Wawi nach Shopware übertragen will, etwa dem Lagerbestand - regelmäßig eine von Shopware importierbare Liste im CSV-Format. Beim Erzeugen der Liste wird berückschtigt, dass das Feld nicht leer sein darf (es könnte ja aus der Wawi ein Wert gelöscht worden sein, der bereits zu Shopware übertragen wurde), daher habe ich es in der Programmierung so gemacht, dass hier bereits ein # beim Feld shippingtime in die CSV-Datei hineingeschrieben wird.

Der Wert shippingtime wird im Frontend benutzt, um die Lieferzeitangabe darzustellen, wenn der Bestand kleiner gleich Null ist (gelbe Ampel). Die Logik der Lieferbarkeitsanzeige ist komplett im Template hinterlegt. Da ich hier die Funktionalität ohnehin erweitern wollte, habe ich das Verhalten einfach so angepasst, dass das Vorkommen eines # in der Datenbank keine unsinnigen Anzeigen erzeugt (das ist an der Stelle mit “abfangen” gemeint). Das ist aber keine allgemeingültige Aussage!

Konkret war die If-Abfrage so anzupassen, dass der Text der Gelben Ampel nicht dann gezeigt werden soll, wenn das Feld nicht leer ist sondern wenn nicht ein # drinsteht (was in dem Fall bedeutet, dass etwas anderes drin steht, leere Felder gibt’s ja nicht mehr). Extrem vereinfacht steht da sowas wie:

{if Bestand größer Null}
Grüne Ampel
{elseif $sArticle.shippingtime != '#'}
Gelbe Ampel
{else}
Rote Ampel
{/if}

So simpel funktioniert es bei mir auch deshalb, weil ich weniger als 100 Produkte im Shop hab und stündlich einen performancemäßig völlig unkritischen Komplettimport der zu übertragenen Wawi-Daten machen kann. Ich klopp die Raute jede Stunde in jedes Produkt rein, egal, ob sie schon drinsteht oder nicht. Bei Shops mit tausenden Artikeln muss man sich natürlich etwas anderes einfallen lassen. Bei mir würde es mehr Performance kosten, abzufragen was ich schon übertragen hab und was noch nicht, statt einfach alles zu übertragen.

@pierre-schmitz‍ Danke für die schnelle und ausführliche Rückmeldung. Leider habe ich gehofft das du hast einen Hack im Plugin verwendet hast. Bei mir geht es um Angaben die nur im Backend vorhanden sind (Freitextfelder).

 

[@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski “Moritz Naczenski”)‍ Wo muss die Änderung im Plugincode vorgenommen werden damit ein leerer Wert den entsprechenden Datensatz überschreibt? Alternativ wäre auch ein Lösung mit einem Platzhalter möglich. Zum Beispiel: Der Begriff/Platzhalter NULL in der CSV-Datei sorgt für die Überschreibung/Löschung.

Ist es diese Datei?
/engine/Shopware/Plugins/Community/Backend/SwagImportExport/Components/SwagImportExport/Transformers/ValuesTransformer.php

*PUSH*

Wäre für uns auch wichtig!

Voten: https://issues.shopware.com/issues/PT-7270

Moin,

wir haben hier ähnliche Probleme.
Wenn man beim Import, bzw. beim Update der Daten Werte löschen will, d.h. den Inhalt einer Zelle in der csv-Datei entfernt, wird diese Änderung beim Import nicht beachtet.
Der Vorhandene Wert in der Datenbank wird leider nicht entfernt.

Über eine Behebung des Problems würden wir uns sehr freuen.

Danke

*PUSH*

Wäre für uns auch wichtig!

Voten: https://issues.shopware.com/issues/PT-7270

*PUSH*

Wäre für uns auch wichtig!

Voten: https://issues.shopware.com/issues/PT-7270