Wir versuchen, Daten aus einem externen CRM via Synesty an Shopware zu übergeben.
Um zu verstehen, wie die Daten im Datastore abgelegt werden müssen, um wieder ausgelesen und importiert werden zu können, haben wir mit ShopwareSearchOrders (6.5), zwei Filtern und zwei DatastoreWritern eine Importfunktion gebastelt. Die erhaltenen Datentabellen haben wir verwendet, um einen vermeintlich kompatiblen Datastore für den Wiederupload herzustellen.
Beim Versuch, die Daten wieder zu exportieren, wird jedoch von Synesty reklamiert, dass die Daten nicht dem Shopware6Order / Shopware6OrderItem Datastore Schema entsprechen. Also haben wir begonnen, das Mapping soweit wie möglich anzupassen. Allerdings sind wir zum Beispiel beim Feld ‚Salutation‘ auf das Problem gestossen, dass wir nur die ID verfügbar haben, die Vorlage aber den Begriff (Frau, Herr, Firma) haben möchte.
Folgende Fehlermeldung:
Letzte Meldung:Error creating order xxx. There’s no entry in ‚Salutation‘ for value ‚‘. Possible values are: mr, not_specified, mrs, company
Offensichtlich sind die beiden Konnektoren „ShopwareSearchOrders“ und „ShopwareAddOrders“ nicht auf dem selben Stand, so dass heruntergeladene Daten nicht mehr hochgeladen werden können (was man eigentlich erwarten kann).
Gibt es da einen Workaround? Oder zwei „gleichwertige“ Plugin-Versionen? Generell wäre es gut, wenn die Konnektoren auch bearbeitet werden könnten. Ist so etwas möglich?
Das ist korrekt. Für den ShopwareAddOrders Step müssen die Daten in zwei Datastores (Master/Child Datastore) mit dem vordefinierten Shopware6Order / Shopware6OrderItem Schema abgelegt werden.
Im vordefinierten Schema „Shopware6Order“ sind die allgemeinen Bestelldaten sowie Kunden und Adressdaten vorhanden. Bei einigen Feldern besteht die Möglichkeit die ID oder den Wert anzugeben, z.B. bei orderCustomerSalutation (orderCustomerSalutationId). Eines der beiden Felder muss allerdings gefüllt werden.
Die beiden Steps sind grundsätzlich unabhängig voneinander. Der „ShopwareAddOrders“ Step legt unter Umständen nicht nur die Bestellung an, sondern ggf. auch Kunde-/Adressen an. Unter anderem ist dafür auch der Datastore notwendig, um die IDs der angelegten Entitäten speichern zu können.
Die Feldnamen der vordefinierten Shopware6Order / Shopware6OrderItem Schema unterscheiden sich leider etwas von den Spaltennamen im output-Spreadsheet des ShopwareSearchOrders Steps. In vielen Fällen sollte das aber nur den 1. Buchstaben (Groß- / Kleinschreibung) betreffen.
Mit etwas (Mapping-)Aufwand sollte es mit den Daten des ShopwareSearchOrders Steps aber möglich sein eine neue Bestellung im gleichen Shopware System anzulegen.
Was meinst du genau mit „Konnektoren bearbeiten“ ? Die „vorgefertigten“ Steps kannst du nicht anpassen.
Die output - Daten der Steps kannst du mit diversen anderen Steps umformen (z.B. Mapper), um diese in das benötigte Format zu bringen.
Was jedoch nicht geht, ist die Master / Child Verknüpfung, beim „AuftragsdatenDatastoreWriter“ (Shopware6Order) haben wir unter „Erweiterte Einstellungen“ nichts ausgefüllt, beim „AuftragsdatenDatastoreWriter“ (Shopware6OrderItem) haben wir unter den erweiterten Einstellungen im Feld „masterIdentifierColumn“ verschiedene Felder ausprobiert, ohne jedoch eine Verbindung zum Master-Datensatz herstellen zu können. Im vorherigen Datastore (gebastelt aus dem „ShopwareSearchOrders“ Step) hat das über die ID wunderbar funktioniert.
Was machen wir falsch?
Das Feld „identifier“ eignet sich für diese Verknüpfung nicht, da beim Schema „Shopware6OrderItem“ der „Shopware6Order-Identifier“ mit dem Wert „ItemIdentifier“ ergänzt wird.
Und noch eine Verständnisfrage: beim Tooltip zur „MasterIdentifierColumn“ steht „Optional: Spaltenname im Quell-Spreadsheet, in welcher der ‚identifier‘ des Master-Datensatzes steht.“ Welches ist hier das Quell-Spreadsheet? Das Sheet aus Step 1 oder das dem Step vorhergehende Sheet?
Damit die Child-Datensätze mit den richtigen Master-Datensätzen „verknüpft“ werden, muss der Master Identifier beim Import der Child-Datensätze angegeben werden. Der master_identifier muss dem „identifier“ des Datensatzes (z.B Auftrags ID) aus dem Master-Datastore enthalten.
Es gibt zwei mögliche Wege den master_identifier anzugeben:
In der Konfiguration („Mapping“) des DatastoreWriter Steps kann eine Spalte mit dem Titel master_identifier hinzugefügt werden. In dieser Spalte muss dann in jeder Zeile der entsprechende Wert vorhanden sein, damit die Datensätze verknüpft werden.
Wenn im Mapping keine „master_identifier“ Spalte angegeben ist, kannst du auch in den erweiterten Optionen(„masterIdentifierColumn“) des DatastoreWriter Steps eine andere Spalte auswählen/angeben. Wichtig: Es muss der „gemappte“ Titel der Spalte angegeben werden. Die Spalte muss also im Mapping des DatastoreWriters vorhanden sein.
Die erweiterte Option „masterIdentifierColumn“ kannst du dann auch im DatastoreWriter für die Auftragspositionen leer lassen.
Es bezieht sich auf das verknüpfte input Spreadsheet.
Wenn ein Mapping hinterlegt ist, muss der Spaltenname aus dem Mapping angegeben werden.
Wenn kein Mapping hinterlegt ist, muss der Titel aus dem input Spreadsheet verwendet werden.
Vielen Dank für das ausführliche Tutorial, die Master / Child Verknüpfung hat irgendwie geklappt, aber auch nicht so einfach wie beschrieben.
Nach der hartkodierten Bereinigung von weiteren Warnungen (zu jeder SalutationID auch noch eine Salutation) und eine Country2Id ist der Flow ohne Fehlermeldung durchgelaufen.
Eigentlich müsste die Bestellung doch jetzt in Shopware unter Bestellungen erscheinen?
Muss man entweder in Synesty oder in Shopware etwas zusätzliches machen?
Einen Cronjob oder einen Finisher durchlaufen lassen oder so etwas?
Die Bestellung wird über die API angelegt und sollte auch direkt sichtbar sein. Kannst du bitte mal Master-Datastore schauen, ob in der Spalte orderId eine uuid hinterlegt und der Datensatz auf den Processing Status „PROCESS_SUCCESS“ gesetzt wurde?