Prozedur um „Rückmeldungen“ zu Aufträgen hinterlegen zu können, die aus einem Fremdsystem (i.d.R. ein Warenwirtschafts-System) kommen (wie z.B. die erfolgreiche Annahme bzw. der Versand eines Auftrags).
Die Rückmeldung erfolgt in erster Linie durch Setzen der Status für die Auftragspositionen. Daher erwartet die Prozedur in „tempdb.dbo.TwoIDs“ :
Hinweis :
Übergibt man eine Position, die nicht im Auftrag vorkommt, gibt es „-500“. In Fällen, wo die Ursache dafür aber die Tatsache ist, daß (wie in vielen WWS möglich) im Hauptsystem nachträglich Positionen zum betroffenen Auftrag hinzugefügt wurden, wäre es schöner, diesen Fehler zu ignorieren bzw. Positionen, die nicht vorkommen, zu ignorieren. Dies kann man erreichen, indem man den „Settings“-Eintrag zum Schlüssel „IgnoreUnknownPositionsInAcknowledgeOrder“ auf „1“ konfiguriert.
Achtung : 1. Dies sollte natürlich mit Bedacht geschehen, da „echte“ Fehler (hinsichtlich falscher Positions-Nummern) so natürlich nicht mehr auffallen !
2. Die Datensätze aus „tempdb.dbo.TwoIDs“, die zu nicht-existierenden Positionen gehören, werden entfernt (stehen dem Aufrufer also nach Ausführung dieser Prozedur nicht mehr zur Verfügung) !
Man könnte eigentlich einfach om_ChangeOrderState_Ad aufrufen; im Regelfall möchte man aber zusätzlich die Auftragsnummer sowie (im Falle eines Neukunden) evtl. die Kundennummer des Auftraggebers speichern, die in dem anderen System vergeben wurde.
U.U. muß sogar die „PersonID“ geändert werden : Das Hauptsystem stellt vielleicht z.B. fest, daß es sich bei dem vermeintlichen Neukunden um eine Dublette handelt und legt den Auftrag zu einem bereits vorhandenen Kunden an - der ebenfalls im „dStore“ existiert, aber eben unter einer anderen „PersonID“. Falls der Auftraggeber im „dStore“ keine oder eine vom „dStore“ generierte Kundennummer hat, wird die Eigenschaft zu diesem Merkmal auf die zurückgemeldete Kundennummer (→ „CustomerNo“) gesetzt.
Standardmäßig wird davon ausgegangen, daß die Lieferanschrift („Delivery_PersonID“) für den Auftrag die gleiche ist, wie der
Auftraggeber; man kann aber auch eine Kundennummer für die Lieferanschrift (→ „Delivery_CustomerNo“) zurückmelden.
Hinweis zur Kundennummer (Parameter „CustomerNo“ bzw. „Delivery_CustomerNo“) :
Die ID des Personenmerkmals für die Kundennummer wird über die Einstellung zum Personentyp („PersonTypeSetting“) zum Schlüssel „CustomerNoCharacteristicID“ konfiguriert. Gibt es zum Personentyp des Auftraggebers bzw. der Lieferanschrift keine Einstellung zu diesem Schlüssel, wird aus Abwärtskompatibilitäts-Gründen von der „PersonCharacteristicID = 1“ ausgegangen.
U.U. soll durch die Rückmeldung eines Auftrags irgendwelche Aktionen ausgelöst werden, die durch den „dStore“ standardmäßig nicht angeboten werden (Überprüfungen, Benachrichtigungen etc.). Zu diesem Zweck gibt es die Prozedur „_ac_AcknowledgeOrder“, die immer Installations-spezifisch ist (und entsprechend angepaßt werden muß, da sie, vom „dStore“ vorinstalliert, nichts tut). Möchte man, daß diese Prozedur am Ende der Ausführung von om_AcknowledgeOrders_Ad ausgeführt wird, ist „Fire_ac_AcknowledgeOrder“ auf „1“ zu setzen.
Anmerkung zum Parameter „OrderNo“:
Sind nicht alle Positionen des Auftrags in „tempdb.dbo.TwoIDs“ angegeben, wird die „OrderNo“ (falls angegeben) nur zu diesen Positionen gespeichert. Ist zum Auftrag bereits die „OrderNo“ hinterlegt, wird „OrderNo“ jedoch ignoriert; ist eine andere „OrderNo“ zum Auftrag gespeichert, gibt es allerdings den Fehler „-372“ ! Danach wird überprüft, ob zu einer der Positionen in „tempdb.dbo.TwoIDs“ bereits eine andere „OrderNo“ hinterlegt ist - in diesem Fall bricht die Prozedur ebenfalls mit dem Fehler „-372“ ab.
Dieses Verhalten (daß die „OrderNo“ nicht überschrieben werden darf) kann man aber über entsprechende Konfiguration in „Settings“ zum Schlüssel „AllowChangeOfOrderNo“ ändern.
Anmerkung zum Parameter „AddOrderInformation“ :
Möchte man irgendwelche zusätzlichen Informationen zum Auftrag (z.B. Paketnummer oder Fehlermeldung der Schnittstelle etc.) speichern, ist „1“ oder „2“ für „AddOrderInformation“ zu übergeben, und die Daten müssen dann in „tempdb.dbo.CharacteristicValues“ übergeben werden. In der Spalte „CharacteristicID“ wird dabei die „InformationTypeID“ und in „Value“ die Information selbst erwartet (um eine Informationen zu löschen, gibt man '' an).
Setzt man den Parameter-Wert für „AddOrderInformation“ auf „1“, werden die Informationen VOR den Status-Änderungen eingefügt, gibt man „2“ an, werden die Informationen NACH den Status-Änderungen gespeichert.
Hintergrund hierfür ist die Status-abhängige Überprüfung, ob Auftrags-Informationen nachträglich hinzugefügt bzw. geändert werden dürfen.
Hinweis : Werte ungleich „0“, „1“ oder „2“ für „AddOrderInformation“ führen zum Fehler „-500“ !
Anmerkung zum Parameter „AddOrderContentInformation“ :
Man kann auch zusätzliche Informationen zu den einzelnen Auftragspositionen speichern lassen. Dazu ist entweder …
oder
Setzt man den Parameter-Wert für „AddOrderContentInformation“ auf „1“ bzw. „3“, werden die Informationen VOR den Status-Änderungen eingefügt, gibt man „2“ bzw. „4“ an, werden die Informationen NACH den Status-Änderungen gespeichert. Hintergrund hierfür ist die Status-abhängige Überprüfung, ob Auftragpositions-Informationen nachträglich hinzugefügt bzw. geändert werden dürfen.
Hinweis : Werte ungleich „0“, „1“, „2“, „3“ oder „4“ für „AddOrderContentInformation“ führen zum Fehler „-500“ !
Hier die Definition der temporären Tabelle für den Fall „AddOrderContentInformation IN (1, 2)“ :
CREATE TABLE #ContentInformation ( Position smallint,
InformationTypeID smallint,
Information varchar(1000)
)
HTTP-Method | POST |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | order management |
Engine-Typ | Daten-Änderung |
Letzte Aktualisierung | 7.0.7 (2015-01-29) |
OrderID | ID eines Auftrags im „dStore“, zu der eine Rückmeldung erfolgen soll | integer | 3.5.8 | |
OrderNo | NULL | Optionale Angabe einer Auftragsnummer des Systems, in das der Auftrag „OrderID“ importiert wurde | varchar(50) | 3.5.8 |
CustomerNo | NULL | Optionale Angabe einer Kundennummer, die das System, in das der Auftrag „OrderID“ importiert wurde, für den Auftraggeber hinterlegt hat | varchar(100) | 3.5.8 |
Delivery_CustomerNo | NULL | Optionale Angabe einer Kundennummer, die das System, in das der Auftrag „OrderID“ importiert wurde, für die Lieferanschrift („DeliveryPersonID“ aus „Orders“) hinterlegt hat | varchar(100) | 3.5.10 |
Fire_ac_AcknowledgeOrder | 0 | Soll die Prozedur „_ac_AcknowledgeOrder“ aufgerufen werden ? In dieser Prozedur können kundenspezifische Aktionen ausgelöst werden, die nicht standardmäßig vom „dStore“ angeboten werden. | bit | 3.5.11 |
AddOrderInformation | 0 | „0“ : Es werden keine weiteren Informationen zum Auftrag „OrderID“ zurückgemeldet „1“, „2“ : Es wurden Informationen in „tempdb.dbo.CharacteristicValues“ übergeben (in „CharacteristicID“ steht eine „InformationTypeID“, in „Value“ die „Information“) | tinyint | 4.0.12 |
AddOrderContentInformation | 0 | „0“ : Es sollen keine weiteren Informationen zu Auftragspositionen gespeichert werden „1“, „2“, „3“, „4“ : Es wurden Daten zur Speicherung von Information zu Auftragspositionen übergeben (s. Beschreibung !) | tinyint | 4.0.12 |
Die Prozedur hat keine Rückgaben.
Die Prozedur hat keine Output-Parameter.
Code | Beschreibung | Quelle 1) |
---|---|---|
-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 |
-697 | Aktion kann nicht durchgeführt werden, da für ein Merkmal eine Zugriffsbeschränkung besteht | nur indirekt |
-676 | Zum Merkmal sind nur vordefinierte Werte erlaubt, aber der Wert existiert noch nicht | nur indirekt |
-675 | Die Eigenschaft kann nicht gelöscht werden, da sie zu einem Pflicht-Merkmal gehört | nur indirekt |
-642 | Inkrementelle Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werden | nur indirekt |
-641 | Die „Unique“-Eigenschaft mindestens eines Merkmals ist verletzt - Prozedur wurde abgebrochen | 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 | nur 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 |
-391 | Einige OrderInformation 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 |
-375 | Auftraggeber des Auftrags kann aufgrund von Guthaben-Verrechnung nicht geändert werden | nur indirekt |
-372 | Die OrderNo kann nicht mehr geändert werden | nur direkt |
-348 | Status-Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werden | nur indirekt |
-347 | Ungültige „OrderStateID“ (da für interne Zwecke reserviert) | nur indirekt |
-340 | Fehlende Berechtigung zum Ändern des Orderstatus | nur indirekt |
-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 indirekt |
-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 | Datentyp der „Information“-Spalte der temporären Input-Tabelle „#ContentInformation“ hat sich erweitert [notwendig wg. der „OrderContentInformation“-Erweiterung, s. Ticket #3653] ⇒ Doku-Anpassung |
7.0.4 | 2014-03-19 | Neue mögliche Werte für den Parameter „AddOrderContentInformation“ |
6.5.4 | 2013-04-29 | „StartProcedure“-Call u.A. wg. UTF-8 Unterstützung angepasst |
6.0.4 | 2011-10-21 | Implementierung des neuen „PersonTypeSettings“-Eintrags „IgnoreUnknownPositionsInAcknowledgeOrder“) |
6.0.3 | 2011-09-07 | „CharacteristicID“ für die Kundennummer über eine „PersonTypeSetting“ konfigurierbar gemacht [siehe #2590] ) |
5.5.2 | 2008-10-21 | 1. Implementierung des neuen „Settings“-Eintrags „AllowChangeOfOrderNo“ 2. Anpassung des Quellcodes an den aktuellen Standard |
5.0.0 | 2004-12-21 | 1. Fehler bzgl. Rückmeldung von „OrderContentInformation“ : eine bestehende Information konnte nicht überschrieben werden 2. Der Parameter „AddOrderInformations“ ist weggefallen |
4.0.12 | 2004-04-30 | 1. Aufruf von „_mi_StartProcedure“, „_mi_FinishProcedure“, „_mi_ChooseParamValueSeperator“ 2. „set transaction isolation level 1“, „set rowcount 0“ 3. Diverse interne Änderungen 4. Neue Parameter „AddOrderInformation“, „AddOrderContentInformation“ |
4.0.5 | 2003-10-04 | 1. Falls „-372“ zurückgegeben wurde, geschah dies in einer Transaktion ohne „rollback…„ 2. Falscher Index-Name bei „tempdb.dbo.TwoIDs“ 3. Wenn „OrderNo“ bereits zugewiesen war, gab es “-372“ - jetzt wird „OrderNo“ ignoriert |
4.0.3 | 2003-07-10 | 1. Berücksichtigung der neuen Tabelle „PersonMetaInformation“ 2. „-372“ fehlte in der Prozedur-Beschreibung unter „Returncodes“ |
4.0.2 | 2003-06-11 | 1. „LastEditedFromUserID“ der Tabelle „Orders“ wurde bisher nicht aktualisiert 2. Berücksichtigung der neuen „OrderNo“-Spalte von „OrderContent“ |
4.0.0 | 2003-04-03 | „PersonPropertiesHistory“ wird ab jetzt aktualisiert |
3.5.19 | 2002-06-17 | |
3.5.16 | 2002-04-25 | |
3.5.14 | 2002-01-23 | |
3.5.13 | 2001-12-06 | |
3.5.12 | 2001-10-17 | |
3.5.11 | 2001-09-06 | |
3.5.10 | 2001-07-14 | |
3.5.9 | 2001-06-16 | |
3.5.8 | 2001-05-19 | 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_AcknowledgeOrders_Ad?OrderID=<value>'
Mit xmllint 2) formatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/om_AcknowledgeOrders_Ad?OrderID=<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_AcknowledgeOrders_Ad', array( 'OrderID' => <value>, // 'OrderNo' => NULL, // 'CustomerNo' => NULL, // 'Delivery_CustomerNo' => NULL, // 'Fire_ac_AcknowledgeOrder' => 0, // 'AddOrderInformation' => 0, // 'AddOrderContentInformation' => 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_AcknowledgeOrders_Ad"> <Parameters> <Parameter Name="OrderID"><!-- integer value --></Parameter> <!-- <Parameter Name="OrderNo">NULL</Parameter> --> <!-- <Parameter Name="CustomerNo">NULL</Parameter> --> <!-- <Parameter Name="Delivery_CustomerNo">NULL</Parameter> --> <!-- <Parameter Name="Fire_ac_AcknowledgeOrder">0</Parameter> --> <!-- <Parameter Name="AddOrderInformation">0</Parameter> --> <!-- <Parameter Name="AddOrderContentInformation">0</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>