Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:om_changeorderstate_ad

om_ChangeOrderState_Ad

Ä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-MethodPOST
HTTP-AuthOptional
Tags
Engine-Kategorieorder management
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.7 (2015-01-29)

Parameter

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
IsOrderID0 „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
bit3.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) !
tinyint3.5.0
AcceptNegativeStock1 Siehe Beschreibung
bit3.5.0
SelectDeniedOrders0 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 ?
bit3.5.6

Rückgabe

wenn Result (Pseudo-Parameter) IN (-330, -340) und SelectDeniedOrders = 1

Spaltenname Beschreibung SQL-Datentyp1) ab Version
OrderIDID des zur „OrderContentID“ zugehörigen Auftrags
integer3.5.6
OrderContentIDID einer Auftragsposition für die die Status-Änderung abgewiesen wurde
integer3.5.6

Output-Parameter

Die Prozedur hat keine Output-Parameter.

Mögliche Return-Codes

Code Beschreibung Quelle 2)
-1323Die Person besitzt kein Konto zum angegebenen Typnur indirekt
-1322Transaktion kann nicht durchgeführt weden, da der Status des Kontos dies nicht erlaubtnur indirekt
-1321Transaktion kann nicht durchgeführt weden, da das Konto keine ausreichende Deckung aufweistnur indirekt
-1204Fehlender oder falscher Eintrag in CampaignSettingsnur indirekt
-621Fehlender oder falscher Eintrag in PersonTypeSettingsnur indirekt
-599Lizenz ist ungültig oder abgelaufennur indirekt
-572Die Prozedur darf nur innerhalb einer Transaktion ausgeführt werdennur indirekt
-569Der Benutzer hat kein Ausführungsrecht für die Prozedurnur indirekt
-567Die Prozedur darf z. Zt. nicht ausgeführt werdennur indirekt
-566Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werdennur indirekt
-550Fehlender oder falscher Eintrag in Settingsnur indirekt
-540Falsches Formatnur indirekt
-535Das Datum liegt nicht in der Vergangenheitnur indirekt
-530Der Wert ist nicht konvertierbarnur indirekt
-510Der Benutzer ist nicht registriertnur indirekt
-507Fehlerhafte Implementierung einer Prozedur - Daten in einem Ausgabeparameter sind ungültignur indirekt
-506Fehlerhafte Implementierung einer Prozedur - Daten in der Output-Schnittstelle sind ungültignur indirekt
-504Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochendirekt und indirekt
-503Fehlerhafte Daten in einer Tabelle - genauere Fehlermeldung auf der Standardausgabenur indirekt
-502Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen)nur indirekt
-501Der Parameter „TableID“ und/oder der Parameter „TableKeyID“ ist ungültignur indirekt
-500Falsche Parameterdirekt und indirekt
-398Einige OrderSurchargeInformation sind ungültignur indirekt
-390Einige OrderContentInformation sind ungültignur indirekt
-385Die Brutto-Summe aus Warenwert plus Surcharges unterschreitet den vorgegebenen Mindestwertnur indirekt
-348Status-Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werdennur direkt
-347Ungültige „OrderStateID“ (da für interne Zwecke reserviert)nur direkt
-340Fehlende Berechtigung zum Ändern des Orderstatusnur direkt
-333Ein benötigter Steuersatz ist nicht bekannt oder konnte nicht ermittelt werdennur indirekt
-330Es kann keine oder keine eindeutige PaymentForShippingID zu einer Order ermittelt werdennur direkt
-320Der Bestand eines Produktes darf nicht unter 0 sinkennur indirekt
-285Der Benutzer hat keine Berechtigung, vergangene Eigenschaften zu diesem(n) Merkmal(en) zu ändernnur indirekt
-284Der Benutzer hat keine Berechtigung, Eigenschaften zu diesem(n) Merkmal(en) zu modifizierennur indirekt
-283Der Benutzer hat keine Berechtigung, Eigenschaften zu diesem(n) Merkmal(en) zu ermittelnnur indirekt
-245Einige Artikel-Eigenschaften sind ungültignur indirekt
-242Relative Änderung nicht möglich, da es eine Eigenschaft gibt, deren Gültigkeit in d. Zukunft beginntnur indirekt
-241Änderung(en) der Eigenschaft(en) konnte(n) aufgrund paralleler Änderungen nicht durchgeführt werdennur indirekt
-221Es konnte kein rekursives Merkmal mit der Standardwährung als Einheit ermittelt werdennur indirekt

XML-Schema

Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.

Historie

7.0.7 2015-01-29Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf]
7.0.5 2014-05-26Problem 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-13Implementierung 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-081. 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-211. 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-271. 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-26Berücksichtigung, daß ab 5.1.2 die „OrderStateID“s größer „249“ für interne Zwecke reserviert sind
5.0.3 2005-06-07Die intern verwendete Prozedur „_if_st_CorrectStatistics“ wurde durch „_if__st_CorrectStatistics“ ersetzt
5.0.2 2005-04-29Die Schnittstelle der intern verwendeten Prozedur „_st_CorrectStatistics“ hat sich geändert
4.0.14 2004-06-031. „_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-30In der Tabelle „OrderContent“ wurde die Spalte „LastEditedFromUserID“ [korrekterweise] in „LastEditedByUserID“ umbenannt, außerdem gibt es eine zus. Spalte „LastEditedAtDateAndTime“
4.0.2 2003-06-11Berü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-23Erstmalig in dieser Version erstellt

Code-Snippets

Engine Playground

Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:

cURL

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 -
dStore_php
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();
engine/execute

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>
2)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
3)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/om_changeorderstate_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)