Ändert den Status von Auftragspositionen.
Es darf natürlich nicht jeder Benutzer irgendwelche Positionen von einem Status in irgendeinen anderen Status ändern, sondern es muß eine entsprechende Regel in „OrderStateRules“ (s. om_GetOrderStateRules_Ad) konfiguriert sein. Dort wird also immer nachgeschaut, ob auch wirklich die benötigten Berechtigungen für die Änderungen vorhanden sind. Sollte es dabei Probleme geben, wird KEINE Position geändert und es gibt den Fehler „-340“ !
Da die Berechtigungen von einer „PaymentForShippingID“ (d.h. einer Zahl-/Versandart-Kombination) abhängen, müssen wir zu den Aufträgen der betroffenen Positionen die Zahlart und die Versandart ermitteln. Die sich hieraus ergebenden Kombinationen müssen aktuell auch in „PaymentForShipping“ konfiguriert sein, sonst können wir die Berechtigungs-Überprüfung ja nicht durchführen ! Kann eine Zahl-/Versandart-Kombination nicht ermittelt werden, brechen wir ebenfalls ab, und zwar mit dem Fehler „-330“ !
Allgemeiner Hinweis zum feature der „TRI-Trigger“ :
U.U. möchte man, daß durch das Ändern eines Status irgendwelche Aktionen ausgelöst werden (Überprüfungen, Benachrichtigungen etc.). Zu diesem Zweck gibt es die Möglichkeit, einen sogenannten „TRI-Trigger“ an den Status („OrderStateID“) zu koppeln. Näheres dazu ist dem Parameter „ChangeOrderStateTriggerID“ von om_ModifyOrderStates_Ad zu entnehmen.
Dem Trigger (bzw. wenn entsprechend konfiguriert : der „Custom“-Prozedur, die innerhalb des Triggers dann aufgerufen wird - s. Rückgabespalte „ExecuteProcedureName“ von mi_GetTRITrigger_Ad) stehen neben der „OrderStateID“ noch weitere Daten zur Verfügung :
Und zwar werden die vom Status-Wechsel betroffenen „OrderContentID“s zusammen mit der Information, in welchem Status sie jeweils VOR dem Wechsel waren, in der Tabelle „dstoreifin.dbo._ac_ChangeOrderState“ (in den beiden Spalten „OrderContentID“ und „PreviousOrderStateID“) übergeben.
ACHTUNG : Wenn in dem Trigger z.B. der Status einiger Positionen einfach „weitergesetzt“ wird, d.h. wieder om_ChangeOrderState_Ad aufgerufen wird, und dazu die „OrderContentID“s in „tempdb.dbo.OneID“ übergeben werden, sind die evtl. ursprünglich übergebenen IDs in „tempdb.dbo.OneID“ natürlich „futsch“ !
Anmerkungen zum Parameter „AcceptNegativeStock“:
Sind das „AvailabilityManagement“ in „Settings“ aktiviert (d.h. ist der Wert zu diesem Schlüssel „1“), und gehört der neue Status (→ „OrderStateID“) der Kategorie „1“ an, wird zu jedem Artikel, dessen alte „OrderStateID“ der zugehörigen Auftragsposition NICHT der Kategorie „1“ angehört, die noch vorhandene Menge (Eigenschaft zum Merkmal mit „NodeCharacteristicID = 3“) um die bestellte Anzahl reduziert. Dies geschieht nur bei Artikeln, zu denen es das Attribut „Menge“ überhaupt gibt. Bei einer Änderung von einem Status der Kategorie „1“ in einen Status, der nicht der Kategorie „1“ zugeordnet ist, werden entsprechende Mengen gutgeschrieben.
Falls eine neu berechnete Menge negativ sein sollte, wird der Vorgang im Falle „AcceptNegativeStock = 0“ abgebrochen !
Andernfalls wird die „Verfügbarkeit“ (Eigenschaft zum Merkmal mit der ID „9“) des betroffenen Artikel-Elementes auf „Nicht lieferbar“ (interne „ValueID = -1“) gesetzt.
ACHTUNG :Wenn ein Artikel vor dem Aufruf die Eigenschaft „Nicht lieferbar“ hatte, durch diese Prozedur aber Mengen gutgeschrieben werden, so daß der Bestand auf einen Wert steigt, der den Artikel wieder „lieferbar“ macht (z.B. wenn die Mengen-Angabe wieder positiv ist), wird die Eigenschaft zum Merkmal „Verfügbarkeit“ NICHT aktualisiert, d.h. das Produkt BLEIBT „Nicht lieferbar“ !
HTTP-Method | POST |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | order management |
Engine-Typ | Daten-Änderung |
Letzte Aktualisierung | 7.0.7 (2015-01-29) |
OrderContentIDs | List von IDs (durch '¶' getrennt) - entweder IDs von Aufträgen oder von Auftragspositionen (je nach „IsOrderID“). Wenn „NULL“ angegeben ist, erwartet die Prozedur IDs in „tempdb.dbo.OneID“. | varchar(255) | 3.5.0 | |
IsOrderID | 0 | „0“ : Bei den übergebenen IDs handelt es sich um „OrderContentID“s, also Auftragspositionen „1“ : Es wurden „OrderID“s (also Aufträge) übergeben. In diesem Fall wird die Status-Änderung für ALLE Positionen dieser Aufträge durchgeführt | bit | 3.5.0 |
OrderStateID | ID eines Auftrags-(Positions-)Status, den die angegebenen Aufträge bzw. die Auftragspositionen bekommen sollen. Anmerkung : „0“ ist nicht erlaubt, ebenso sind Werte „>= 250“ verboten (da intern reserviert) ! | tinyint | 3.5.0 | |
AcceptNegativeStock | 1 | Siehe Beschreibung | bit | 3.5.0 |
SelectDeniedOrders | 0 | Wenn die Prozedur den Status-Wechsel für einige Positionen abweist oder keine „PaymentForShippingID“ aus Versand- und Zahlart des/der Auftrags/Aufträge ermittelt werden kann, sollen die abgewiesenen Positionen dann ausgegeben werden ? | bit | 3.5.6 |
Spaltenname | Beschreibung | SQL-Datentyp1) | ab Version |
---|---|---|---|
OrderID | ID des zur „OrderContentID“ zugehörigen Auftrags | integer | 3.5.6 |
OrderContentID | ID einer Auftragsposition für die die Status-Änderung abgewiesen wurde | integer | 3.5.6 |
Die Prozedur hat keine Output-Parameter.
Code | Beschreibung | Quelle 2) |
---|---|---|
-1323 | Die Person besitzt kein Konto zum angegebenen Typ | nur indirekt |
-1322 | Transaktion kann nicht durchgeführt weden, da der Status des Kontos dies nicht erlaubt | nur indirekt |
-1321 | Transaktion kann nicht durchgeführt weden, da das Konto keine ausreichende Deckung aufweist | nur indirekt |
-1204 | Fehlender oder falscher Eintrag in CampaignSettings | nur indirekt |
-621 | Fehlender oder falscher Eintrag in PersonTypeSettings | nur indirekt |
-599 | Lizenz ist ungültig oder abgelaufen | nur indirekt |
-572 | Die Prozedur darf nur innerhalb einer Transaktion ausgeführt werden | nur indirekt |
-569 | Der Benutzer hat kein Ausführungsrecht für die Prozedur | nur indirekt |
-567 | Die Prozedur darf z. Zt. nicht ausgeführt werden | nur indirekt |
-566 | Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werden | nur indirekt |
-550 | Fehlender oder falscher Eintrag in Settings | nur indirekt |
-540 | Falsches Format | nur indirekt |
-535 | Das Datum liegt nicht in der Vergangenheit | nur indirekt |
-530 | Der Wert ist nicht konvertierbar | nur indirekt |
-510 | Der Benutzer ist nicht registriert | nur indirekt |
-507 | Fehlerhafte Implementierung einer Prozedur - Daten in einem Ausgabeparameter sind ungültig | nur indirekt |
-506 | Fehlerhafte Implementierung einer Prozedur - Daten in der Output-Schnittstelle sind ungültig | nur indirekt |
-504 | Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochen | direkt und indirekt |
-503 | Fehlerhafte Daten in einer Tabelle - genauere Fehlermeldung auf der Standardausgabe | nur indirekt |
-502 | Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen) | nur indirekt |
-501 | Der Parameter „TableID“ und/oder der Parameter „TableKeyID“ ist ungültig | nur indirekt |
-500 | Falsche Parameter | direkt und indirekt |
-398 | Einige OrderSurchargeInformation sind ungültig | nur indirekt |
-390 | Einige OrderContentInformation sind ungültig | nur indirekt |
-385 | Die Brutto-Summe aus Warenwert plus Surcharges unterschreitet den vorgegebenen Mindestwert | nur indirekt |
-348 | Status-Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werden | nur direkt |
-347 | Ungültige „OrderStateID“ (da für interne Zwecke reserviert) | nur direkt |
-340 | Fehlende Berechtigung zum Ändern des Orderstatus | nur direkt |
-333 | Ein benötigter Steuersatz ist nicht bekannt oder konnte nicht ermittelt werden | nur indirekt |
-330 | Es kann keine oder keine eindeutige PaymentForShippingID zu einer Order ermittelt werden | nur direkt |
-320 | Der Bestand eines Produktes darf nicht unter 0 sinken | nur indirekt |
-285 | Der Benutzer hat keine Berechtigung, vergangene Eigenschaften zu diesem(n) Merkmal(en) zu ändern | nur indirekt |
-284 | Der Benutzer hat keine Berechtigung, Eigenschaften zu diesem(n) Merkmal(en) zu modifizieren | nur indirekt |
-283 | Der Benutzer hat keine Berechtigung, Eigenschaften zu diesem(n) Merkmal(en) zu ermitteln | nur indirekt |
-245 | Einige Artikel-Eigenschaften sind ungültig | nur indirekt |
-242 | Relative Änderung nicht möglich, da es eine Eigenschaft gibt, deren Gültigkeit in d. Zukunft beginnt | nur indirekt |
-241 | Änderung(en) der Eigenschaft(en) konnte(n) aufgrund paralleler Änderungen nicht durchgeführt werden | nur indirekt |
-221 | Es konnte kein rekursives Merkmal mit der Standardwährung als Einheit ermittelt werden | nur indirekt |
Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.
7.0.7 | 2015-01-29 | Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf] |
7.0.5 | 2014-05-26 | Problem bzgl. TRI-Trigger behoben (wenn eine andere Prozedur außer „_ac_NewOrder“ auszuführen ist, in der dynamisches SQL verwendet wird) : „Another Execute Immediate statement cannot be executed inside an Execute Immediate statement“ |
7.0.3 | 2013-12-13 | Implementierung des neuen „TRI-Trigger“-features |
6.5.4 | 2013-04-29 | „StartProcedure“-Call u.A. wg. UTF-8 Unterstützung angepasst |
6.0.2 | 2011-06-08 | 1. Neu : Spezielle Behandlung von Status-Wechseln in oder aus der Kategorie „Surcharge-Neuberechnung“ 2. Neu : Spezielle Behandlung von Status-Wechseln in die Kategorie „Prepaid-Code generieren“ |
5.5.2 | 2008-10-21 | 1. Parameter „Fire_ac_ChangeOrderState“ ist weggefallen, er wurde durch einen entspr. „Settings“-Eintrag ersetzt 2. Quellcode-Anpassung an den aktuellen Standard |
5.1.3 | 2006-07-27 | 1. Zahlreiche Änderungen an intern verwendeten Prozeduren ⇒ Komplette Überarbeitung der Prozedur 2. Interne Änderung bzgl. des Verhaltens in Transaktionen sowie bzgl. der Überprüfung der übergebenen IDs 3. Überarbeitung der Doku |
5.1.2 | 2006-06-26 | Berücksichtigung, daß ab 5.1.2 die „OrderStateID“s größer „249“ für interne Zwecke reserviert sind |
5.0.3 | 2005-06-07 | Die intern verwendete Prozedur „_if_st_CorrectStatistics“ wurde durch „_if__st_CorrectStatistics“ ersetzt |
5.0.2 | 2005-04-29 | Die Schnittstelle der intern verwendeten Prozedur „_st_CorrectStatistics“ hat sich geändert |
4.0.14 | 2004-06-03 | 1. „_mi_StartProcedure“, „_mi_FinishProcedure“ und „_mi_ChooseParamValueSeperator“ 2. „set transaction isolation level 1“, „set rowcount 0“ 3. Konsequente Fehlerbehandlung 4. Innerhalb der Transaktion wurde bei einem Fehler kein „rollback“ ausgeführt |
4.0.12 | 2004-04-30 | In der Tabelle „OrderContent“ wurde die Spalte „LastEditedFromUserID“ [korrekterweise] in „LastEditedByUserID“ umbenannt, außerdem gibt es eine zus. Spalte „LastEditedAtDateAndTime“ |
4.0.2 | 2003-06-11 | Berücksichtigung der neuen Spalte „LastEditedFromUserID“ von „OrderContent“ |
3.5.21 | 2002-08-06 | |
3.5.19 | 2002-06-17 | |
3.5.10 | 2001-07-14 | |
3.5.9 | 2001-06-16 | |
3.5.7 | 2001-05-04 | |
3.5.6 | 2001-04-17 | |
3.5.0 | 2000-11-23 | Erstmalig in dieser Version erstellt |
Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:
Unformatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/om_ChangeOrderState_Ad?OrderContentIDs=<value>&OrderStateID=<value>'
Mit xmllint 3) formatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/om_ChangeOrderState_Ad?OrderContentIDs=<value>&OrderStateID=<value>' | xmllint --format -
use dStore_php\WebService; $service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80); $request = new WebService\Requests\Engine\Procedure\Request( new WebService\Requests\AccessData('default'), 'om_ChangeOrderState_Ad', array( 'OrderContentIDs' => '<value>', 'OrderStateID' => <value>, // 'IsOrderID' => 0, // 'AcceptNegativeStock' => 1, // 'SelectDeniedOrders' => 0 ) ); $service->execute($request); $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); $ResultSet = $xml_result->getRowsAsArray();
XML zur Ausführung mit der Methode engine/execute, z.B. per
curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?> <ListOfBatches> <Batch No="0"> <Procedure Name="om_ChangeOrderState_Ad"> <Parameters> <Parameter Name="OrderContentIDs"><!-- varchar value --></Parameter> <Parameter Name="OrderStateID"><!-- tinyint value --></Parameter> <!-- <Parameter Name="IsOrderID">0</Parameter> --> <!-- <Parameter Name="AcceptNegativeStock">1</Parameter> --> <!-- <Parameter Name="SelectDeniedOrders">0</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>