Visibility Upsert für vorhandene Produkte nicht möglich?

Hallo zusammen,
ich versuche momentan ein Upsert für ein Produkt. Leider hat er Probleme mit der SaleschannelId innerhalb von Visibility, welche ich als Payload mitgebe. Die Uuid ist fix und beim ersten mal anlegen funktioniert alles. Nur das Update funktioniert nicht. Alle Uuids sind auch beim zweiten Durchgang existent.

               $productData[$i] = [
                    "id" => $uuid, 
                    "name" => $products[$i]["nameGerman"],
                    "translations" => [
                        ["languageId" => $uuidEnglish,
                            "name"=> $products[$i]["nameEnglish"]
                        ],
                        ["languageId" => $uuidItaly,
                            "name"=> $products[$i]["nameItalian"]
                        ]
                    ], 
                    "productNumber" => $productNumber,
                    "categories" => [
                        ['id' => $categoryCache[$categoryPimId]]
                    ],
                    "visibilities" => [
                        [
                            'productId' => $uuid,
                            'salesChannelId' => $salesChannelId,
                            "visibility" => 30
                        ]
                    y],
                    "taxId" => $taxId,
                    "price" => [['currencyId' => Defaults::CURRENCY, 'gross' => 999, 'net' => 999, 'linked' => false]],
                    "stock" => (int)$stock,
                    "cmsPageId" => $cmsId
                ];
         $this->productRepository->upsert($productData, $context); 

Die ProductId habe ich zu Testzwecken mal mitgegeben. Beide Versionen ohne Erfolg. Einziger Workaround war die Visibility nur für neue Artikel zu hinterlegen.

               if($newProduct){
                    $productData[$i]["visibilities"] = [
                        [
                            'id' => $uuid,
                            'salesChannelId' => $salesChannelId,
                            "visibility" => 30
                        ]
                    ];
                }

Kennt hier jemand die Lösung? Finde das ehrlich gesagt sehr „schmutzig“.

Liebe Grüße

Upsert ist leider nicht immer ein upsert.
Ich meine mich zu erinnern, dass bei den visibilities an dieser Stelle dann kein Update sondern nochmals ein Insert ausgeführt wird.
Das klappt dann natürlich nicht, weil schon in der Datenbank angelegt.

Ah danke schon mal für die schnelle Antwort :slight_smile: und eine „saubere“ Lösung ist dir nicht bekannt korrekt?

Nur Änderungen schreiben und nicht immer den kompletten Datensatz.
Wird ein Produkt aus einem Verkaufskanal entfernt, dann musst du auch einen delete auf visibilities ausführen.

Ok Danke für deine Hilfe :slight_smile: Mir ist aufgefallen das ich der id die productId mitgegeben hatte, dabei muss es ja die Visibility id sein. Ich versuche es mal damit.
Liebe Grüße

Ohne Visibility ID will es nicht, stimmt’s? Find ich furchtbar, denn die interessiert niemanden. Ich will einfach ein Produkt beim Anlegen schon einem Sales Channel zuweisen.

Kann doch nicht die Lösung sein, immer zuerst die Visibility für das Produkt zu löschen, damit man sie dann blind (also ohne eine Visibility ID kennen zu müssen) setzen kann. Das ist dann kein Upsert mehr.

Gibt’s da keine bessere Lösung? Die ID steht ja unter der Product Resource nicht mal als Pflichtfeld: Create a new Product resources | Admin API

Edit: hab jetzt einfach einen MD5 aus der productNumber und der salesChannelId verwendet.

1 „Gefällt mir“