Aufträge aus Plentymarkets System 1 in Plentymarkets System 2 übermitteln

Hallo zusammen,


wir würden gern folgendes abbilden:


1. Aufträge werden aus Plenty Quellsystem geholt

2. Aufträge werden in Plenty Zielsystem eingelesen

3. Paketnummern werden aus Plenty Zielsystem exportiert und im Quellsystem eingelesen


Hat jemand schon einmal soetwas abgebildet? Da wir gerade erst mit Synesty anfangen, sind wir da noch nicht 100% fit. Problematisch wird's bei uns mit den Datastores.


Vielen Dank und Gruß,

Mark


Hallo Mark,


Ja, das ist möglich.


Die Doku der Steps bietet hier bereits einiges an Dokumentation für das Abholen der Order:

https://apps.synesty.com/registration/PlentySearchOrders/de-de?action=showStep&id=bcc0240c-0cd7-11e7-aa69-448a5bd88a72


Anlegen von Auftragsdaten wird hier beschrieben:

http://docs.synesty.com/display/SSUD/Step%3A+PlentyAddOrders+-+REST+API


und hier gibt es eine Vorlage für das Anlegen der Trackingdaten:

https://apps.synesty.com/studio/tasks?action=showTaskDefinition&id=RESTSetTrackingID&projectId=



Viele Grüße,

der Synesty Support


Hallo,


vielen Dank für die schnelle Antwort.


Sehe ich es richtig, dass ich mit folgender Stepfolge zumindest mein Vorhaben Aufträge exportieren und in anderes Plenty System importieren abbilden kann?


image


Viele Grüße und ein frohes Osterfest,

Mark

Zusatz: Ich bin bisher wie folgt vorgegangen:


  1. Zwei Datastores erstellt (Master-Child). Der Master hat das Schema PlentyRESTOrderPayloadProvider und das Child PlentyRESTOrderItemPayloadProvider
  2. Steps wie oben abgebildet erstellt
  3. Step 2: Greift auf Master Datastore. Als IdentifierColumn HeadOrderID gewählt
  4. Step 3: Greift auf Child Datastore. Als IdentifierColumn OrderItemsVariantID gewählt.

Anschließend habe ich beim Testen schon festgestellt, dass bspw. OrderItemQuantity, OrderItemTextName etc. nicht mit in der Vorschau von Step 3 auftauchen.

Müssen hier noch weitere Steps zwischengeschaltet oder einzelne Spalten gemappt werden?

Wie stelle ich das Mapping von Externe VariantenID Quellsystem -> VariantenID Zielsystem her?

Viele Grüße,
Mark


Hallo Mark,


das sieht schon ganz gut aus. Zwischen PlentySearchOrders und den DatastoreWriter fehlt noch ein SpreadsheetFilter Step, der den Auftragskopf von den Positionen trennt. Als Filterbedingung kannst du hier z.B:


OrderHeadOrderTypeID! != ''


verwenden. Der Flow sollte dann folgendermaßen aussehen:




Der SpreadsheetFilter Step verfügt über zwei Ergebniss-Spreadsheets. Der 1. DatastoreWriter Step wird mit dem output Spreadsheet und der 2. DatastoreWriter mit dem negativeOutput des Filter Steps verknüpft.


Über den "Configure" Button des jeweiligen DatastoreWriters gelangst du in eine Mapping Ansicht, in der du die Spalten aus dem PlentySearchOrders Step den Spalte im jeweiligen Datastore Schema zuordnen kannst, z.B: externe Varianten ID als Varianten ID.


Als Identifier im Child-Datastore solltest du am besten die OrderItemsRowID und nicht die Varianten ID verwenden.


Viele Grüße

Torsten



Hallo Torsten,


vielen Dank für deine Hilfe!


Ich bin jetzt soweit gekommen, dass vom Mapping und der Flowlogik eigentlich alles passen sollte.


Wenn wir den Flow jetzt ausführen, kriegen wir aber folgende Fehlermeldung:

