pixiUpdateOrder
Aktualisiert Versandkosten, Versanddatum, Shop-Notiz, Gutschein, Adressbemerkung und Zahlungsart eines bestehenden offenen Auftrags.
Aktualisiert ausgewählte Kopfdaten eines bestehenden Auftrags. Der Auftrag wird über OrderNr oder OrderNrExternal gefunden.
Prüfungen (jede liefert eine Error-Zeile und bricht ab):
- Mindestens
OrderNroderOrderNrExternalmuss angegeben sein. - Der Auftrag wird mit
OrderNr = @OrderNr OR OrderNrExternal = @OrderNrExternalgesucht (erster Treffer). Wird keiner gefunden, kommt ein Fehler. VoucherIDundVoucherAmountmüssen gemeinsam angegeben werden.- Der Gutschein darf nicht bereits auf Auftragspositionen eines anderen Auftrags verwendet sein.
- Ist
PaymentTypeangegeben, muss der Wert alsCodein der TabellePaymentsexistieren. - Der Auftrag muss noch änderbar sein: Der aus den Auftragspositionen berechnete Gesamtstatus muss
OPENoderHOLDsein. Zusätzlich muss die Anzahl nicht finaler Positionen mit Rechnungspositionen kleiner sein als die Anzahl der Positionen, die weder final sind noch den StatusMINoderFUShaben.
Aktualisierung:
- Nicht übergebene Parameter behalten die aktuellen Werte des Auftrags.
ShipCostswird beiB2B-Aufträgen auf die Netto-Versandkosten angewendet, beiB2C-Aufträgen auf die Brutto-Versandkosten.ShipDateersetzt das Versanddatum. Der Wert1900-01-01setzt es aufNULL.ShopNoteundAddressRemarksersetzen die gespeicherten Texte.- Alle übrigen Kopffelder werden unverändert durchgereicht, z. B. Geschenktext, Versandanweisung, Versanddienstleister, CCP-Merchant,
ccpPayID, Verfahren/Product/Extras und Auftragstyp. - Die eigentliche Aktualisierung erfolgt über die interne Prozedur
Pixi_UpdateOrder. Sie setztUpdateDateauf die aktuelle Zeit. - Ändern sich die Versandkosten und gilt weder Gutschein noch Rabatt, wird auch
ShipCostder Auftragspositionen angepasst. - Ein angegebener Gutschein wird in
Voucherangelegt, falls er noch nicht existiert. Andernfalls wird sein Betrag aktualisiert. Die Gutschein-ID wird danach auf alle Auftragspositionen geschrieben. - Ist
PaymentTypeangegeben, wird der Wert inAPaymentder Adresse des Auftrags (AddrRef) geschrieben.
Bei Erfolg wird eine Success-Zeile geliefert.
Hinweise
VoucherAmountwird überNULLIF(@VoucherAmount, '')geprüft. Da''beimoneyzu0konvertiert wird, gilt ein Betrag von0als nicht angegeben.VoucherIDmit Betrag0liefert daherVoucherID provided without VoucherAmount.- Eine leere
VoucherIDgilt als nicht angegeben. - Sind
OrderNrundOrderNrExternalangegeben und passen sie zu verschiedenen Aufträgen, wird ein beliebiger davon aktualisiert (TOP (1)ohneORDER BY). - Bei der Meldung does not exist wird der Text per Verkettung gebildet. Ist einer der beiden Bezeichner
NULL, ist die SpalteMessageNULL. Pixi_UpdateOrderläuft in einer eigenen Transaktion und fängt Fehler selbst ab. Sie protokolliert sie überlog.InsertErrorund wirft sie nicht erneut, sodass die äußere Fehlerbehandlung sie ggf. nicht sieht. EineSuccess-Zeile ist daher auch möglich, wenn die innere Aktualisierung zurückgerollt wurde.log.InsertErrorliegt nicht vor.- Die Aktualisierung der Zahlungsart in
Addresseserfolgt nach der inneren Transaktion und außerhalb davon. - Hat der Auftrag keinen CCP-Merchant, kann die innere Prozedur anhand der Einstellung
DefaultCCPMerchanteinen setzen. - Ist
ccpPayIDbei einem offenen AuftragNULL, wird ein Leerstring gespeichert. ShopNoteist alsvarchar(max)deklariert. Zeichen außerhalb der Codepage der Datenbank gehen verloren, obwohl die Zielspaltenvarcharist.- Lesezugriffe im Prüfteil nutzen
NOLOCK; die innere Prozedur setztUPDLOCKaufOrderHeaderundOrderlines.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
OrderNr
|
int | NULL |
Pixi-Auftragsnummer. Entweder diese oder Beispiel: |
OrderNrExternal
|
varchar(50) string |
NULL |
Externe Auftragsnummer (Shop). Wird verwendet, wenn Beispiel: |
ShipCosts
|
money decimal |
NULL |
Neue Versandkosten (netto bei Beispiel: |
ShipDate
|
datetime dateTime |
NULL |
Neues Versanddatum. Ohne Angabe bleibt der aktuelle Wert; Beispiel: |
ShopNote
|
varchar(max) string |
NULL |
Notiz des Shops zum Auftrag (Shop-Kommentar). Ohne Angabe bleibt die aktuelle Notiz. Beispiel: |
VoucherID
|
varchar(50) string |
NULL |
Gutschein-ID. Muss zusammen mit Beispiel: |
VoucherAmount
|
money decimal |
NULL |
Durch den Gutschein abgedeckter Betrag. Erfordert Beispiel: |
PaymentType
|
varchar(1) string |
NULL |
Zahlungsart-Code; muss in Beispiel: |
AddressRemarks
|
varchar(255) string |
NULL |
Neue Adressbemerkung des Auftrags. Ohne Angabe bleibt der aktuelle Wert. Beispiel: |
Antwort
Result-Set 1 · Immer (eine Zeile, Erfolg oder Fehler)
Statuszeile mit dem Ergebnis des Aufrufs.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(7) string |
|
Message
Kann leer sein |
varchar(max) string |
Ergebnis- oder Fehlertext. |
Beispielantwort
<SqlRowSet1>
<row>
<Status>Success</Status>
<Message>Order with OrderNr: 100234 was updated.</Message>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | Parameter OrderNr/OrderNrExternal is mandatory parameter and needs to be provided. | Weder `OrderNr` noch ein nicht leeres `OrderNrExternal` wurde übergeben. |
| Error | Order with OrderNr: {OrderNr} ({OrderNrExternal}) does not exist. | Kein Auftrag passt zur angegebenen Nummer. Ist ein Bezeichner NULL, ist die Meldung selbst NULL. |
| Error | VoucherAmount provided without VoucherID. | `VoucherAmount` wurde angegeben, `VoucherID` fehlt oder ist leer. |
| Error | VoucherID provided without VoucherAmount. | `VoucherID` wurde ohne `VoucherAmount` (oder mit Betrag 0) angegeben. |
| Error | Voucher {VoucherID} already used in other orderlines. | Der Gutschein ist bereits Auftragspositionen eines anderen Auftrags zugeordnet. |
| Error | Payment type {PaymentType} does not exist. | Der angegebene Zahlungsart-Code existiert nicht in `Payments`. |
| Error | Order with OrderNr: {OrderNr} ({OrderNrExternal}) can not be updated anymore. | Der Auftrag ist nicht `OPEN`/`HOLD`, oder alle verbleibenden offenen Positionen sind bereits berechnet. |
| Error | Unexpected error: {ERROR_MESSAGE} | Bei der Aktualisierung ist ein unerwarteter SQL-Fehler aufgetreten. |
Beispiele
POST https://apigateway.descartes.com/tms/pixi/
Content-Type: text/xml; charset=utf-8
Authorization: Basic BASE64(USERNAME:PASSWORD)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiUpdateOrder>
<!-- <OrderNr>100234</OrderNr> -->
<!-- <OrderNrExternal>SHOP-2024-001234</OrderNrExternal> -->
<!-- <ShipCosts>4.95</ShipCosts> -->
<!-- <ShipDate>2024-05-20T00:00:00</ShipDate> -->
<!-- <ShopNote>Bitte vor 12 Uhr liefern</ShopNote> -->
<!-- <VoucherID>SUMMER10</VoucherID> -->
<!-- <VoucherAmount>10.00</VoucherAmount> -->
<!-- <PaymentType>V</PaymentType> -->
<!-- <AddressRemarks>Hinterhaus, 2. OG</AddressRemarks> -->
</ns1:pixiUpdateOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
curl -X POST 'https://apigateway.descartes.com/tms/pixi/' \
--user 'USERNAME:PASSWORD' \
--header 'Content-Type: text/xml; charset=utf-8' \
--data-binary @- <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
<SOAP-ENV:Body>
<ns1:pixiUpdateOrder>
<!-- <OrderNr>100234</OrderNr> -->
<!-- <OrderNrExternal>SHOP-2024-001234</OrderNrExternal> -->
<!-- <ShipCosts>4.95</ShipCosts> -->
<!-- <ShipDate>2024-05-20T00:00:00</ShipDate> -->
<!-- <ShopNote>Bitte vor 12 Uhr liefern</ShopNote> -->
<!-- <VoucherID>SUMMER10</VoucherID> -->
<!-- <VoucherAmount>10.00</VoucherAmount> -->
<!-- <PaymentType>V</PaymentType> -->
<!-- <AddressRemarks>Hinterhaus, 2. OG</AddressRemarks> -->
</ns1:pixiUpdateOrder>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML
<?php
$soapClient = new SoapClient(null, [
'login' => 'USERNAME',
'password' => 'PASSWORD',
'location' => 'https://apigateway.descartes.com/tms/pixi/',
'uri' => 'https://apigateway.descartes.com/tms/pixi/',
]);
$arguments = [
// 'OrderNr' => '100234',
// 'OrderNrExternal' => 'SHOP-2024-001234',
// 'ShipCosts' => '4.95',
// 'ShipDate' => '2024-05-20T00:00:00',
// 'ShopNote' => 'Bitte vor 12 Uhr liefern',
// 'VoucherID' => 'SUMMER10',
// 'VoucherAmount' => '10.00',
// 'PaymentType' => 'V',
// 'AddressRemarks' => 'Hinterhaus, 2. OG',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiUpdateOrder', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiUpdateOrder