Product_Number statt Product ID für Stock Update Payload / Single Product Stock Update

Hi liebe Community, da ich nun den zweiten Tag verbrannt habe mit suchen, ausprobieren und scheitern… :frowning:
Vielleicht kann mir einer helfen.

Ich habe die API soweit einigermaßen verstanden. Ich habe aus einem täglich generiertem Feed folgende Daten:

product_number & stock

diese möchte ich über die API täglich einspeisen. Mir liegen nicht die ID’s in dem Feed vor, ich meine aber gelesen zu haben (fragt mich bitte nicht wo) dass es gehen würde auch mit der product_number als Identifier die Produkte updaten zu können.

Es geht nur um den Lagerbestand. Weiß jemand wie ich den Request aufbauen müsste?

Ich wäre euch zu massivem Dank verpflichtet und bin bereit das zu würdigen in Form eines digitalen KAffees :grin:

@bettenundwohnen ich glaube, so geht es nicht, für ein Udpate eines Produktes wirst du wohl nicht drumherum kommen, erst die ID aus der API zu lesen, um diese dann für das Update zu verwenden.

Falls ich falsch liege, bin ich sehr gespannt wie die Lösung aussieht :slight_smile:

Es gibt bereits Ideen in Richtung ID Mapping auf die Produkt Nummer und die UUID’s mit einem aus den Artikeldaten stammenden wert zu ergänzen über einen UUID Version-3 Generator… nur ist mir der genaue Werdegang noch nicht ganz klar und vllt gibt es ja auch einen anderen Weg. :-/ Fest steht, dass sich der Quellfeed jedenfalls nicht anpassen lässt und das Problem im Hause bleibt. Wie machen das denn die anderen so?

Wenn ihr eine CSV habt, durchlauft ihr dies mit einem php Script und mit dem sendet ihr die Daten aus der CSV an Shopware über die API?

Wir haben sowas Ähnliches mit Produkt und Eigenschaften. Die CSV wird von unserem Pim erzeugt, per SFTP auf einen Server geladen, da ist ein php Script, welches im Cronjob die Daten ausliest und jede Zeile verarbeitet. Wir holen uns dann mit der productNumber die id und aktualisieren damit das Produkt. Das ist vielleicht nicht die schnellste Methode und es gibt sicherlich eine elegantere Art und Weise. Aber das klappt seit vielen Monaten ohne Probleme, sehr stabil.

Wir nutzen das SDK welches von SW empfohlen wird:

und zum Abrufen der Id bzw. des Produktes (wir machen da noch mehr mit, deswegen das ganze Produkt) haben wir folgende Methode:

    private function getProductBySku(string $productNumber): ?ProductEntity
    {
        $productRepo = RepositoryFactory::create(ProductDefinition::ENTITY_NAME);
        $criteria = new Criteria();
        $criteria->addFilter(new EqualsFilter('productNumber', $productNumber));
        return $productRepo->search($criteria, $this->getContext())->first();
    }

Man könnte vielleicht auch sowas in der Art machen, wenn man nur die Id haben will. (Nicht getestet)

    private function getProductIdBySku(string $productNumber): ?string
    {
        $productRepo = RepositoryFactory::create(ProductDefinition::ENTITY_NAME);
        $criteria = new Criteria();
        $criteria->addFilter(new EqualsFilter('productNumber', $productNumber));
        return $productRepo->searchIds($criteria, $this->getContext())->firstId();
    }

Olli kannst du mir bei der Implementierung helfen? Ich frag jetzt einfach mal direkt. (muss nicht umsonst sein) Aber ich fürchte bei der Methode verbrate ich noch mehr Stunden / Tage :slight_smile: Letztlich will ich doch nur die Stocks updaten… und so langsam verliere ich mich in den Optionen.

Für alle die Interessiert sind - ich habe einen Workaround der gut funktioniert. Gerne per PN da es hier zu kompliziert wäre.