pixiUpdateSOrderline
Aktualisiert Menge, Lieferantenpreis, Kommentar, voraussichtliches Lieferdatum oder nicht gelieferte Menge einer Lieferantenbestellposition und berechnet die Bestellsummen neu.
Ändert eine einzelne Position einer Lieferantenbestellung, identifiziert über SorderlineKey (SupplierOrderLine.Id).
Prüfungen (bei einem Fehler wird eine Zeile mit ReturnCode = 'Error' geliefert und nichts geändert):
- Die Position muss existieren.
- Eine
QtyNotDeliveredungleich 0 wird nur akzeptiert, wenn die Lieferantenbestellung den StatusCON(bestätigt) hat. - Hat die Lieferantenbestellung den Status
CONoderCLS, dürfen wederSupplPrice(nicht NULL) nochOrderQty(ungleich 0) übergeben werden.
Vorbereitung
UserNameNULL wird zuAPI; der Benutzer wird für den Änderungsstempel über den Namen ermittelt.EstimatedDeliveryNULL behält das bisherige voraussichtliche Lieferdatum der Position bei.- Wird
QtyNotDeliveredexplizit als NULL übergeben, bleibt die bisherige nicht gelieferte Menge erhalten.
Aktualisierung (durch die interne Prozedur GOS_SOrderlinesUpdate):
- Immer: Kommentar (
Comment=Note), voraussichtliches Lieferdatum, Änderungsbenutzer/-datum und Zeilenversion der Position. - Lieferantenbestellung in bearbeitbarem Status (interne Status-Id 1 oder 2):
Qty(einOrderQtyvon 0 behält die bisherige Menge), Anzahl Verpackungseinheiten (Menge geteilt durch Verpackungseinheit, aufgerundet),SupplierPrice(nur wennSupplPriceungleich 0), Rabattbetrag/-prozent und Positionssumme werden neu berechnet. - Lieferantenbestellung im Status
CON(interne Status-Id 3):UndeliveredQtywird aufQtyNotDeliveredgesetzt. - Der Bestellkopf (
SupplierOrder) wird neu berechnet: Zwischensumme aus allen Positionssummen, Kopfrabatt, Frachtkosten (auf 0 gesetzt, wenn die Frachtfreigrenze erreicht ist), Gesamtbetrag inklusive Mindermengenzuschlag. - Der Lagerplatz-Mengensatz der Position (
SupplierOrderLineLocQty) erhält die Menge und bei StatusCONdie nicht gelieferte Menge. - Hat die Position nach der Aktualisierung ein voraussichtliches Lieferdatum, wird der Artikel für einen erzwungenen Export in den Shop vorgemerkt.
Bei Erfolg wird eine Zeile mit ReturnCode = 'OK' geliefert.
Hinweise
- Kommentar wird immer überschrieben:
Notehat den Standardwert Leerstring, daher löscht ein Weglassen den bestehenden Kommentar der Position. Zum Beibehalten den aktuellen Kommentar mitsenden. - Nicht gelieferte Menge im Status
CON:QtyNotDeliveredhat den Standardwert 0. Bei einer bestätigten Bestellung setzt ein WeglassenUndeliveredQtyauf 0. Zum Beibehalten explizit NULL (nil) oder den aktuellen Wert senden. QtyReceivedist veraltet und wird ignoriert.- Die Aktualisierung der Position wird als dynamisches SQL aufgebaut;
Notewird ohne Maskierung eingefügt, ein einfaches Anführungszeichen (') im Kommentar führt daher zu einem fehlerhaften Statement. SQL-Fehler der internen Prozedur kommen alsSqlMessagezurück; die abschließendeOK-Zeile kann trotzdem geliefert werden. - Für die Aktualisierungszweige werden die internen Status-Ids 1, 2 und 3 verwendet; Id 3 entspricht laut Code-Kommentar
CON. Bei anderen Status (z. B.CLS) werden nur Kommentar und voraussichtliches Lieferdatum geändert. - Die Rabattneuberechnung teilt bei betragsbasiertem Rabatt (
DiscountType = 1) durch Menge × Preis; Preis oder Menge 0 bei vorhandenem Rabatt kann eine Division durch Null auslösen. - Der Shop-Export wird immer ausgelöst, wenn die Position ein voraussichtliches Lieferdatum hat, auch wenn
EstimatedDeliverynicht übergeben wurde. Die ExportprozedurPixi_ExportItemChangesToShopliegt nicht vor. - Keine explizite Transaktion; Lesezugriffe mit
NOLOCK, Updates mitROWLOCK.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
SorderlineKey
Pflicht
|
int | – |
Id der zu ändernden Lieferantenbestellposition ( Beispiel: |
UserName
Pflicht
|
varchar(50) string |
– |
Pixi-Benutzername, der als Bearbeiter gespeichert wird. NULL wird durch Beispiel: |
OrderQty
|
int | 0 |
Neue Bestellmenge. 0 oder NULL behält die bisherige Menge. Nur zulässig, solange die Lieferantenbestellung nicht im Status Beispiel: |
Note
|
varchar(1024) string |
– |
Kommentar der Position. Wird immer geschrieben; ein leerer Wert löscht den bestehenden Kommentar. Darf keine einfachen Anführungszeichen enthalten. Beispiel: |
QtyReceived
|
int | 0 |
Veraltet, wird ignoriert. Beispiel: |
QtyNotDelivered
|
int | 0 |
Nicht gelieferte Menge. Ein Wert ungleich 0 ist nur zulässig, wenn die Lieferantenbestellung den Status Beispiel: |
EstimatedDelivery
|
datetime dateTime |
NULL |
Neues voraussichtliches Lieferdatum der Position. NULL behält das bisherige Datum. Beispiel: |
SupplPrice
|
decimal(9, 2) decimal |
NULL |
Neuer Lieferanten-Einzelpreis. NULL oder 0 behält den bisherigen Preis. Nur zulässig, solange die Lieferantenbestellung nicht im Status Beispiel: |
Antwort
Result-Set 1 · Immer; genau eine Zeile (Fehlerzeile bei fehlgeschlagener Prüfung, sonst Erfolgszeile).
Status der Aktualisierung.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(5) string |
|
Message
|
varchar(max) string |
Erfolgs- oder Fehlertext. |
Beispielantwort
<SqlRowSet1>
<row>
<ReturnCode>OK</ReturnCode>
<Message>Update done successfully.</Message>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | The specified supplier orderline id does not exists: {SorderlineKey} | Es existiert keine Lieferantenbestellposition mit dem angegebenen `SorderlineKey` (oder sie ist keiner Lieferantenbestellung mit Status zugeordnet). Positions-Id prüfen. |
| Error | @QtyNotDelivered can only be updated when supplier order is on status CON and @SupplPrice is NULL and @OrderQty is NULL or 0 | Eine `QtyNotDelivered` ungleich 0 wurde übergeben, obwohl die Lieferantenbestellung nicht im Status `CON` ist. Bei anderen Status 0 senden oder weglassen. |
| Error | The supplier price and order quantity can not be updated when the purchase order has status confirmed or closed (CON, CLS). | `SupplPrice` (nicht NULL) oder eine `OrderQty` ungleich 0 wurde übergeben, obwohl die Lieferantenbestellung den Status `CON` oder `CLS` hat. Bei bestätigten oder abgeschlossenen Bestellungen beide weglassen. |
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:pixiUpdateSOrderline>
<SorderlineKey>48213</SorderlineKey>
<UserName>API</UserName>
<!-- <OrderQty>120</OrderQty> -->
<!-- <Note>Lieferung in zwei Teilen</Note> -->
<!-- <QtyReceived>0</QtyReceived> -->
<!-- <QtyNotDelivered>10</QtyNotDelivered> -->
<!-- <EstimatedDelivery>2024-07-15T00:00:00</EstimatedDelivery> -->
<!-- <SupplPrice>12.50</SupplPrice> -->
</ns1:pixiUpdateSOrderline>
</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:pixiUpdateSOrderline>
<SorderlineKey>48213</SorderlineKey>
<UserName>API</UserName>
<!-- <OrderQty>120</OrderQty> -->
<!-- <Note>Lieferung in zwei Teilen</Note> -->
<!-- <QtyReceived>0</QtyReceived> -->
<!-- <QtyNotDelivered>10</QtyNotDelivered> -->
<!-- <EstimatedDelivery>2024-07-15T00:00:00</EstimatedDelivery> -->
<!-- <SupplPrice>12.50</SupplPrice> -->
</ns1:pixiUpdateSOrderline>
</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 = [
'SorderlineKey' => '48213',
'UserName' => 'API',
// 'OrderQty' => '120',
// 'Note' => 'Lieferung in zwei Teilen',
// 'QtyReceived' => '0',
// 'QtyNotDelivered' => '10',
// 'EstimatedDelivery' => '2024-07-15T00:00:00',
// 'SupplPrice' => '12.50',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiUpdateSOrderline', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiUpdateSOrderline