Folgendes Szenario: Auf demselben Server im gleichen Verzeichnis liegen 2 Scripte. Beide Scripte sollen den Lagerbestand der Artikel aktualisieren. Beide Scripte liefern ein HTTP 200 SUCCESS. Script A ist ein Testscript, hier wird ansonsten nichts anderes gemacht: $client-\>put('articles/2237', array( 'mainDetail' =\> array( 'inStock' =\> 200 ) ));
In Script B laufen vorab and anschliessend diverse andere (nicht Shopware betreffende Abfragen, der Shopware-Teil: $client-\>put('articles/'.$article\_id, array( 'mainDetail' =\> array( 'inStock' =\> 200 ) ) );
$article_id ist ebenfalls 2237. Ich erhalte bei beiden die 200 Success Meldung mit der id 2237. Soweit also korrekt. Allerdings wird bei Script A die Datenbank korrekt geändert (instock hat anschliessend den Wert 200), während bei Script B der Wert von instock auf NULL gesetzt wird??? Womit kann das zusammenhängen? Ich komme hier nicht weiter… Danke UPDATE: Interessant ist auch, dass wenn ich in Script B im Anschluss an $client->put ein $client->get(‚articles/‘.$article_id); durchführe hier der korrekte Bestand angezeigt wird, in der Datenbank aber NULL steht… UPDATE 2: Ich verwende Shopware 4.0.5 UPDATE 3: Ein Update auf Shopware 4.0.7 brachte auch keinen Erfolg
Hängt’s vielleicht damit zusammen, dass du von Id 2337 redest, aber eigentlich 2237 meinst (wie in Script A zu sehen ist)?
nein, war ein Schreibfehler in meinem Post. Die ID ist definitiv identisch, es wird ja auch etwas in die Datenbank geschrieben (beim korrekten Artikel), aber leider NULL anstatt 200… Ich habe meinen POST dementsprechend korrigiert. Ich kann in Script B die 2237 auch im Klartext wie in Script A übergeben - gleicher Effekt… Danke trotzdem
Ich konnte das Problem weiter eingrenzen bzw. folgendes feststellen: Es wird zuerst der korrekte Wert in die DB geschrieben (200) und anschliessend mit NULL überschrieben??? Auszug aus dem MYSQL LOG: 130418 10:15:37 284 Query START TRANSACTION 284 Query UPDATE s_articles_details SET instock = ‘200’ WHERE id = ‘2237’ 284 Query commit 284 Quit 130418 10:15:39 285 Query START TRANSACTION 285 Query UPDATE s_articles_details SET instock = NULL, shippingtime = ‘4’ WHERE id = ‘2237’ 285 Query commit Im Script gibt es definitv nur ein $client->put ! Woran kann das liegen??? UPDATE: wenn ich z.b. gleichzeitig die “supplierNumber” ändere (in mainDetail), so wird diese korrekt übernommen - nur der Bestand nicht…
Hallo, hm, beide Abfragen sind ja eigentlich erstmal identisch (davon ausgehend, dass die Variable passt). So gesehen würde ich schon stark vermuten, dass es mit dem Skript zusammen hängt. Zumindest kann ich mit deinem Array das Verhalten so nicht reproduzieren. Kannst du mir ein Array geben, dass den Fehler definitiv verursacht? Oder gerne auch eine Kombination von Abfragen…? Vielen Dank schonmal, Daniel
Ich denke auch, dass es am Script liegt - weiß aber nicht wieso, da nur ein client->put ausgeführt wird. Hier ein aktuelles Beispiel: $client-\>put('articles/'.$article\_id, array( 'supplierId' =\> $supplier\_id, 'mainDetail' =\> array( 'inStock' =\> $lagerbestand, 'supplierNumber' =\> $supplier\_id ) ));
Hier die Serverantwort: [quote]HTTP: 200 Success Array ( [id] => 2240 [location] => http://fachhandel.bleicher-otto.de/api/articles/2240 ) [/quote] Das steht in der DB: [quote] id articleID ordernumber suppliernumber kind additionaltext impressions sales active instock stockmin weight position width height length ean unitID purchasesteps maxpurchase minpurchase purchaseunit referenceunit packunit releasedate shippingfree shippingtime 2240 2240 TPH-0070008798 2 1 NULL 0 0 1 NULL NULL 0.000 0 0.000 0.000 0.000 NULL NULL NULL NULL NULL NULL NULL 0 4[/quote] Hier die MYSQL LOG: [quote] 279 Query START TRANSACTION 279 Query UPDATE s_articles_details SET suppliernumber = ‚2‘, instock = ‚150‘ WHERE id = ‚2240‘ 279 Query commit 280 Query START TRANSACTION 280 Query UPDATE s_articles_details SET instock = NULL, shippingtime = ‚4‘ WHERE id = ‚2240‘ 280 Query commit [/quote] Ich verstehe es nicht… Im script wird mittels new SoapClient auch eine Verbindung zu einem anderen System hergestellt, kann das irgendwie damit zusammenhängen? Danke vorab
AHHHH! Ich habe das Problem lokalisiert. Sorry für die Umstände. Das Problem ist, das unser WWS (Actindo) nach meiner Aktualisierung den Bestand automatisch angepasst hat und hier ein falscher Wert übergeben wird. Ich habe die automatische Bestandssynchronisation im WWS ausgeschaltet und siehe da - alles läuft wie gewünscht. Danke trotzdem - vielleicht hilft diese Info später mal bei ähnlichen Problemen.