pixiSetOrderShippingLock
Setzt oder entfernt die Versandsperre eines Auftrags über dessen Lieferadresse und schreibt einen Eintrag in die Versandsperren-Historie.
Setzt die Versandsperre (ASlocked) an der Lieferadresse eines Auftrags.
Locked=NULLwird als1behandelt; ein leerer oderNULL-UserNamewird zuAPI.- Die Referenz auf die Lieferadresse (
ShipAdrRef) wird ausOrderHeaderzumOrderNrgelesen. Existiert der Auftrag nicht oder istShipAdrRefNULL, wird eineERROR-Zeile geliefert. - Der referenzierte Datensatz in
Addresseswird nur ausgewählt, wenn erAddrType = 'S'hat und sein aktuellerASlocked-Wert vom Zielwert abweicht (Yfür Sperren,Nfür Entsperren). Wird keine solche Adresse gefunden, wird eineINFO-Zeile geliefert und nichts geändert. - Ist
Reasonleer oderNULL, wird der TextOrder was locked by {UserName}bzw.Order was unlocked by {UserName}verwendet. - Ein Datensatz wird in
pixi.AddressesShippingLockHistoryeingefügt. Er enthält die Benutzer-ID, den Adressschlüssel, das Sperrkennzeichen und den Grund. Die Benutzer-ID wird ausUserNameüberinf.UserGetByNameermittelt, bei unbekanntem Namen wird der BenutzerpixiAdministrationverwendet. - Die Adresse wird aktualisiert:
ASlockedwird aufY/Ngesetzt.UpdateDatewird auf die aktuelle Zeit gesetzt.UpdateEmpwird auf den Benutzernamen gesetzt. Der StandardwertAPIwird alsAPI SetOrderShippingLockgeschrieben.
- Eine
OK-Zeile wird geliefert.
Hinweise
- Die Sperre wird an dem Adressdatensatz gespeichert, auf den
ShipAdrRefdes Auftrags verweist, nicht am Auftragskopf selbst. - Die
INFO-Zeile (already set to …) wird auch geliefert, wenn die referenzierte Adresse nicht existiert oder nichtAddrType = 'S'hat. In diesem Fall kann die Meldung irreführend sein. OrderHeaderwird mitNOLOCKgelesen; die Adresse wird mitUPDLOCKausgewählt.- Es wird keine explizite Transaktion verwendet. Das Einfügen in die Historie und die Aktualisierung der Adresse sind getrennte Anweisungen und werden nicht gemeinsam zurückgerollt.
- Während der Aktualisierung wird
CONTEXT_INFOvorübergehend auf0x33999gesetzt und danach wiederhergestellt. Dies wird vermutlich von Triggern aufAddressesausgewertet, die nicht beigefügt sind. - Statuszeilen verwenden immer die Spalte
ErrorMessage, auch imOK-Fall.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
OrderNr
Pflicht
|
int | – |
Nummer des Auftrags, dessen Versandsperre geändert wird. Beispiel: |
Locked
|
bit boolean |
1 |
Zielzustand der Versandsperre. Erlaubte Werte
Beispiel: |
UserName
|
varchar(50) string |
API |
Name des ändernden Benutzers. Leer oder Beispiel: |
Reason
|
varchar(255) string |
– |
Grund, der als Beispiel: |
Antwort
Result-Set 1 · Wenn kein Auftrag mit OrderNr existiert (oder er keine Lieferadressreferenz hat)
Fehler-Statuszeile.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(5) string |
Immer |
ErrorMessage
Kann leer sein |
varchar(48) string |
Fehlertext mit der Auftragsnummer. |
Result-Set 2 · Wenn die Lieferadresse bereits den Zielzustand hat, nicht existiert oder nicht vom Typ S ist
Informations-Statuszeile; es wird nichts geändert.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(4) string |
Immer |
ErrorMessage
Kann leer sein |
varchar(70) string |
Text, dass der Auftrag bereits auf |
Result-Set 3 · Bei Erfolg
Erfolgs-Statuszeile, nachdem der Historieneintrag geschrieben und die Adresse aktualisiert wurde.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(2) string |
Immer |
ErrorMessage
Kann leer sein |
varchar(50) string |
Bestätigungstext mit der Auftragsnummer. |
Beispielantwort
<SqlRowSet1>
<row>
<ReturnCode>OK</ReturnCode>
<ErrorMessage>Order with OrderNr 104523 changed. </ErrorMessage>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | No Order found with OrderNR {OrderNr} | Zum angegebenen `OrderNr` existiert kein Auftrag in `OrderHeader` oder dessen `ShipAdrRef` ist `NULL`. Eine gültige Auftragsnummer übergeben. |
| INFO | Order with OrderNr {OrderNr} is already set to {Y|N}. | Die Lieferadresse hat bereits den gewünschten Sperrzustand. Dieselbe Zeile wird geliefert, wenn die referenzierte Adresse nicht existiert oder nicht vom Typ `S` ist. Es wird nichts geändert. |
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:pixiSetOrderShippingLock>
<OrderNr>104523</OrderNr>
<!-- <Locked>1</Locked> -->
<!-- <UserName>shopsync</UserName> -->
<!-- <Reason>Payment not yet received</Reason> -->
</ns1:pixiSetOrderShippingLock>
</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:pixiSetOrderShippingLock>
<OrderNr>104523</OrderNr>
<!-- <Locked>1</Locked> -->
<!-- <UserName>shopsync</UserName> -->
<!-- <Reason>Payment not yet received</Reason> -->
</ns1:pixiSetOrderShippingLock>
</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' => '104523',
// 'Locked' => '1',
// 'UserName' => 'shopsync',
// 'Reason' => 'Payment not yet received',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiSetOrderShippingLock', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiSetOrderShippingLock