pixiUpdateOrderline
Ändert Bezeichnung, Menge, Preise, Rabatte, Notiz, Seriennummer und DF-Typ einer Auftragsposition oder Bundle-Position, sofern die Position noch änderbar ist.
Ändert eine einzelne Auftragsposition (OrderlineKey) oder eine Bundle-Position (BundleOrderlineKey) und liefert eine Zeile result mit 1 (ausgeführt) oder 0 (abgelehnt).
Schlüsselwahl
BundleOrderlineKey = 0wird alsNULLbehandelt.- Fehlen beide Schlüssel, wird eine Informationsmeldung ausgegeben und
result = 0geliefert. - Ist
BundleOrderlineKeygesetzt, wirdOrderlineKeyignoriert.
Prüfung der Änderbarkeit Die Position, bei einem Bundle jede Komponenten-Position, muss alle folgenden Bedingungen erfüllen:
- ihr Auftragsstatus (
OrderStates) ist kein Endstatus (FinalStateistNoder leer), - ihr Status ist nicht
EIN, - sie ist nicht in einer Kiste verpackt (
boxitems), - sie steht auf keiner Rechnung (
Invlines).
Erfüllt eine einzige Position die Prüfung nicht, wird nichts geändert und result = 0 geliefert.
Zusammenführen mit den aktuellen Werten
Jeder nicht übergebene Parameter (NULL) behält den gespeicherten Wert der Position. Bei ArtName, oItemSpecialNote und SerialNumber behält auch ein Leerstring den gespeicherten Wert. Bei Bundles wird die Seriennummer nicht verarbeitet. Ist der resultierende Price höher als FullPrice, wird FullPrice auf Price angehoben. Dieselbe Regel gilt für die Nettowerte.
Aktualisierung
Anschließend wird die interne Prozedur Pixi_UpdateOrderline mit dem Bearbeiter API ausgeführt. Sie führt Folgendes aus:
- aktualisiert die Auftragsposition bzw. Bundle-Position mit Menge, Brutto-/Nettopreis, Bestätigungsdatum, Bezeichnung, Notiz, Seriennummer, Vollpreisen, Rabattprozent/-wert und
DF_type; - setzt bei Bundles zusätzlich
DF_typeauf allen Komponenten-Positionen; - schreibt die aktuellen Kopfwerte (Adressbemerkung, Geschenknachricht sowie bei vorhandener Versandanweisung auch Versandanweisung,
Verfahren,Product,Extras) zurück inOrderHeader; - gleicht den Gutschein des Auftrags ab (siehe Hinweise);
- baut die Reservierungen des gesamten Auftrags neu auf, wenn eine seiner Positionen eine Reservierung hat.
Zum Schluss wird result = 1 geliefert.
Hinweise
- Nicht vorhandener Schlüssel: Existiert
OrderlineKeybzw.BundleOrderlineKeynicht, findet die Prüfung keine Zeile und lehnt den Aufruf nicht ab. Es wird nichts geändert, trotzdem wirdresult = 1geliefert. - Meldungen statt Fehler: Alle
RAISERROR-Aufrufe verwenden Schweregrad 0. Sie kommen nur alsSqlMessagean, nicht als SQL-Fehler. - Rechnungsprüfung: Findet
Pixi_UpdateOrderlineeine Rechnungsposition, gibt es seine Meldung aus und ändert nichts. Danach wird dennochresult = 1geliefert. - Nettopreise: Nettopreis und Netto-Vollpreis werden mit den übergebenen Bruttowerten (
Price,FullPrice) vorbelegt. Der Positionspreis wird anschließend überdbo.fPixi_CalculatePrices(nicht beigefügt) anhand von Steuersatz und Auftragsart umgerechnet.FullPrice_Netwird ohne Umrechnung gespeichert und enthält nach Übergabe vonFullPricedenselben Wert wieFullPrice. - Datentypen:
DiscountPercwird alsnumeric(6,2)weitergegeben und daher auf zwei Nachkommastellen gerundet.GiftMessagewird alsvarchar(1000)weitergegeben. - Werte nicht leerbar:
ArtName,oItemSpecialNoteundSerialNumberlassen sich über diesen Aufruf nicht leeren. - Gutschein-Abgleich (anhand des Gutscheincodes der Position und
OrderHeader.Discount):- Existiert der Gutschein mit abweichendem Betrag, wird sein Betrag auf den Auftragsrabatt gesetzt.
- Ist dieser Rabatt 0, wird
VoucherIDauf allen Positionen und Bundle-Positionen des Auftrags geleert. - Existiert der Gutschein nicht und ist der Code nicht
NULL, wird ein Gutschein angelegt (gültig etwa ein Jahr ab Auftragsdatum, einmalig, ShopGRM) und allen Positionen des Auftrags zugeordnet.
- Reservierungen: Reservierungen werden über
Pixi_Res_RemoveReservationForOrderundPixi_Res_CreateReservationForOrderentfernt und neu angelegt. Diese Prozeduren sind nicht beigefügt und können weitere Ausgaben erzeugen. - Transaktionen und Fehler: Die Aktualisierung läuft in einer Transaktion bzw. einem Savepoint, falls bereits eine Transaktion offen ist. Bei einer Ausnahme wird zurückgerollt, eine Zeile mit Fehlermeldung und Fehlerzähler geliefert (unbenannte Spalten), der Fehler über
log.InsertErrorprotokolliert und anschließend dennochresult = 1geliefert. - Sperren: Die Prüfungen lesen mit
NOLOCK; Aktualisierungen verwendenROWLOCK.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
OrderlineKey
|
int | NULL |
Schlüssel der zu ändernden Auftragsposition. Wird ignoriert, wenn Beispiel: |
ArtName
|
varchar(120) string |
NULL |
Neue Artikelbezeichnung der Position. Beispiel: |
Qty
|
int | NULL |
Neue Menge. Beispiel: |
Price
|
money decimal |
NULL |
Neuer Stückpreis, wird auch als Ausgangswert für den Nettopreis verwendet. Beispiel: |
FullPrice
|
money decimal |
NULL |
Neuer Vollpreis (ohne Rabatt), wird auch als Netto-Vollpreis gespeichert. Wird auf Beispiel: |
oItemSpecialNote
|
varchar(8000) string |
NULL |
Notiz zur Position. Beispiel: |
DiscountValue
|
money decimal |
NULL |
Rabattbetrag der Position. Beispiel: |
DiscountPerc
|
float decimal |
NULL |
Rabattprozent der Position, gespeichert mit zwei Nachkommastellen. Beispiel: |
DF_Type
|
varchar(1) string |
NULL |
Direct-Fulfillment-Typ der Position ( Beispiel: |
SerialNumber
|
varchar(50) string |
NULL |
Seriennummer der Auftragsposition. Beispiel: |
BundleOrderlineKey
|
int | NULL |
Schlüssel der zu ändernden Bundle-Position. Beispiel: |
Antwort
Result-Set 1 · Wenn kein Schlüssel übergeben wurde oder die Position (bzw. eine Bundle-Komponente) nicht mehr änderbar ist.
Statuszeile, die anzeigt, dass nichts geändert wurde.
| Spalte | Typ | Beschreibung |
|---|---|---|
result
|
int |
Immer |
Result-Set 2 · Nur wenn in der internen Aktualisierungsprozedur eine Ausnahme auftritt.
Fehlerzeile von Pixi_UpdateOrderline mit unbenannten Spalten. Clients sehen sie üblicherweise als Column1 und Column2. Die Änderungen werden zurückgerollt.
| Spalte | Typ | Beschreibung |
|---|---|---|
Column1
Kann leer sein |
nvarchar(4000) string |
Fehlermeldung ( |
Column2
Kann leer sein |
int |
Aufsummierter Fehlerzähler. |
Result-Set 3 · Nachdem die Position die Prüfung bestanden hat und die interne Aktualisierung ausgeführt wurde (auch wenn sie nichts geändert hat oder fehlgeschlagen ist).
Statuszeile, die anzeigt, dass die Aktualisierung ausgeführt wurde.
| Spalte | Typ | Beschreibung |
|---|---|---|
result
|
int |
Immer |
Beispielantwort
<SqlRowSet1>
<row>
<result>1</result>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| RAISERROR | ERROR: No orderline or bundle key was sent! | Weder `OrderlineKey` noch ein `BundleOrderlineKey` ungleich 0 wurde übergeben. Informationsmeldung (Schweregrad 0), gefolgt von `result = 0`. |
| RAISERROR | ERROR: Can't change orderline, since invoice is already created! | Von der internen Prozedur `Pixi_UpdateOrderline` ausgegeben, wenn für die Position bereits eine Rechnungsposition existiert. Informationsmeldung (Schweregrad 0); es wird nichts geändert. |
| ERROR | {ERROR_MESSAGE()} | Beliebiger SQL-Fehler während der Aktualisierung in `Pixi_UpdateOrderline`. Er wird als Zeile mit unbenannten Spalten geliefert, und die Transaktion wird 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:pixiUpdateOrderline>
<!-- <OrderlineKey>123456</OrderlineKey> -->
<!-- <ArtName>T-Shirt Basic blau XL</ArtName> -->
<!-- <Qty>2</Qty> -->
<!-- <Price>19.95</Price> -->
<!-- <FullPrice>24.95</FullPrice> -->
<!-- <oItemSpecialNote>Bitte als Geschenk verpacken</oItemSpecialNote> -->
<!-- <DiscountValue>5.00</DiscountValue> -->
<!-- <DiscountPerc>20</DiscountPerc> -->
<!-- <DF_Type>N</DF_Type> -->
<!-- <SerialNumber>SN-2024-000815</SerialNumber> -->
<!-- <BundleOrderlineKey>0</BundleOrderlineKey> -->
</ns1:pixiUpdateOrderline>
</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:pixiUpdateOrderline>
<!-- <OrderlineKey>123456</OrderlineKey> -->
<!-- <ArtName>T-Shirt Basic blau XL</ArtName> -->
<!-- <Qty>2</Qty> -->
<!-- <Price>19.95</Price> -->
<!-- <FullPrice>24.95</FullPrice> -->
<!-- <oItemSpecialNote>Bitte als Geschenk verpacken</oItemSpecialNote> -->
<!-- <DiscountValue>5.00</DiscountValue> -->
<!-- <DiscountPerc>20</DiscountPerc> -->
<!-- <DF_Type>N</DF_Type> -->
<!-- <SerialNumber>SN-2024-000815</SerialNumber> -->
<!-- <BundleOrderlineKey>0</BundleOrderlineKey> -->
</ns1:pixiUpdateOrderline>
</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',
// 'ArtName' => 'T-Shirt Basic blau XL',
// 'Qty' => '2',
// 'Price' => '19.95',
// 'FullPrice' => '24.95',
// 'oItemSpecialNote' => 'Bitte als Geschenk verpacken',
// 'DiscountValue' => '5.00',
// 'DiscountPerc' => '20',
// 'DF_Type' => 'N',
// 'SerialNumber' => 'SN-2024-000815',
// 'BundleOrderlineKey' => '0',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiUpdateOrderline', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiUpdateOrderline