Frage: Bestände von Varianten über die REST-Api anpassen

Guten Tag! Ich arbeite gegenwärtig an einer Synchronisierungs-Lösung zwischen Shopware und einem Warenwirtschaftssystem und muss zu diesem Zweck regelmäßig den Bestand der Variantenartikel (Pro Variante) in Shopware anpassen. Zum Abgleich der Produkte verwende ich aktuell die REST-Api. Ich habe nun viel herumprobiert und bin ein bisschen von der Dokumentation der REST-Api bzw der Models enttäuscht. Mein bester Versuch war bisher, dass ich die entsprechenden Artikel 1:1 über die Api abgerufen und anschließend das ‘details’-Array mit modifzierten “inStock”-Werten als ‘variants’ zurückgeschrieben habe. Leider wurden dabei alle Varianten gelöscht und irgendwelche merkwürdigen Configurator-Set-Einträge erzeugt. Hat jemand einen konkreten Ansatz, wie ich lediglich den Warenbestand einzelner Varianten (vielleicht anhand deren Artikelnummer) aktualisieren kann? Nachtrag: Ich habe mal ein MySQL-Diff der DB vor und nach einem REST-Update gemacht: Hier ein Auszug: # Tabelle s\_article\_configurator\_option\_relations 131,138d130 \< (131,152,15), \< (132,153,16), \< (133,154,17), \< (134,155,18), \< (135,156,19), \< (136,157,20), \< (137,158,21), \< (138,159,23), # Tabelle s\_articles\_prices 1518,1525c1510,1517 \< (150,'EK',1,'beliebig',20,152,50.336134453782,0,0,0.00), \< (151,'EK',1,'beliebig',20,153,50.336134453782,0,0,0.00), \< (152,'EK',1,'beliebig',20,154,50.336134453782,0,0,0.00), \< (153,'EK',1,'beliebig',20,155,50.336134453782,0,0,0.00), \< (154,'EK',1,'beliebig',20,156,50.336134453782,0,0,0.00), \< (155,'EK',1,'beliebig',20,157,50.336134453782,0,0,0.00), \< (156,'EK',1,'beliebig',20,158,50.336134453782,0,0,0.00), \< (157,'EK',1,'beliebig',20,159,50.336134453782,0,0,0.00), --- \> (150,'EK',1,'beliebig',20,152,42.299272650237,0,0,0.00), \> (151,'EK',1,'beliebig',20,153,42.299272650237,0,0,0.00), \> (152,'EK',1,'beliebig',20,154,42.299272650237,0,0,0.00), \> (153,'EK',1,'beliebig',20,155,42.299272650237,0,0,0.00), \> (154,'EK',1,'beliebig',20,156,42.299272650237,0,0,0.00), \> (155,'EK',1,'beliebig',20,157,42.299272650237,0,0,0.00), \> (156,'EK',1,'beliebig',20,158,42.299272650237,0,0,0.00), \> (157,'EK',1,'beliebig',20,159,42.299272650237,0,0,0.00), Also wurde bei meinem Update lediglich die Zuordnung des Configurator-Sets geändert - Und offenbar die Preise - Obwohl ich den Bestand ändern wollte… Sehr merkwürdig alles. Viele Grüße und besten Dank! F. Golle FGITS

Hallo, da gibt es ein Beispiel in der Doku: http://wiki.shopware.de/Shopware-4-API- … 0_869.html $updateVariantInStock = array( 'variants' =\> array( array( // update per primary key 'id' =\> 726, 'inStock' =\> 99, ), array( // update per ordernumber key 'number' =\> 'SW10204.5', 'inStock' =\> 999, ), ) ); $client-\>call('articles/205', ApiClient::METHODE\_PUT, $updateVariantInStock); lG Daniel

[quote=„Daniel Nögel“] $updateVariantInStock = array( 'variants' =\> array( array( // update per primary key 'id' =\> 726, 'inStock' =\> 99, ), array( // update per ordernumber key 'number' =\> 'SW10204.5', 'inStock' =\> 999, ), ) ); $client-\>call('articles/205', ApiClient::METHODE\_PUT, $updateVariantInStock); [/quote] Vielen Dank für Ihre schnelle Antwort! Ich habe diesen Ansatz bereits früher getestet. In diesem Fall wird der Hauptartikel(inkl. Preis und Attributmapping) und die entsprechende Variante durch Shopware gelöscht und lediglich die aktualisierte Variante (mit aktualisiertem Bestand) wieder hinzugefügt. {'variants': [{'inStock': 1, 'number': '13671002.56189'}]} VG, Fabian

Hi, setzt du die aktuelle SW-Version ein? Wenn ja, leg am besten ein Ticket unter http://jira.shopware.de an. Dort einfach nochmal kurz den Fall schildern, und dein Beispiel-JSON anhängen. Um den Fehler zu umgehen, würde ich an deiner Stelle nochmal versuchen, alle Varianten des Artikels zu referenzieren: {'variants': [{'inStock': 1, 'number': '13671002.56189'}, {'number': '213'}, {'number': 'meine-nummer'}]} Das ist was anderes, als den ganzen Artikel mit allen Daten nochmal in das Update zu packen (was du ja auch schon versucht hast), da durch das erneute Angeben des Arrays „ConfiguratorSet“ beim Update Seiteneffekte auftreten können. Das sollte man also nur angeben, wenn man es wirklich braucht. Eigentlich sollte es reichen, einfach nochmal alle Varianten (auch die, die man gar nicht aktualisieren will) via ID oder Nummer anzugeben (nur die, sonst nichts). Das ist aber nur eine Übergangslösung, weil dann alle Varianten des Artikels nochmal explizit geladen werden müssen. Übrigens: Meines Wissens wird von numerischen Artikelnummern abgeraten. Habe jetzt die Code-Stelle nicht im Kopf, würde da aber grundsätzlich zu alphanumerischen Bestellnummern raten.

1 „Gefällt mir“

Hi, muss man hierbei wirklich das Wort “variants” benutzen, muss man das unterscheiden und wissen müssen? $updateVariantInStock = array( 'variants' =\> array( array( // update per primary key 'id' =\> 726, 'inStock' =\> 99, ), array( // update per ordernumber key 'number' =\> 'SW10204.5', 'inStock' =\> 999, ), ) ); $client-\>call('articles/205', ApiClient::METHODE\_PUT, $updateVariantInStock); Kann ich nicht einfach nur sagen update den Artikel 206 (Variante) oder Artikel 207 (keine Variante): $client-\>call('articles/206', ApiClient::METHODE\_PUT, array( 'id' =\> 206, 'inStock' =\> 99, ));

Also mit der oben geannten Methode habe ich mir auch immer irgendwas zerschossen ich habe mit der folgenden Methode schnell und Fehlerfrei arbeiten können: $updateVariantInStock = array( 'inStock' =\> 99, ); $client-\>call("variants/".125, ApiClient::METHODE\_PUT, $updateVariantInStock); Dabei spreche ich die Varianten ID direkt an.