Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:om_acknowledgeorders_ad

om_AcknowledgeOrders_Ad

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“ :

  • ID1 : Auftrags-Position (entspricht „Position“ in der Tabelle „OrderContent“)
  • ID2 : OrderStateID

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 …

  • „1“ oder „2“ für „AddOrderContentInformation“ zu übergeben und vor dem Aufruf eine temporäre Tabelle zu erstellen (Definition s.u.), die mit den entsprechenden Daten zu füllen ist

oder

  • „3“ oder „4“ für „AddOrderContentInformation“ zu übergeben und vorher die Daten via „if_om_AcknOrders_OContInfo_Ad“ zu übergeben.

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

Parameter

OrderID ID eines Auftrags im „dStore“, zu der eine Rückmeldung erfolgen soll
integer3.5.8
OrderNoNULL Optionale Angabe einer Auftragsnummer des Systems, in das der Auftrag „OrderID“ importiert wurde
varchar(50)3.5.8
CustomerNoNULL 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_CustomerNoNULL 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_AcknowledgeOrder0 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.
bit3.5.11
AddOrderInformation0 „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“)
tinyint4.0.12
AddOrderContentInformation0 „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 !)
tinyint4.0.12

Rückgabe

Die Prozedur hat keine Rückgaben.

Output-Parameter

Die Prozedur hat keine Output-Parameter.

Mögliche Return-Codes

Code Beschreibung Quelle 1)
-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
-697Aktion kann nicht durchgeführt werden, da für ein Merkmal eine Zugriffsbeschränkung bestehtnur indirekt
-676Zum Merkmal sind nur vordefinierte Werte erlaubt, aber der Wert existiert noch nichtnur indirekt
-675Die Eigenschaft kann nicht gelöscht werden, da sie zu einem Pflicht-Merkmal gehörtnur indirekt
-642Inkrementelle Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werdennur indirekt
-641Die „Unique“-Eigenschaft mindestens eines Merkmals ist verletzt - Prozedur wurde abgebrochennur 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 abgebrochennur 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
-391Einige OrderInformation sind ungültignur indirekt
-390Einige OrderContentInformation sind ungültignur indirekt
-385Die Brutto-Summe aus Warenwert plus Surcharges unterschreitet den vorgegebenen Mindestwertnur indirekt
-375Auftraggeber des Auftrags kann aufgrund von Guthaben-Verrechnung nicht geändert werdennur indirekt
-372Die OrderNo kann nicht mehr geändert werdennur direkt
-348Status-Änderung konnte aufgrund paralleler Änderungen nicht durchgeführt werdennur indirekt
-347Ungültige „OrderStateID“ (da für interne Zwecke reserviert)nur indirekt
-340Fehlende Berechtigung zum Ändern des Orderstatusnur indirekt
-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 indirekt
-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-26Datentyp 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-19Neue 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-21Implementierung 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-211. Implementierung des neuen „Settings“-Eintrags „AllowChangeOfOrderNo“
2. Anpassung des Quellcodes an den aktuellen Standard
5.0.0 2004-12-211. Fehler bzgl. Rückmeldung von „OrderContentInformation“ : eine bestehende Information konnte nicht überschrieben werden
2. Der Parameter „AddOrderInformations“ ist weggefallen
4.0.12 2004-04-301. 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-041. 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-101. Berücksichtigung der neuen Tabelle „PersonMetaInformation“
2. „-372“ fehlte in der Prozedur-Beschreibung unter „Returncodes“
4.0.2 2003-06-111. „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-19Erstmalig 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_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 -
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_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();
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_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>
1)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
2)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/om_acknowledgeorders_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)