Letzte Meldung: Error processing order with identifier 10433
POST https://www.plenty-es24.de/rest/accounts/contacts/231819/addresses HTTP/1.1
{"error":{"code":422,"message":"Validation error","exception":"Plenty\\Exceptions\\ValidationException"},"validation_err


Kannst du sagen, was hier falsch ist? Der Benutzer im Zielsystem hat alle REST API Rechte und die Zuordnung der PlentyID haben wir auch im Mapping hinterlegt.


Dann ist mir aufgefallen, dass in den Datensätzen des Child Datastores auf der linken seite überall "hat keinen MASTER" steht. Woran kann das denn liegen?


image



Viele Grüße,

Mark

Hallo Mark,


die Datensätze im Child Datastore (Bestellpositionen) müssen noch über den Master Identifier mit dem entsprechenden Master Datensatz (Bestellkopf) verknüpft werden. Du kannst im 2. DatastoreWriter als masterIdentifierColumn die Spalte "OrderHeadOrderID" auswählen.


Viele Grüße

Torsten

Moin Torsten,


gerade in diesem Moment auch gefunden.


Tausend Dank für die schnelle und gute Hilfe!


Viele Grüße,

Mark

Hallo nochmal,


bezüglich des Paketnummernimports haben wir uns jetzt folgendes vorgestellt:


Steps, die verwendet werden sollen:


1. PlentySearchOrders

2. PlentyAddOrdersPackage


Wir haben auf beide Plenty Systeme Zugriff.


Macht es Sinn, diese Steps einfach an den Flow für die Bestellübermittlung dranzuhängen oder sollte man dafür lieber einen separaten Flow erstellen?


Hinsichtlich API Call Limits etc.


Danke und Gruß,

Mark

Hallo Mark,

wenn die Sendungsnummer bereits im einen System vorhanden ist, kannst du es direkt anhängen, wenn du Sie erst mit Anlage des Artikels im zweiten System generierst solltest du einen zweiten Flow bauen, eine Pause einbauen und dann den zweiten Flow triggern.

Oder du lässte den zweiten Flow einfach einmal täglich automatierst laufen mit der Paketnummer. Die Beiden Steps kannst du verwenden.
Wir arbeiten auch mit zwei Plenty Systemen und übertragen Bestellungen vom einen in das andere.

Viele Grüße
Enrico

Hi Enrico,


danke.


Über welchen Filter stellst du denn sicher, dass nur "neue" Sendungsnummern übertragen werden?


Wenn ich bspw. nach Status "Warenausgang gebucht" filtere, nimmt er ja immer wieder alte Aufträge mit rein, oder?


Gehst du da über den LastUpdated Timestamp?


Viele Grüße,

Mark

Hi Mark,

so kannst du es einfach lösen. Wenn du es z.B. einmal täglich ausführst, dann kannst du den Timestamp des Warenausgangs im Plenty auch verwenden und einfach immer den aktuellen Tag nehmen.

Viele Grüße
Enrico

Hi Enrico,


wie bekomme ich den Timestamp des Warenausgangs denn da am elegantesten rein?


Mir fällt jetzt erstmal nur der Weg über einen weiteren Step (bspw. SpreadsheetFilter) ein..


Vielen Dank für deine Hilfe.


Gruß,

Mark

Hi Mark,

Den Timestamp erhälst du ja aus Plenty, diesen kannst du dann ja reduzieren auf "Tag/Monat/Jahr" - Mit dem SpreasSheetFilter lässt du dann nur Aufträge durch, die diesem entsprechen. Um im Filter auch immer aktuell zu sein setzt du am besten eine Datum/Zeit-Variable mit dem aktuellen Datum ein.

Dann sollte es funktionieren.

Viele Grüße
Enrico

Hi Enrico,


danke nochmal für deine Hilfe.


Hat alles wunderbar geklappt.


Ich habe jetzt allerdings noch eine Kleinigkeit.. Wenn mein Flow im Auftragsaustausch keine Aufträge mit den vorgegebenen Bedingungen findet, läuft der Flow auf Fehler.


Macht es Sinn, hier noch einen Filter vor den Spreadsheedfilter zu setzen, um nur Spreadsheets mit bspw. vorhandener OrderID durchzulassen?


Oder gibt es vielleicht eine andere Funktion hierfür?


Danke und Gruß,

Mark

Hi Mark,
schau dir mal den Step "StopFlowIf" an. ich denke, das ist genau was du suchst.
Du kannst hier die Bedingung setzen und den Flow an der Stelle dann einfach ohne Fehler stoppen.

Viele Grüße und einen schönen Tag
Enrico

Hallo zusammen,


bis heute lief unser Datenaustausch reibungslos, jetzt kommt es zu Problemen bei Aufträgen mit Bundles.


Wir bekommen folgende Fehlermeldungen:



WARNING
WARNING:Error processing order with identifier 15428
Error during creation of order in plentymarkets Shop: POST https://www.plenty-es24.de/rest/orders HTTP/1.1
{"error":{"message":"validation error found"},"validation_errors":{"itemVariationId":["item variation id muss ausgef\u00fcllt sein wenn type id 1 ist."]}}


Das Mapping machen wir über die Externe Varianten-ID. Diese ist im Quellsystem eingetragen und sucht im Zielsystem die VariantenID.


Bei Bundles haben wir es so konfiguriert, dass die Bundle-Köpfe keine externe VariantenID haben, damit die Artikel nicht ggf. doppelt hinzugefügt werden (falls das Zielsystem die gleichen Bundles verwendet).


Bis vor Kurzem hat das auch super funktioniert - seit heute leider nicht mehr.


Hat jemand eine Ahnung wo der Haken sein kann?


Vielen Dank und Gruß,

Mark


Hallo Mark,


kannst du dir bitte mal die Bestell-Positionen des Datensatzes mit identifiers 15428 ansehen ? Laut Fehlermeldung sieht es so aus, als wäre die Varianten ID (variantId) leer oder nicht korrekt gefüllt. Möglicherweise ist es ein Bundle ? Evtl. musst du den "Bundle Kopf" noch raus filtern, damit nur die Bundle Items übertragen werden.


Viele Grüße

Torsten

Hi Torsten,


genau, es gibt ein Bundle Artikel. Dieser hat keine VariantenID Zuordnung, damit nur die Bundle Childs übertragen werden. Das hat ja bis vor Kurzem auch genau so funktioniert.


Sorry für die Anfängerfrage, aber wie kriege ich den Bundle Kopf rausgefiltert?


Tausend Dank im Voraus.


Mark

Hallo Mark,


du kannst vor dem DatastoreWriter der die Positionen importiert noch einen zusätzlichen SpreadsheetFilter Step einbauen. Bei den"Bundle-Köpfen" steht in der Spalte OrderItemsTypeID eine 2.


Diese Zeilen kannst du über die Filterbedingung OrderItemsTypeID != "2" entfernen. Das Ergebnis des SpreadsheetFilter Steps sollte dann in etwa wie folgt aussehen:


Den Output des Filters musst du dann als input im DatastoreWriter für die Bestell-Positionen verwenden. Der Flow sollte dann in etwa so aussehen:



Viele Grüße

Torsten