Postman-Collection
Orderlines Schreiben

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 = 0 wird als NULL behandelt.
  • Fehlen beide Schlüssel, wird eine Informationsmeldung ausgegeben und result = 0 geliefert.
  • Ist BundleOrderlineKey gesetzt, wird OrderlineKey ignoriert.

Prüfung der Änderbarkeit Die Position, bei einem Bundle jede Komponenten-Position, muss alle folgenden Bedingungen erfüllen:

  • ihr Auftragsstatus (OrderStates) ist kein Endstatus (FinalState ist N oder 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_type auf allen Komponenten-Positionen;
  • schreibt die aktuellen Kopfwerte (Adressbemerkung, Geschenknachricht sowie bei vorhandener Versandanweisung auch Versandanweisung, Verfahren, Product, Extras) zurück in OrderHeader;
  • 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 OrderlineKey bzw. BundleOrderlineKey nicht, findet die Prüfung keine Zeile und lehnt den Aufruf nicht ab. Es wird nichts geändert, trotzdem wird result = 1 geliefert.
  • Meldungen statt Fehler: Alle RAISERROR-Aufrufe verwenden Schweregrad 0. Sie kommen nur als SqlMessage an, nicht als SQL-Fehler.
  • Rechnungsprüfung: Findet Pixi_UpdateOrderline eine Rechnungsposition, gibt es seine Meldung aus und ändert nichts. Danach wird dennoch result = 1 geliefert.
  • Nettopreise: Nettopreis und Netto-Vollpreis werden mit den übergebenen Bruttowerten (Price, FullPrice) vorbelegt. Der Positionspreis wird anschließend über dbo.fPixi_CalculatePrices (nicht beigefügt) anhand von Steuersatz und Auftragsart umgerechnet. FullPrice_Net wird ohne Umrechnung gespeichert und enthält nach Übergabe von FullPrice denselben Wert wie FullPrice.
  • Datentypen: DiscountPerc wird als numeric(6,2) weitergegeben und daher auf zwei Nachkommastellen gerundet. GiftMessage wird als varchar(1000) weitergegeben.
  • Werte nicht leerbar: ArtName, oItemSpecialNote und SerialNumber lassen 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 VoucherID auf 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, Shop GRM) und allen Positionen des Auftrags zugeordnet.
  • Reservierungen: Reservierungen werden über Pixi_Res_RemoveReservationForOrder und Pixi_Res_CreateReservationForOrder entfernt 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.InsertError protokolliert und anschließend dennoch result = 1 geliefert.
  • Sperren: Die Prüfungen lesen mit NOLOCK; Aktualisierungen verwenden ROWLOCK.

Parameter

Parameter Typ Standardwert Beschreibung
OrderlineKey
int NULL

Schlüssel der zu ändernden Auftragsposition. Wird ignoriert, wenn BundleOrderlineKey gesetzt ist.

Beispiel: 123456

ArtName
varchar(120)
string
NULL

Neue Artikelbezeichnung der Position. NULL oder leer behält die aktuelle Bezeichnung.

Beispiel: T-Shirt Basic blau XL

Qty
int NULL

Neue Menge. NULL behält die aktuelle Menge.

Beispiel: 2

Price
money
decimal
NULL

Neuer Stückpreis, wird auch als Ausgangswert für den Nettopreis verwendet. NULL behält den aktuellen Preis.

Beispiel: 19.95

FullPrice
money
decimal
NULL

Neuer Vollpreis (ohne Rabatt), wird auch als Netto-Vollpreis gespeichert. Wird auf Price angehoben, falls niedriger. NULL behält den aktuellen Wert.

Beispiel: 24.95

oItemSpecialNote
varchar(8000)
string
NULL

Notiz zur Position. NULL oder leer behält die aktuelle Notiz.

Beispiel: Bitte als Geschenk verpacken

DiscountValue
money
decimal
NULL

Rabattbetrag der Position. NULL behält den aktuellen Wert.

Beispiel: 5.00

DiscountPerc
float
decimal
NULL

Rabattprozent der Position, gespeichert mit zwei Nachkommastellen. NULL behält den aktuellen Wert.

Beispiel: 20

DF_Type
varchar(1)
string
NULL

Direct-Fulfillment-Typ der Position (DF_type). Bei Bundles auch auf alle Komponenten-Positionen übertragen. NULL behält den aktuellen Wert.

Beispiel: N

SerialNumber
varchar(50)
string
NULL

Seriennummer der Auftragsposition. NULL oder leer behält den aktuellen Wert. Bei Bundle-Positionen nicht verarbeitet.

Beispiel: SN-2024-000815

BundleOrderlineKey
int NULL

Schlüssel der zu ändernden Bundle-Position. 0 wird als NULL behandelt. Hat Vorrang vor OrderlineKey.

Beispiel: 0

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 0.”

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 (ERROR_MESSAGE()).

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 1.

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>

Verwendete Tabellen

Orderlines · Schreiben BundleOrderlines · Schreiben OrderHeader · Schreiben Voucher · Schreiben OrderStates · Lesen boxitems · Lesen Invlines · Lesen Currency · Lesen Reservation · Lesen
SQL-Objekt:
dbo.pipiUpdateOrderline
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben