pixiUpdateSupplierOrder
Aktualisiert Status, Notiz für den Lieferanten, externe Bestellnummer und voraussichtliches Lieferdatum einer Lieferantenbestellung anhand ihrer internen Nummer.
Ändert eine Lieferantenbestellung (Bestellung beim Lieferanten), die über SupplierOrderNR (die InternalNumber der Bestellung) identifiziert wird.
Ablauf
- Leere Zeichenketten in
StatusundSupplierOrderNRExtdrnalsowie eine leereNotegelten alsNULL(nicht übergeben). UserNamemuss als Pixi-Benutzer existieren; andernfalls wird eineERROR-Zeile geliefert und ein SQL-Fehler ausgelöst.- Bestellung und aktueller Status werden gelesen. Wird
Statusnicht übergeben, gilt der aktuelle Statuscode der Bestellung. - Prüfungen (bei einem Fehler wird eine
ERROR-Zeile geliefert, es wird nichts geändert):- die Bestellung muss existieren;
StatusmussNEW,BES,CONoderCLSsein;- eine abgeschlossene Bestellung (
CLS) akzeptiert kein neuesEstimatedDeliveryDateund keine neueSupplierOrderNRExtdrnal; - eine bestätigte Bestellung (
CON) akzeptiert keine neueSupplierOrderNRExtdrnal; - kein Rückwärtswechsel von
CLSnachNEW/BES/CONund vonCONnachNEW(CON→BESist erlaubt); - kein Überspringen:
NEWkann nicht direkt nachCONoderCLS,BESnicht direkt nachCLSwechseln.
- Der Bestellkopf wird aktualisiert:
- der Status wird gesetzt (
NEW=1,BES=2,CON=3,CLS=4); - bei
BESwerden Bestelldatum und bestellender Benutzer auf jetzt bzw. den aufrufenden Benutzer gesetzt, beiCONBestätigungsdatum und bestätigender Benutzer; - externe Nummer, Notiz für den Lieferanten und voraussichtliches Lieferdatum werden nur überschrieben, wenn ein Wert übergeben wird;
- Änderungsbenutzer und -zeitpunkt werden gesetzt.
- der Status wird gesetzt (
- Wird
EstimatedDeliveryDateübergeben, wird es zusätzlich in alle Positionen der Lieferantenbestellung geschrieben. - Hat sich der Status tatsächlich geändert, wird das Ereignis
SupplierOrderStatusChangedmit der internen Bestell-Idveröffentlicht. - Eine Zeile mit
ReturnCode=Okwird geliefert und die Transaktion festgeschrieben.
Hinweise
- Stolperfalle – Datumswerte werden zurückgesetzt: Da ein nicht übergebener
Statusauf den aktuellen Status zurückfällt, setzt jeder Aufruf bei einer Bestellung im StatusBESOrderDate/OrderedByUserIderneut auf jetzt bzw. den aufrufenden Benutzer; bei StatusCONgilt dasselbe fürConfirmationDate/ConfirmedByUserId. Das gilt auch, wenn nur Notiz oder Lieferdatum geändert werden. - Felder können nicht geleert werden: ein leerer oder fehlender Wert behält den gespeicherten Wert. Ein
EstimatedDeliveryDatevon1900-01-01gilt als nicht übergeben. - Die Notiz wird auch bei abgeschlossenen Bestellungen akzeptiert; gesperrt sind nur Lieferdatum und externe Nummer.
- Laut Code-Kommentar kann
NEWnicht erneut gesetzt werden, der Code sperrtNEWjedoch nur ausCON/CLS; ein WechselBES→NEWwird akzeptiert. SupplierOrderNRExtdrnalist durch den Parametertyp auf 25 Zeichen begrenzt. Die Notiz wird in einer Nicht-Unicode-Spalte gespeichert; Zeichen außerhalb der Codepage der Datenbank können verloren gehen.- Die Status-IDs 1–4 sind in der Prozedur fest hinterlegt.
- Wegen der Operatorrangfolge in der Prüfung kann eine Fehlermeldung zum Rückwärts-/Überspringen-Wechsel eine frühere Prüfmeldung überschreiben; der Aufruf schlägt in beiden Fällen fehl.
- Läuft in einer eigenen Transaktion (bzw. einem Savepoint bei äußerer Transaktion). Fehler werden abgefangen, zurückgerollt und ins Fehlerprotokoll geschrieben; außer bei der Benutzerprüfung wird kein SQL-Fehler ausgelöst, nur die
ERROR-Zeile geliefert. Innerhalb einer äußeren Transaktion wird keineOk-Zeile geliefert und nicht festgeschrieben. - Das erste Lesen der Bestellung erfolgt mit
NOLOCK. - Das Ereignis zur Statusänderung wird über
Pixi_MQ_EventPublishveröffentlicht; ob tatsächlich eine Nachricht versendet wird, hängt von der EinstellungpixiMQ_Enabledund der Ereigniskonfiguration ab.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
SupplierOrderNR
Pflicht
|
int | – |
Interne Nummer ( Beispiel: |
Status
|
varchar(3) string |
NULL |
Neuer Statuscode. Fehlt der Wert oder ist er leer, bleibt der aktuelle Status erhalten (und wird erneut angewendet). Erlaubte Werte
Beispiel: |
Note
|
text string |
NULL |
Notiz für den Lieferanten ( Beispiel: |
EstimatedDeliveryDate
|
datetime dateTime |
NULL |
Voraussichtliches Lieferdatum; wird in den Bestellkopf und alle Positionen geschrieben. Bei abgeschlossenen Bestellungen nicht erlaubt. Beispiel: |
SupplierOrderNRExtdrnal
|
varchar(25) string |
NULL |
Externe Bestellnummer des Lieferanten ( Beispiel: |
UserName
|
varchar(50) string |
API |
Pixi-Benutzername, der als ändernder (und bestellender/bestätigender) Benutzer gespeichert wird. Muss existieren. Beispiel: |
Antwort
Result-Set 1 · Immer eine Zeile: Ok bei Erfolg (außerhalb einer äußeren Transaktion), ERROR bei jedem Fehler.
Statuszeile der Aktualisierung.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(5) string |
|
ErrorMessage
Kann leer sein |
nvarchar(4000) string |
Erfolgstext oder Fehlermeldung. |
Beispielantwort
<SqlRowSet1>
<row>
<ReturnCode>Ok</ReturnCode>
<ErrorMessage>Supplier Order with SupplierOrderNR 10234 updated.</ErrorMessage>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | User for create employee does not exist. | `UserName` existiert in Pixi nicht. Wird zusätzlich als SQL-Fehler (Schweregrad 16) ausgelöst. Einen existierenden Benutzernamen übergeben. |
| ERROR | Supplierorder with SupplierOrderNR {SupplierOrderNR} does not exist. | Es existiert keine Lieferantenbestellung mit dieser internen Nummer. |
| ERROR | Status can only be NEW, BES, CON or CLS | `Status` enthält einen nicht unterstützten Code. |
| ERROR | Status of Order is CLS, no more changes possible. | Die Bestellung ist abgeschlossen und `EstimatedDeliveryDate` oder `SupplierOrderNRExtdrnal` wurde übergeben. |
| ERROR | Status of Order is CON, no change of ExternalCode possible. | Die Bestellung ist bestätigt und `SupplierOrderNRExtdrnal` wurde übergeben. |
| ERROR | Status can not be changed back to {Status}. | Rückwärtiger Statuswechsel: von CLS nach NEW/BES/CON oder von CON nach NEW. |
| ERROR | Status can not be changed to {Status} if current status is {NEW.|BES|unknown}. | Ein Status wurde übersprungen: NEW nach CON/CLS oder BES nach CLS. Die Status schrittweise durchlaufen (NEW → BES → CON → CLS). |
| ERROR | {SQL error message} | Sonstiger SQL-Fehler während der Aktualisierung; 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:pixiUpdateSupplierOrder>
<SupplierOrderNR>10234</SupplierOrderNR>
<!-- <Status>BES</Status> -->
<!-- <Note>Please deliver on euro pallets.</Note> -->
<!-- <EstimatedDeliveryDate>2024-06-15T00:00:00</EstimatedDeliveryDate> -->
<!-- <SupplierOrderNRExtdrnal>AB-2024-0815</SupplierOrderNRExtdrnal> -->
<!-- <UserName>API</UserName> -->
</ns1:pixiUpdateSupplierOrder>
</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:pixiUpdateSupplierOrder>
<SupplierOrderNR>10234</SupplierOrderNR>
<!-- <Status>BES</Status> -->
<!-- <Note>Please deliver on euro pallets.</Note> -->
<!-- <EstimatedDeliveryDate>2024-06-15T00:00:00</EstimatedDeliveryDate> -->
<!-- <SupplierOrderNRExtdrnal>AB-2024-0815</SupplierOrderNRExtdrnal> -->
<!-- <UserName>API</UserName> -->
</ns1:pixiUpdateSupplierOrder>
</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 = [
'SupplierOrderNR' => '10234',
// 'Status' => 'BES',
// 'Note' => 'Please deliver on euro pallets.',
// 'EstimatedDeliveryDate' => '2024-06-15T00:00:00',
// 'SupplierOrderNRExtdrnal' => 'AB-2024-0815',
// 'UserName' => 'API',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiUpdateSupplierOrder', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiUpdateSupplierOrder