pixiSetOrderlineLocation
Setzt das Lager (LocID) einer Auftragsposition oder einer Bundle-Position samt zugehöriger Bundle-Positionen um.
Ändert das Lager (LocationID und LastOrdLocationID) von Auftragspositionen. Der Aufruf übergibt an die interne Prozedur Pixi_UpdateOrderLocation mit dem Benutzernamen API und liefert eine Statuszeile.
Welche Datensätze geändert werden
- Nur
OrderlineKeyangegeben: Die Auftragsposition selbst wird umgesetzt. Gehört sie zu einem Bundle, werden auch alle weiteren Positionen desselben Bundles und die Bundle-Position (BundleOrderlines) umgesetzt. - Nur
BundleOrderlineKeyangegeben: Alle Komponentenpositionen des Bundles und die Bundle-Position selbst werden umgesetzt. Die Komponentenpositionen werden nur umgesetzt, wenn die Bundle-Position einen zulässigen Status hat. - Kein Schlüssel angegeben: Der Aufruf schlägt fehl, da kein Auftrag ermittelt werden kann.
Nur Positionen mit zulässigem Status werden aktualisiert. Zulässig sind alle nicht finalen Status aus OrderStates (FinalState = 'N') außer EIN, FUT und FUS. Positionen mit anderem Status werden ohne Meldung übergangen; der Aufruf liefert trotzdem OK.
Prüfungen
Die interne Prozedur prüft Folgendes und lehnt den Aufruf ab, wenn eine Prüfung fehlschlägt:
- Die Auftragsposition bzw. Bundle-Position existiert.
LocationIdexistiert inLocation.- Mindestens eine Position des Auftrags hat den Status
NEW,ANG,HAL,MIN,BES,STOoderNLB. - Keine der betroffenen Auftragspositionen liegt auf einer Pickliste (
PLitem).
POS-/Reservierungslager
Hat das Ziellager eine ResLocID, wird ResOnLocDate im Auftragskopf auf NULL gesetzt. Danach betrachtet die Prozedur andere Aufträge, die zulässige Positionen mit denselben Artikeln auf diesem Lager haben. Liegt das späteste ResOnLocDate dieser Aufträge vor dem frühesten Reservierungsdatum dieses Auftrags, erhalten alle Reservierungen dieses Auftrags dieses späteste ResOnLocDate plus eine Sekunde als neues ResDate.
Ergebnis
Bei Erfolg liefert der Aufruf ReturnCode = 'OK'. Andernfalls liefert er ReturnCode = 'ERROR' mit der allgemeinen Meldung Ilegal parameters.
Hinweise
-
Alle Fehlerursachen der internen Prozedur münden in die eine Meldung
Ilegal parameters. Die genauen Gründe werden nur perPRINTausgegeben, z. B.ERROR: Wrong LocationID: ...oder... must not be on Picklist. Ob ein SOAP-Client diese Texte erhält, ist aus dem Code nicht ersichtlich. -
UpdateEmpwird aufAPIundUpdateDateauf die aktuelle Zeit gesetzt, und zwar bei allen aktualisierten Zeilen. -
Die interne Prozedur läuft in einer eigenen Transaktion oder nutzt einen Savepoint, falls bereits eine Transaktion offen ist. Bei einem Laufzeitfehler erfolgt ein Rollback, der Fehler wird über
log.InsertErrorprotokolliert und der Aufruf liefertERROR. -
Während des Updates von
BundleOrderlineswirdCONTEXT_INFOvorübergehend auf0x30000gesetzt. Laut Code-Kommentar wird damit eine Neuberechnung der Bundles vermieden; die auswertenden Trigger liegen nicht vor. -
Prüfungen lesen mit
NOLOCK; Updates verwendenROWLOCK. -
Die gleichzeitige Angabe von
OrderlineKeyundBundleOrderlineKeyist nicht zu empfehlen:- Der Bundle-Schlüssel bestimmt den Auftrag.
- Die Bundle-Position selbst wird nicht aktualisiert.
- Dieselben Positionen können doppelt erfasst werden, sodass der eindeutige Index auf der internen Temp-Tabelle fehlschlägt und der Aufruf
ERRORliefert.
Es sollte nur einer der beiden Schlüssel übergeben werden.
-
Die Statusprüfung (
NEW,ANG,HAL, ...) verlangt nur eine Position des gesamten Auftrags in einem solchen Status, nicht zwingend die Zielposition.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
OrderlineKey
|
int | NULL |
Schlüssel der umzusetzenden Auftragsposition. Gehört sie zu einem Bundle, werden auch die übrigen Bundle-Positionen und die Bundle-Position umgesetzt. Dieser Schlüssel oder Beispiel: |
BundleOrderlineKey
|
int | NULL |
Schlüssel der Bundle-Position ( Beispiel: |
LocationId
Pflicht
|
char(3) string |
– |
Ziellager ( Beispiel: |
Antwort
Result-Set 1 · Immer
Statuszeile des Aufrufs.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(5) string |
|
ErrorMessage
|
varchar(17) string |
Leer bei Erfolg, sonst |
Beispielantwort
<SqlRowSet1>
<row>
<ReturnCode>OK</ReturnCode>
<ErrorMessage/>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | Ilegal parameters | Weder `OrderlineKey` noch `BundleOrderlineKey` wurde übergeben, oder die angegebene Auftragsposition bzw. Bundle-Position existiert nicht. |
| ERROR | Ilegal parameters | `LocationId` existiert nicht in Tabelle `Location`. Eine gültige `LocID` übergeben. |
| ERROR | Ilegal parameters | Keine Position des Auftrags hat den Status `NEW`, `ANG`, `HAL`, `MIN`, `BES`, `STO` oder `NLB`. |
| ERROR | Ilegal parameters | Eine der betroffenen Auftragspositionen liegt bereits auf einer Pickliste (`PLitem`). |
| ERROR | Ilegal parameters | Beim Update ist ein Laufzeitfehler aufgetreten, z. B. doppelte Positionen bei Angabe beider Schlüssel. Die Transaktion wird zurückgerollt und der Fehler protokolliert. |
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:pixiSetOrderlineLocation>
<!-- <OrderlineKey>123456</OrderlineKey> -->
<!-- <BundleOrderlineKey>4711</BundleOrderlineKey> -->
<LocationId>001</LocationId>
</ns1:pixiSetOrderlineLocation>
</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:pixiSetOrderlineLocation>
<!-- <OrderlineKey>123456</OrderlineKey> -->
<!-- <BundleOrderlineKey>4711</BundleOrderlineKey> -->
<LocationId>001</LocationId>
</ns1:pixiSetOrderlineLocation>
</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 = [
// 'OrderlineKey' => '123456',
// 'BundleOrderlineKey' => '4711',
'LocationId' => '001',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiSetOrderlineLocation', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiSetOrderlineLocation