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'
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.
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
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.