Rest API => Update Articles mainDetailId

Hallo zusammen,

ich würde gerne über die API die mainDetailId von Variantenartikeln ändern. Wenn ich eine neue ID per Put Request schicke, interessiert Shopware das aber herzlich wenig. Es wird zwar ein Erfolg gemeldet, aber die mainDetailId ist trotzdem weiter die Gleiche wie vorher. Hat jemand von euch eine Idee wie ich das Problem lösen kann?

Sicher, dass du nicht die mainDetail > „number“ meinst?

Nein, sicher bin ich nicht.
Das Ziel ist es den Hauptartikel eines Varianten Produkts zu ändern, so wie es auch im Backend über „Vorauswahl“ = true möglich ist. Wenn das über mainDetail > number möglich ist, dann nehme ich auch das. Wie das Ziel erreicht wird ist egal.

Die Vorauswahl wird über „kind“ gesteuert. Soll z.B. der Hauptartikel die Vorauswahl sein, dann muss dieser bei „mainDetail“ kind = 1 haben. Alle anderen Varianten (details) dann kind = 2.

Hallo R4M, danke für Deine Antwort.

„kind“ kann ich über die API ändern, das funktioniert auch wenn ich den Artikel geöffnet habe und dann die Varianten Ansicht aktualisiere. Dann sehe ich die neue Variante als „Vorauswahl“ true und die alte als „Vorauswahl“ false.
Wenn ich in der Datenbank nachschaue ist die MainDetailId allerdings weiterhin die alte Nummer. Wenn ich die Häkchen im Backend ändere, ändern sich sowohl „kind“ als auch die „mainDetailId“.

Wenn ich über die API geändert habe (also nur „kind“ getauscht, „mainDetailId“ weiterhin die alte Nummer, weil Update über API nicht funktioniert) und einen angepassten Artikel dann neu aufrufe stehen auf einmal die alte als auch die neue ID als „Vorauswahl“ true drin…

Es ist also ein Teilerfolg, aber leider noch nicht die endgültige Lösung :-/

Hm, das muss ich mir mal in Ruhe ansehen ob dort die Änderung der MainDetailId wirklich nötig ist. Diese MainDetailId verweist ja nur auf die Artikel Details, die bleiben in der Regel ja gleich. Also Unabhängig welche Variante als Vorauswahl eingestellt ist. Muss ich mal selber testen …

Moin,

ja das sieht wohl etwas komplexer aus, als erst vermutet. Ja die mainDetail-ID ändert sich auf die jeweilige Variante die neu als Vorauswahl sein soll. Ich bin mir nicht ganz sicher ob diese Anpassung der Vorauswahl überhaupt sauber über die API überhaupt möglich ist - hatte ich selber bisher noch nicht.

Bei einer Änderung der Vorauswahl müssten auch immer die kompletten Artikel-Details mit verändert werden. Damit der neue Inhalt bei MainDetail gesetzt werden kann, muss er ja erst ausgelesen werden. Es ändert sich ja nicht nur die ID sondern auch die Inhalte vom kompletten Array mainDetail. Also auch Preise, Attribute, Optionen etc…

Vorher:

{
    "data": {
        "mainDetailId": 2,
	...
        "mainDetail": {
            "id": 2,
            "articleId": 2,
            "unitId": 2,
            "number": "SW10002",
            "supplierNumber": "NSW10002",
            "kind": 1,
        ...
        }
        ...
}

Nachher:

{
    "data": {
        "mainDetailId": 3,
	...
        "mainDetail": {
            "id": 3,
            "articleId": 2,
            "unitId": null,
            "number": "SW10002.1",
            "supplierNumber": "NSW10002",
            "kind": 1,
        ...
        }
        ...
}

Bin mir auch eben nicht sicher, ob die API die Inhalte bei „meinDetail“ automatisch anpasst, wenn die „mainDetailId“ verändert wird.

Guten Morgen,

das ist über die Standard Shopware API tatsächlich deutlich komplizierter als ich gehofft hatte. Interessanterweise funktioniert es bei einfacher Änderung von kind in der s_articles_details und main_detail_id in der s_articles einwandfrei. Danach ist der Artikel wie er sein soll und auch das mainDetail array in der API passt. Ich werde mir wahrscheinlich einen eigenen API Endpunkt bauen, der bei Übergabe von ArtikelID und neuer MaindetailID die entsprechenden SQL Statements ausführt. Scheint mir aktuell die einfachste Lösung zu sein.

Falls Interesse warum ich das ganze überhaupt brauche: Wir befüttern den Shop komplett aus einem PIM und ändern dort auch häufiger mal die Stammvariante. Wenn der Artikel dann vom PIM übergeben wird, müssen wir die Stammvariante vorher manuell abändern, damit der Sync funktioniert oder jedes Mal den Artikel löschen und komplett neu anlegen. Wenn das PIM einfach selbst ändern könnte, wäre das ein großer Gewinn.

Das wäre dann die letzte Lösung, obwohl da die Api jederzeit mit eigenen Funktionen erweitern kann. Ich denke auch, da gibt es dann genug Spielraum.

Hatten für einen Kunden ein ähnliches Projekt. Alle Artikel werden über die Api in den Shop eingepflegt. Also eine Schnittstelle gebaut, die Artikel und Bilder, Kategorien verarbeitet. Allerdings die Änderung der Vorauswahl stand bisher nie zur Debatte, weshalb auch mir dieser Punkt nie aufgefallen ist.

Das ist für uns recht wichtig, weil wir MHD Ware verkaufen, daher keine großen Bestände vorhalten können und auch schon mal Artikel ausverkauft sind. Die wollen wir teilweise im Listing zeigen, aber auch nicht immer. Und vor allem wollen wir keine ausverkauften Varianten im Listing zeigen, wenn andere noch Bestand haben. In solchen Fällen machen wir dann eine bestandsführende Variante zum Master / Vorauswahl. Das machen wir über Trigger, die die Bestände monitoren und teils auch übers PIM. Zudem muss das PIM drauf reagieren können, wenn die Trigger was geändert haben.