[REST-API] Hauptvariante über Varianten-Endpunkt setzen

Hallo,

gibt es eine Möglichkeit die Hauptvariante eines Artikels über den Varianten-Endpunkt der REST-API zu setzen?

Zur Zeit verwenden wir zum Anlegen und Bearbeiten von Artikelvarianten ausschließlich den Varianten-Endpunkt. Ausgangslage ist ein Variantenartikel (id: 12) mit mehreren Varianten (122 und 123), wobei Variante “122” die aktuelle Hauptvariante ist. Es soll über einen “PUT”-Request auf den Varianten-Endpunkt die eingestellte Hauptvariante geändert werden:

PUT /api/variants/123
{"kind": 1, [..]}

Auch wurde versucht zuvor oder danach mit einem seperatem “PUT”-Request die alte Hauptvariante wieder als normale Variante zu markieren:

PUT /api/variants/122
{"kind": 2}

Leider führen alle bisherigen Versuche zu Inkonsitenzen in der Datenbank, da zwar die “kind”-Spalte in der Tabelle s_article_details wie gewünscht gesetzt ist (1 bei Variante 123; 2 bei allen anderen Varianten), aber in der Tabelle s_articles, in der noch einmal redundant die Hauptvariante in der Spalte “main_detail_id” hinterlegt ist, ist noch die vorherige Hauptvariante angegeben. Dies führt natürlich zu Bugs sowohl im Frontend als auch im Backend (z.B. sorgt der Versuch die Hauptvariante über das Backend einzustellen dazu, dass alle Varianten in s_article_details als Hauptvariante markiert werden).

Nach einem kurzen Blick in den Source-Code (/engine/Shopware/Components/Api/Resource/Variant.php) scheint es so, als wäre gar kein Code implementiert, um diesen speziellen Fall abzudecken. Meiner Meinung nach sollte hier zumindest ein Fehler geworfen werden, wenn über die API versucht wird die “kind” Spalte zu ändern, da dies ja unweigerlich zu Inkonsistenzen führt.

Gibt es eine Möglichkeit die ich übersehe, z.B. einen undokumentierten Parameter o.ä.?

Der einzige Workaround der mir aktuell einfällt, wäre die Hauptvariante über einen 2. “PUT”-Request zum Artikel-Endpunkt zu setzen, da hier der entsprechende Code zum Ändern der Hauptvariante implementiert ist. Also z.B.:

PUT /api/articles/12
{"variants": {"id": 123, "isMain": true}}
oder gleichbedeutend:
{"variants": {"id": 123, "standard": true}}

Wobei weder der Parameter “standard” noch “isMain” in der Shopware 5 REST-API-Dokumentation erwähnt wird.

Mit freundlichen Grüßen,

Philipp

PS: Ich hätte gerne sinnvolle Tags auf meinem Beitrag gesetzt, leider scheinen aber außer den 4 populärsten Tags (die alle nichts mit dieser Frage zu tun haben) kein Tag zu existieren.

Ich vermute ich habe das “selbe” Problem. Wenn ich einen Artikel mit 3 Varianten importiere dann erscheinen z.b. beim Google Produktexport 4 Artikel. Der Hauptartikel ohne Variantennamen sowie die 3 Varianten.

Legt man einen Artikel per Hand im Backend an, dann erscheint der Hauptartikel nirgends. Nur die 3 Varianten als solches.

Was du beschreibst würde die Problematik beheben?

Hallo,

also aktuell haben wir das Ganze gelöst, in dem wir das Feld „kind“ nicht mehr über den Varianten-Endpunkt setzen, sondern nach dem Aktualisieren der Variante nocheinmal ein „PUT“-Request an den Artikel-Endpunkt absetzen:

PUT /api/articles/[article_id]
{"variants": [{"id": [hauptvarianten_id], "isMain": true}]}

(oben fehlen die eckigen Klammern um den „variants“-Array)

Der zweite Aufruf setzt dann sowohl das Feld „main_article_id“ auf dem Artikel korrekt, als auch das Feld „kind“ auf allen Varianten.

Prinzipiell könnte man statt der Option „isMain“ auf der Variante auch die ConfiguratorOptions nocheinmal übergeben. Dann würde ggf. ein noch existierender Details Datensatz gelöscht, der keine ConfiguratorOptions gesetzt hat, aber zuvor als main_detail angegeben war. Das wäre ganz praktisch wenn man einen normalen Artikel in einen Variantenartikel umwandelt.

Für unseren Workflow wäre es aber um einiges sinnvoller das ganze mit einem Request zu machen (am Besten über den Variant-Endpunkt), da wir das erste Request nicht mehr rückgängig machen können, wenn das erste fehlschlägt.

 

Grüße

Philipp

Hallo, 

Ich vermute ich habe das „selbe“ Problem. Wenn ich einen Artikel mit 3 Varianten importiere dann erscheinen z.b. beim Google Produktexport 4 Artikel. Der Hauptartikel ohne Variantennamen sowie die 3 Varianten.

Das hört sich allerdings eher danach an, dass das ursprüngliche main_detail nicht gelöscht wurde.

Der von mir beschriebene Fehler müsste auch im Backend sichtbar sein. Also Der Artikel taucht zweimal auf, mit zwei verschiedenen Varianten Artikelnummern, auch wenn „Varianten anzeigen“ nicht angewählt ist.

Normalerweise sollte bei einem Variantenartikel außer den Details der Varianten kein weiteres Detail für den „Hauptartikel“ mehr vorhanden sein, Wenn man allerdings zuerst den Hauptartikel inkl. main_detail anlegt und im Anschluss die Varianten über den Varianten-Endpunkt, bleibt das alte main_detail zurück. Das würde dann über die zweite Möglichkeit aus dem obigen Post behoben.

Grüße

Philipp

Hallo Philipp, danke für die Erläuterung.

In der Tat wird bei mir eine Zeile in der s_article_details zu viel angelegt.

Mal sehen was der Importhersteller dazu sagt.