Wenn ich aber aus C# über RestSharp (angeblich) die gleiche Anfrage starte, dann habe ich wieder den alten Fehler. Ich muss checken was RestSharp unter der Haube überhaupt absendet.
mit Hilfe von modifizierten ShopwareApi (jetzt caseSensitive URI mit kleinem D bei “useNumberAsId” in ArticleRessource.cs) und Standard-RestCharp lib habe ich folgendes gemacht:
ShopwareApi api = new ShopwareApi(this.settings.shopwareApiUri, this.settings.shopwareApiBenutzername, this.settings.shopwareApiKey);
ArticleMain ShopArtikel = new ArticleMain();
ShopArtikel.name = artikel.BezeichnungKurz;
ArticleMainDetail amd = new ArticleMainDetail();
amd.number = artikel.Artikelnummer;
ShopArtikel.mainDetail = amd;
Supplier supplier = new Supplier();
string lieferantenname = ArtikelService.LieferantennameAusArtikelId(artikel.Id);
supplier.name = lieferantenname;
ShopArtikel.supplier = supplier;
Tax tax = new Tax();
double steuerProzentsatz = ArtikelService.SteuerprozentAusArtikelId(artikel.Id);
tax.tax = steuerProzentsatz;
ShopArtikel.tax = tax;
ShopArtikel.active = true;
api.getArticleRessource().add(ShopArtikel);
// ShopId im WaWi einpflegen (es wird angenommen das die Artikelnummer andeutig ist)
ArticleMain ShopArtikelAngelegt = api.getArticleRessource().getByOrdernumber(artikel.Artikelnummer);
ArtikelService.SetArtikelShopId(artikel.Id, ShopArtikelAngelegt.id);
Also ohne die Serverkomponente Articles.php in der Function getAction() geändert zu haben, funktioniert die Geschichte nicht.
Ich hangele mich anscheinen von Fall zu Fall hier durch … gerade funktioniert die Gruppenanlage nicht.
Um den Kontext zu behalten und nicht in einem neuen Thread alles wieder erklären zu müssen, fahre ich hier fort mit den Erlebnissen bei Versuch der Synchronisierung einer Warenwirtschaft-Software mit Shopware mittels der API …
Nächstes Problem ist bei Anlage von neuen Kategorien (wie oben schon erwähnt) aufgetreten.
Fehlermeldung: PHP Fatal error: Call to a member function getId() on null in C:\Bitnami\shopware-5.2.21-0\apps\shopware\htdocs\engine\Shopware\Components\Model\CategorySubscriber.php on line 344
Also klassische NullPointerException … erstmal frage ich mich wer da am Werk und wann … anscheinend letzte Änderungen dies betreffend wurden zuletzt 2013 (!) gemacht.
Wie auch immer … ich sichere den Zugriff auf $parent->getId() wenn $parent null ist und liefere in dem Fall dann einfach als $path die null zurück, und schaue was passiert …
ArticleMain ShopArtikel = new ArticleMain();
ShopArtikel.name = artikel.BezeichnungKurz;
ArticleMainDetail amd = new ArticleMainDetail();
amd.number = artikel.Artikelnummer;
…
api.getArticleRessource().add(ShopArtikel);
// Ich will wissen Daten des angelegten Artikels … ShopId im WaWi einpflegen (es wird angenommen das die Artikelnummer andeutig ist)
ArticleMain ShopArtikelAngelegt = api.getArticleRessource().getByOrdernumber(artikel.Artikelnummer);
Da ist also Korrektur zu Originalcode der ShopwareApi die case sensitivity betrifft (im Original steht „useNumberAsID“) untergebracht.
Um die Daten des angelegten Artikels zu bekommen könnte man auch alternativ alle Artikel vorher mit den Artikeln nach der Anlage vergleichen und den neuen herauspicken … nur performant gerade ist die Methode nicht.
ich benutze momentan auch den shopware-csharp-api-connector, und habe schon mehrere Änderungen/Bugfixes in meinen Fork bereit gestellt auf GitHub.
zB. gibt den POST hinter das „api.getArticleRessource().add(ShopArtikel)“ schon die „id“ zurück von den gerade angelegte Artikel. Das habe ich geändert mit diesem commit und können Sie dann benutzen wie: int shop_id; shop_id = api.getArticleRessource().add(ShopArtikel);
und mit diesem commit ist den Fehler behoben wie auch Ahmad hier beschrieben hat (es wird im Original Connector url encoded, was nicht mehr funktioniert in 5.2.x).