Hallo, ich möchte gerne die Bestände per REST-API im Batch Modus aktualisieren. Da ich die interne Shopware Artikel-ID zu diesem Zeitpunkt nicht kenne, möchten ich die OrderNumber als ID verwenden. Um einen einzelnen Arikel zu aktualisiern, rufen ich die API mit “?useNumberAsId=true” als Parameter auf. So sieht der Code aus, wenn ich einen einzelnen Artikel aktualisieren. Das funktioniert soweit auch gut. /\* Assign values to variables \*/ $now = date("c"); $stock = 4; /\* Compute article data array \*/ $ArticleData = array( 'changed' =\> $now, 'mainDetail' =\> array( 'inStock' =\> $stock, ) ); /\* Put data \*/ $articles = $client-\>put('articles/EAN-4008789039118?useNumberAsId=true',$ArticleData);
Unsere OrderNumber hat das Format “EAN-EAN-Nummer”. Z.B. EAN-4008789039118. In unserer Warenwirtschaft ist die EAN die eindeutige und führende Nummer. Somit sollte sich der Bestand im Shop aktualisieren lassen, ohne dass zuvor die ID zur OrderNumber gesucht / ausgelesen wird. Wie sieht der Aufruf aus, wenn der Batch Modus verwendet und gleichzeit mit der OrderNumber als ID gearbeitet werden soll? Jan
Hi, beim Batch-Modus geht das automatisch, wenn eine ID im Artikel-Array ist, nimmt die API die, wenn eine Bestellnummer drin ist, nimmt die API die: http://community.shopware.com/Shopware- … Batch_Mode Also: Kein “useNumberAsId” notwendig, einfach die Bestellnummer im Maindetail mit angeben, siehe \Shopware\Components\Api\Resource\Article::getIdByData Gruß, Daniel
Hallo Daniel, leider bekomme ich das nicht hin. Ich habe jetzt folgendes ausprobiert: /\* Compute article data array \*/ $ArticleData = array( array('mainDetail' =\> array('number'=\> 'EAN-4008789039118'),'mainDetail' =\> array('inStock' =\> '10')) ); /\* Put data \*/ $articles = $client-\>put('articles/',$ArticleData);
Das funktioniert nicht. Dann habe ich folgendes ausprobiert: /\* Compute article data array \*/ $ArticleData = array( array('number'=\> 'EAN-4008789039118','mainDetail' =\> array('inStock' =\> '10')) ); /\* Put data \*/ $articles = $client-\>put('articles/',$ArticleData);
Das funktioniert auch nicht. Ich bekomme immer diese Meldung: HTTP: 200 Success Array ( [0] =\> Array ( [success] =\> [message] =\> Object(Shopware\Models\Article\Article).name: This value should not be blank. Object(Shopware\Models\Article\Article).tax: This value should not be blank. Object(Shopware\Models\Article\Article).mainDetail.number: This value should not be blank. [trace] =\> #0
Und der Bestand wird nicht verändert. Ich habe in der von dir angegebenen Datei nachgesehen, aber mir ist nicht klar, wie ich den Aufruf / Zuweisung der ‘number’ mache. Sorry, bin kein Experte und klicke mir das so zusammen / versuche das zu verstehen. Jan
Nach weiterem Probieren habe ich jetzt die Lösung gefunden: /\* Assign values to variables \*/ $now = date("c"); $EAN = 'EAN-4008789039118'; $stock = 6; $active = 1; /\* Compute article data array \*/ $ArticleData = array( array('mainDetail' =\> array('number'=\> $EAN,'inStock' =\> $stock,'active'=\> $active),'changed' =\> $now,'active' =\> $active), ); /\* Put data \*/ $articles = $client-\>put('articles/',$ArticleData);
Man muss alle Werte, die in mainDetail stehen auch nur in einem Array ‘mainDetail’ übergeben.