[gelöst] API: Varianten aktualisieren

Ich versuche mit folgendem Snippet die Varianten eines Artikels zu aktualisieren - allerdings ändert der update-call gar nichts am Artikel. Muss ich das Feld ‘configuratorSet’ eventuell auch ansprechen? Der Schnipsel hier hätte nur von einem bestehenden Konfigurator 2 Varianten “vertauscht” (varianten bekommen andere ordernumbers). $articleResource = \Shopware\Components\Api\Manager::getResource('Article'); $articleResource-\>update(273, array( 'details' =\> array( 0 =\> array( 'number' =\> '123456.1', 'configuratorOptions' =\> array( array( 'groupId' =\> 6, 'name' =\> 'weiss', ), array( 'groupId' =\> 14, 'name' =\> '5l', ), ), ), 1 =\> array( 'number' =\> '123456.2', 'configuratorOptions' =\> array( array( 'groupId' =\> 6, 'name' =\> 'schwarz', ), array( 'groupId' =\> 14, 'name' =\> '5l', ), ), ), 2 =\> array( 'number' =\> '123456.3', 'configuratorOptions' =\> array( array( 'groupId' =\> 6, 'name' =\> 'schwarz', ), array( 'groupId' =\> 14, 'name' =\> '200ml', ), ), ), ), ));

Was mir auch noch aufgefallen ist bei Artikel getOne(): Bei Variantenartikeln sind ja alle Varianten im details-Key, diese haben dann jeweils den key configuratorOptions wo die Werte für den Konfigurator liegen. Da es aber keinen “Hauptartikel” mehr gibt (in _details liegen ausschließlich die Varianten) ist jetzt eine der Varianten in den mainDetails (ich vermute mal, dass das die “Standard-Variante” ist die im Frontend dann auch vorselektiert ist), in den details ist diese Variante nicht mehr aufgeführt. In den mainDetails gibt es jedoch den configuratorOptions Key nicht, also weiß man nicht welche Variantenwerte dafür eingestellt sind.

Also laut diesem Post: programmierung-f56/rest-api-error-beim-aktualisieren-von-varianten-artikeln-t9222.html#p45265 muss man configuratorSet bei einem Update nicht ansprechen, dann weiß ich allerdings nicht was ich hier falsch mache.

Hallo Oli, das ist vll. etwas missverständlich: Die Varianten werden nur in der Rückgabe unter ‚details‘ gelistet - die Eingabe erwartet aber im Array ‚variants‘. Außerdem musst du noch einen Preis setzen. Ein knappes Beispiel: $usertest = array( 'variants' =\> array( array( 'number' =\> '123456.3', 'configuratorOptions' =\> array( array('group' =\> 'Grösse', 'option' =\> 'XXL'), array('group' =\> 'Farbe', 'option' =\> 'Weiß'), ), 'prices' =\> array( array( 'customerGroupKey' =\> 'EK', 'price' =\> 999, ), ) ) )); Das mit dem „Du musst das ConfiguratorSet nicht jedes Mal angeben“ gilt übrigens nur, wenn die entsprechenden Gruppen und Optionen schon existieren. Wenn du daran was verändern willst, musst du auch das ConfiguratorSet mit angeben. Ich hoffe, dass dir das schonmal weiter hilft. Daniel

2 Likes

Leider scheint es heute noch so, dass beim Aktualisieren, respektive. Löschen von Varianten „isMain“ nicht direkt gesetzt wird bzw. werden kann. Dies führt gerade bei regelmäßigen Aktualisierungen aus ERP Systemen zu großen Problemen. Insbesondere dann, wenn der Hauptvariantenartikel welcher für die Vorauswahl vorbelegt ist, gelöscht wird. Dann ist der Artikel mit seinen Varianten zwar weiterhin einer Kategorie zugeordnet, wird aber nicht mehr angezeigt. Je öfter dabei dann nun aktualisieren der Variantenartikel aus Drittsystemen erfolgen, desto weniger Produkte befinden sich irgendwann im Shop. Gerade für B2B, Klamotten & Co. ist das ein sehr kritisches Thema. Hat jemand hier andere Erfahrung oder Lösungen? Gruß Patrick

[quote=“pemmler”]Leider scheint es heute noch so, dass beim Aktualisieren, respektive. Löschen von Varianten “isMain” nicht direkt gesetzt wird bzw. werden kann. Dies führt gerade bei regelmäßigen Aktualisierungen aus ERP Systemen zu großen Problemen. Insbesondere dann, wenn der Hauptvariantenartikel welcher für die Vorauswahl vorbelegt ist, gelöscht wird. Dann ist der Artikel mit seinen Varianten zwar weiterhin einer Kategorie zugeordnet, wird aber nicht mehr angezeigt. Je öfter dabei dann nun aktualisieren der Variantenartikel aus Drittsystemen erfolgen, desto weniger Produkte befinden sich irgendwann im Shop. Gerade für B2B, Klamotten & Co. ist das ein sehr kritisches Thema. Hat jemand hier andere Erfahrung oder Lösungen? Gruß Patrick[/quote] Genau vor diesem Problem stehen wir gerade. Wir haben uns schon gewundert, wieso der Shop auf einmal so “leer” wirkt. Bei uns ist Größe “XS” z.B. eine Randgröße, die häufig ausverkauft bzw. nicht am Lager ist, diese wird dann deaktiviert, zu 95% ist “XS” aber auch die erste Variante und somit vom Standard her vorausgewählt. Wird diese über den Import deaktiviert wird der Artikel über die Suche nicht mehr gefunden und der Artikel ist im Frontend in der entsprechenden Kategorie nicht mehr auffindbar. Über einen direkten Aufruf wird der Artikel jedoch gefunden, daher gibt es z.B. keine Fehlermeldung von den Google Webmaster tools. Hat jemand für dieses gravierende Problem schon eine Lösung gefunden?

Hallo Christian, da kann dir geholfen werden. Seitens Shopware ist mir der Königsweg bisher nicht bekannt, was die Umsetzung der API-Logik an nachfolgende Systeme angeht (welche meistens ja in KMUs bereits bestehen) - *wink* Zaunpfahl. Ich bin seit zwei Monaten allerdings nicht mehr bei meinem bisherigen Arbeitgeber, wo wir gemeinsam das Thema mit viel Zeit und Nerven mit dem ERP SelectLine für den praktischen Gebrauch finalisiert haben. Ich wurde von einem Kunden abgeworben. Schreib doch mal hier im Forum, welches ERP ihr verwendet und wie ihr dieses mit Shopware angebunden habt. Dann gibts von mir den direkten Kontakt zu meinem bisherigen und aktuellen Entwickler, damit ihr euch austauschen könnt. Da hatten wir mehr oder weniger ziemlich tief in die Trickkiste gegriffen, um uns eine wirklich gute praktische Lösung auszudenken, die aber auch zuverlässig funktioniert. Obwohl die Lösung schlussendlich eigentlich relativ simpel und pragmatisch war. Gruß Patrick