pixiSetOrderlinesInBoxToAUS
Bucht einen Auftrag aus, der allein in genau einer Box liegt: setzt die Auftragspositionen der Box auf Status AUS und leert die Box.
Führt das Ausbuchen (Scan-Out) eines in einer Box gesammelten Auftrags durch und leert die Box.
Ablauf:
- Ermittelt alle Boxen, die Auftragspositionen von
OrderNrenthalten (überboxitems), sowie alle Aufträge, die in diesen Boxen liegen. - Prüft, ob mindestens eine der Einstellungen
Premium_APIoderCentralized_Ship_Outaktiviert ist. Andernfalls wird ein Fehler zurückgegeben. - Prüft, ob der Auftrag in genau einer Box liegt. Wird keine Box gefunden oder ist der Auftrag auf mehrere Boxen verteilt, wird ein Fehler zurückgegeben.
- Prüft, ob die Box keinen weiteren Auftrag enthält. Ist das der Fall, wird ein Fehler zurückgegeben.
- Liest die Lieferadresse der Box (
boxes.SAddrRef) und prüft die Liefersperre. Geprüft werden das KundenkennzeichenCustomers.SLockedund das AdresskennzeichenAddresses.ASLocked. Steht eines davon aufY, wird ein Fehler zurückgegeben. - Sind alle Prüfungen bestanden, laufen drei interne Prozeduren:
GOSScanOutOrderlinemit StatusAUS. Sie setzt die Auftragspositionen der Box mit StatusEINaufAUS. Ebenso setzt sie Positionen derselben Rechnungen aufAUS, die den StatusMINoder einen in der EinstellungPutThisStatusesOnInvoicegenannten Status haben. Für diese Positionen setzt sieShipDate, aktualisiert den Auftragskopfstatus, schreibt die Auftragshistorie, löscht Reservierungen, aktualisiert Bundle-Positionen und schließt zugehörige Retourenpositionen und Retourenfälle.GOSDeleteAllItemsForBoxentfernt alleboxitemsder Box.GOSEmptyBoxsetzt die Box zurück: Kunde, Adressen und Auftrag werden auf 0 gesetzt,BoxEndDateauf das aktuelle Datum, und die Warte- und Sperrkennzeichen werden zurückgesetzt.
Der Aufruf liefert immer genau eine Zeile mit Status (SUCCESS oder ERROR) und Info. UserName wird als ändernder Mitarbeiter in den geänderten Datensätzen gespeichert.
Hinweise
- Die gesamte Verarbeitung läuft in der benannten Transaktion
OrderToAUS. Bei einem Fehler in der Hauptprozedur wird sie zurückgerollt. Die zurückgegebene Zeile enthält dannStatus=ERRORund den SQL-Fehlertext inInfo.Infowird auf 150 Zeichen gekürzt. - Die aufgerufenen
GOS…-Prozeduren fangen eigene Fehler ab und protokollieren sie überlog.InsertError, ohne sie weiterzureichen. Ein Fehler darin kann daher (vollständig oder bis zu einem Savepoint) zurückgerollt werden, während der Aufruf trotzdemSUCCESSmeldet. Im Zweifel die Daten prüfen. - Die Box- und Auftragszählungen stammen aus gruppierten Abfragen. Verwendet wird der Wert der zuletzt verarbeiteten Gruppe. In gemischten Fällen (z. B. mehrere Boxen mit mehreren Aufträgen) kann die konkret zurückgegebene Fehlermeldung variieren. Abgelehnt wird der Aufruf dennoch, solange der Auftrag nicht allein in einer einzigen Box liegt.
- Lesezugriffe verwenden
NOLOCK. Updates in den Unterprozeduren verwendenROWLOCK.GOSScanOutOrderlineunterdrückt den Update-Trigger aufOrderlinesüberCONTEXT_INFOund schreibtOrderHistoryselbst. - Auch bei Prüfungsfehlern wird ein Commit ausgeführt; zu diesem Zeitpunkt wurde jedoch nichts geschrieben.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
OrderNr
Pflicht
|
int | – |
Nummer des Auftrags, dessen Box ausgebucht und geleert werden soll. Beispiel: |
UserName
|
varchar(50) string |
API |
Benutzername, der als ändernder Mitarbeiter in Auftragspositionen, Historie und Retourenfällen gespeichert wird. Beispiel: |
Antwort
Result-Set 1 · Immer
Eine Statuszeile mit dem Ergebnis des Aufrufs.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(50) string |
|
Info
Kann leer sein |
varchar(150) string |
Erfolgsmeldung oder Fehlertext.e |
Beispielantwort
<SqlRowSet1>
<row>
<Status>SUCCESS</Status>
<Info>Box: 17 was emptied. Order: 104523 was set to status AUS.</Info>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | Setting "Centralized_Ship_Out" or "Premium_API" is not enabled. | Weder die Einstellung `Centralized_Ship_Out` noch `Premium_API` ist aktiviert. Eine davon aktivieren. |
| ERROR | No box exists for order: {OrderNr} | Keine Auftragsposition des Auftrags liegt in einer Box. |
| ERROR | More than 1 box found for order: {OrderNr} | Der Auftrag ist auf mehrere Boxen verteilt. Zuerst in einer Box zusammenführen. |
| ERROR | There is more than 1 order in the box: {BoxNr} | Die Box enthält auch Auftragspositionen anderer Aufträge. |
| ERROR | Customer has SHIPPING LOCK flag set! | Der Kunde der Lieferadresse der Box hat `SLocked` = `Y`. Zuerst die Liefersperre aufheben. |
| ERROR | Order has SHIPPING LOCK flag set! | Die Lieferadresse der Box hat `ASLocked` = `Y`. Zuerst die Liefersperre aufheben. |
| ERROR | {ERROR_MESSAGE()} | In der Hauptprozedur ist ein SQL-Fehler aufgetreten. Die Transaktion wurde zurückgerollt. |
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:pixiSetOrderlinesInBoxToAUS>
<OrderNr>104523</OrderNr>
<!-- <UserName>WarehouseApp</UserName> -->
</ns1:pixiSetOrderlinesInBoxToAUS>
</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:pixiSetOrderlinesInBoxToAUS>
<OrderNr>104523</OrderNr>
<!-- <UserName>WarehouseApp</UserName> -->
</ns1:pixiSetOrderlinesInBoxToAUS>
</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',
// 'UserName' => 'WarehouseApp',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiSetOrderlinesInBoxToAUS', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiSetOrderlinesInBoxToAUS