Hallo,
ich habe folgende Ausgangslage. Ich importiere aus Shopware Bestellungen in zwei Datastores. Einem Master-Datastore für die Bestellungen und einem Child-Datastore für die Bestellpositionen.
In einem weiteren Flow wird überprüft, ob es Stornierungen/Retouren gab und die Datastores werden dementsprechend upgedatet. Es kann aber vorkommen, dass eine Bestellposition im Shopware storniert wurde. Diese ist dann aber noch im Bestellpositionen Datastore vorhanden.
Wie kann ich diese Position denn löschen? Ich dachte mir, dass ich die IDs der Bestellungen hole und alle Bestellpositionen mit diesen Master-IDs auf den updateProcessingStatus auf PROCESSED_MARKED_DELETE setze und danach die noch vorhandenen Bestellpositionen update und den updateProcessingStatus dort wieder auf PROCESSED ändere.
Wie weiß nur nicht, wie der Step zum „löschen“ der Bestellpositionen aussehen muss damit das funktioniert?
VG
Patrick
Hallo Patrick,
einen Step zum Löschen von Datensätzen gibt es nicht. Du könntest das „automatische Löschen“ Feature des Datastores verwenden, um die Datensätze zu entfernen. Die Einstellung findest du im Datastore Management:
Mit dieser Einstellung werden die Datensätze mit ProcessingStatus = „PROCESSED_MARK_DELETE“ automatisch gelöscht (der Löschprozess läuft im Hintergrund und es einige Minuten dauern kann, bis die Datenzeilen wirklich gelöscht sind.)
VG Torsten
Hallo @synesty-Torsten ,
danke für deine Antwort. Da hab ich mich etwas missverständlich ausgedrückt. Das mit dem Löschprozess kenne ich bereits und wollte das auch so machen.
Meine Schwierigkeit besteht darin die Datensätze entsprechend mit PROCESSED_MARKED_DELETE zu markieren.
Ich mache mal ein vereinfachtes Beispiel:
Ich schreibe eine Bestellung in einen Bestellungen-Datastore. Diese Bestellung hat zwei Bestellpositionen A und B, die in den Bestellpositionen-Datastore geschrieben werden.
Im Shopware wird die Bestellposition B wegen einer Stornierung gelöscht und es gibt nur noch Position A. Im Bestellpositionen-Datastore soll Position B daher auch gelöscht werden.
Daher war mein Plan, alle Positionen einer Bestellung anhand der Master-ID zum Löschen zu markieren und die Positionen, die dann noch vorhanden sind wieder auf „PROCESSED“ zu setzen. Das ist mir nur nicht ganz klar, wie ich das umsetze.
Ist etwas schwierig zum erklären, daher habe ich nochmal einen Screenshot der Steps angehängt.
VG Patrick
Hallo @abc_design,
ich erkenne gerade den Grund nicht, weshalb du alle Positionen einer Bestellung als löschen markierst um dann wieder nur die vorhandenen auf einen anderen Status zu setzen.
Ich bin mir gerade nicht sicher wie stornierte Positionen aus SW kommen.
Ich kann mir zwei Lösungsansätze vorstellen:
-
Ansatz, wenn die stornierten Positionen ausgegeben werden:
Anhand des Wertes, was die Stornierung signalisiert filtern und anschließend kannst du einen DatastoreWriter auf die Positionen mit dem identifier machen. Dabei muss nichts geändert werden, Hauptsache der identifier ist gesetzt. Im Prinzip so, wie du es jetzt schon machst. Dann eben in den Optionen noch PROCESSED_MARK_DELETE einstellen.
-
Ansatz, wenn die Stornierten Positionen nicht mehr ausgeben werden
Aufträge mit Positionen abrufen und diese in den Positionen Datastore schreiben, dabei reicht es wieder, dass zumindest der identifier gesetzt ist. Anschließend kannst du aus dem Datastore den Output „untouchedRecords“ verwenden, um mit einen erneuten DatastoreWriter auf die Positionen, die nicht mehr vorhandenen Positionen zu markieren.
Um die die „untouchedRecords“ verwenden zu können, musst du diese Option auch in den „erweiterten Einstellungen“ aktivieren.
Flow: Wie finde ich Datensätze, die gestern importiert wurden, aber heute nicht mehr mit mitkommen? (Delta)
Viele Grüße
Lukas
1 „Gefällt mir“
Hallo @synesty-Lukas,
danke für die schnelle Hilfe.
Es ist wirklich so, dass die stornierten Positionen nicht mehr ausgegeben werden. Und der Output mit den „untouchedRecords“ scheint genau das zu sein nach dem ich gesucht habe.
Damit werde ich es mal probieren.
Vielen Dank nochmal und viele Grüße,
Patrick