API Artikel anlegen - Artikelnummer

Hi, wie kann man die nächste höhere Zahl beim anlegen eines neuen Artikel über die API erreichen?

Die Nummer die hier(Punkt 5.1) angegeben ist, heisst “turn”? https://developers.shopware.com/developers-guide/rest-api/examples/article/

Bei manchen Anleitungen habe ich auch gesehen, dass die PHP Funktion uniqueID() benutzt wird um eine zufallszahl zu generieren.

Ich würde einfach nur gern hochzählen lassen. Also wenn der letzte Eintrag 1075001, dann soll 1075002 die Nummer für den neuen Artikel sein. 

Danke und Gruss.

 

Hallo @brettvormkopp‍,

der Artikelnummer kann ein Nummer, ein String oder Nummer String sein.

und beim Api  du muss ein Nummer eintragen und gibt kein Option um ein Automatich Nummer zu generieren.

Um dass zu machen du hast zwei Option:

1- Hard Code SQL beim deine Import , um die aktuelle hochzählen zu nehmen und dann beim deine Request die nächste Nummer eintragen.

2- Extedn das Rest API, um Ihren Anforderungen zu entsprechen.

VG,

image

Tel.: +49 755 - 183 990 00 | E-Mail: info@enbit.de | Web: http://enbit.de/

Danke @ahmadsaad‍ , ich habe habe jetzt eine SQL genommen und mache eine Abfrage nach der höchsten Nummer (ohne unseren Testartikel mit der Ordernummer „testartikel“ :-D, 

SELECT MAX(ordernumber) FROM s_articles_details WHERE ordernumber != 'testartikel'

 

1 „Gefällt mir“

Leider funktioniert diese Technik nicht wenn man schnell viele hintereinander anlegen will.
Die SQL ist schnell, die Api ist zu langsam.
Wenn man einen [SQL+API]-Programmblock gemacht hat und den nächsten hinterherschiebt, ist der API-Teil noch nicht abgeschlossen und die „ordernumber“ noch nicht angelegt. Ergo ist die höchste Nummer des nächsten Programmblocks die gleiche wie beim vorherigen SQL.
Eine neue Idee wäre:

XXXUUID generieren z.b. XXX1234,
API-post( mit XXXUUID)
MAX(ordernumber) ausser XXX-Nummern
SQL-XXXUUID mit Ordernumber überschreiben.

Warum einfach, wenn man es schwer haben kann :smiley:

Ist nur so eine Idee:

Die API kann man ja auch mit eigenen Funktionen erweitern. Dann könnte man eine zusätzliche Funktion basteln, welche die letzte Nummer ermittelt - sofern sich keine andere Möglichkeit ergibt.

Naja, euer Ansatz ist aber grundsätzlich nicht multi-thread sicher. Ich hab damit zwar noch nicht herumgespielt, aber soweit ich es verstehe, hat SW ja genau dafür die Nummernkreisverwaltung (Grundeinstellungen > Shopeinstellungen > Nummernkreise). Es müsste eigentlich irgendwo der Code zu finden sein, der in einem Rutsch (einer DB Transaktion) die aktuelle Nummer liest, den Wert erhöht und sofort wieder in der Tabelle aktualisiert. Forscht mal in der Dev Doku oder auf Github nach, möchte wetten es gibt da schon ne API für :wink:

LG Phil

ich habe jetzt zwischen jedem Api-Post eine Sekunde delay eingepackt.
Jetzt stolpert es zwar ab und zu trotzdem, aber eben besser als ohne delay.

mit visueller Überwachung brauchen wir jetzt nur noch ca 400 Arbeitstage um die >2mio Artikel einzupflegen :smiley:

eine alternative wäre eine CSV zu erzeugen und die dann im Backend hochzuladen, kann man sich nicht ausdenken…

Man könnte es ähnlich lösen, wie das Konzept von „Sequences“ in Oracle.

MariaDB unterstützt das seit v10.3 von Haus aus, soweit ich das ge(googelt)sehen habe.

In MySQL müsstest Du das nachbauen. Im Prinzip eine MySQL-Funktion, der Du den Namen der Sequence übergibst und die Dir für diese Sequence dann eine fortlaufende Nummer erzeugt und in einer separaten Tabelle speichert.

Als Starthilfe:
https://ddcode.net/2019/04/14/how-to-implement-mysql-thread-safe-nextval-method/

Gruß
Marcus