Postman-Collection
Stock Schreiben

pixiBinUpdate

Aktualisiert einen oder mehrere bestehende Lagerplätze aus einer XML-Liste und liefert je Lagerplatz eine Statuszeile.

Aktualisiert bestehende Lagerplätze in InvBin. Lagerplätze werden über BinKey identifiziert; neue Lagerplätze werden nicht angelegt.

  1. Ist BinsXML leer oder nicht als XML lesbar, wird eine einzelne ERROR-Zeile geliefert und nichts geändert.
  2. Jedes Element /Bins/Bin wird gelesen: BinKey, Name, LocId, Group, SortNr, MaxItems, TransportBin.
  3. Jeder Lagerplatz wird geprüft. Ein Lagerplatz, der eine Prüfung nicht besteht, erhält Status = ERROR und eine Meldung und wird übersprungen. Die erste fehlgeschlagene Prüfung gilt. Die Prüfungen sind:
    • BinKey fehlt oder ist 0.
    • SortNr oder MaxItems ist keine ganze Zahl oder ist negativ.
    • LocId weicht vom aktuellen Lager ab und der Lagerplatz hat noch Bestand (InvBinItem).
    • Der resultierende Name existiert bereits bei einem anderen Lagerplatz:
      • im selben Lager, immer geprüft;
      • in einem anderen Lager, nur geprüft, wenn die Einstellung FilterStockOperationsWithLocation den Wert 0 hat;
      • bei übergebenem TransportBin = 1 unter allen Transportlagerplätzen.
    • Die angegebene LocId existiert nicht in Location.
    • Es gibt keinen Lagerplatz mit diesem BinKey.
  4. Alle gültigen Lagerplätze werden in einer Transaktion aktualisiert. Nicht übergebene Elemente behalten ihren aktuellen Wert. Die Aktualisierung setzt BinName, BinLocID, BinGroup, BinSortNum, BinMaxItems und TransportBin sowie UpdateEmp und UpdateDate.
  5. Pro Bin-Element wird eine Zeile geliefert, sortiert nach der Position im XML (Row). Jede Zeile hat Status = UPDATED oder ERROR.

Hinweise

  • Beibehaltene Werte: Die meisten Elemente werden über text() gelesen. Ein leeres Element (z. B. <SortNr/>) gilt daher als nicht übergeben, und der aktuelle Wert bleibt erhalten. Group wird ohne text() gelesen: Ein leeres <Group/> setzt die Gruppe auf einen Leerstring.
  • Gelieferte Werte: Die Ergebniszeilen enthalten die Werte wie im XML übergeben, nicht die zusammengeführten, in InvBin gespeicherten Werte. Nicht übergebene Felder werden als NULL geliefert.
  • Transportlagerplätze: Die Duplikatprüfung für Transportlagerplätze schließt den Lagerplatz selbst nicht aus. Wird TransportBin = 1 für einen Lagerplatz übergeben, der bereits Transportlagerplatz ist, wird daher Bin Name not updated (Duplicated). gemeldet.
  • Duplikate innerhalb eines Aufrufs: Namen werden nur gegen bestehende Zeilen in InvBin geprüft, nicht gegen andere Bin-Elemente desselben Aufrufs.
  • Wirkungslose Prüfung: Die Prüfung Bin not updated. Name is empty. greift nur bei Zeilen ohne BinKey. Solche Zeilen scheitern bereits an der BinKey-Prüfung, die Meldung tritt daher praktisch nicht auf.
  • Konvertierungsfehler: Ein nicht ganzzahliger BinKey oder ein ungültiger TransportBin-Wert (alles außer 0, 1, true, false) schlägt beim Lesen des XML fehl. Das geschieht vor dem TRY-Block und kommt als SqlMessage zurück. SortNr und MaxItems werden mit TRY_PARSE gelesen und erzeugen stattdessen Statuszeilen.
  • Lesehinweise: Die Prüfungen lesen InvBin, InvBinItem und Location mit NOLOCK.
  • Transaktion: Die Aktualisierung erfolgt mit ROWLOCK in einer eigenen Transaktion bzw. einem Savepoint, wenn bereits eine Transaktion offen ist.
  • Unerwartete Fehler: Der Fehler wird über log.InsertError protokolliert (nicht beigefügt), die Transaktion zurückgerollt und eine Zeile Status = ERROR geliefert. Deren Message enthält @@ERROR nach dem Protokollaufruf, also eine Zahl (meist 0) und nicht den Fehlertext.
  • UpdateEmp: Ein leerer Wert für UpdateEmp wird durch API ersetzt.

Parameter

Parameter Typ Standardwert Beschreibung
BinsXML
Pflicht
varchar(max)
xml
–

XML-Liste der zu aktualisierenden Lagerplätze, Wurzel Bins mit einem Bin-Element je Lagerplatz. BinKey ist Pflicht. Name, LocId, Group, SortNr, MaxItems und TransportBin sind optional; nicht übergebene Werte bleiben erhalten.

Beispiel:

<Bins>
  <Bin>
    <BinKey>1234</BinKey>
    <Name>A-01-02</Name>
    <LocId>001</LocId>
    <Group>Regal A</Group>
    <SortNr>10</SortNr>
    <MaxItems>50</MaxItems>
    <TransportBin>0</TransportBin>
  </Bin>
  <Bin>
    <BinKey>1235</BinKey>
    <SortNr>20</SortNr>
  </Bin>
</Bins>
UpdateEmp
varchar(50)
string
API

Benutzername, der in InvBin.UpdateEmp geschrieben wird. Ein leerer Wert wird durch API ersetzt.

Beispiel: WMS

Antwort

Result-Set 1 · Wenn BinsXML leer ist oder nicht als XML gelesen werden kann.

Einzelne Fehlerzeile; es wird nichts aktualisiert.

Spalte Typ Beschreibung
Status varchar(5)
string

Immer ERROR.

Message varchar(21)
string

Fehlertext.

Result-Set 2 · Nach der Prüfung und erfolgreicher Aktualisierung.

Eine Zeile je Bin-Element der Eingabe, sortiert nach Position, mit den übergebenen Werten und dem Aktualisierungsstatus.

Spalte Typ Beschreibung
Row int

Position des Bin-Elements im XML (ab 1).

BinKey
Kann leer sein
int

Lagerplatz-Schlüssel wie übergeben.

BinName
Kann leer sein
varchar(50)
string

Lagerplatzname wie übergeben; NULL, wenn nicht übergeben.

LocId
Kann leer sein
varchar(3)
string

Lager-ID wie übergeben; NULL, wenn nicht übergeben.

BinGroup
Kann leer sein
varchar(20)
string

Lagerplatzgruppe wie übergeben; NULL, wenn nicht übergeben.

SortNr
Kann leer sein
int

Gelesene Sortiernummer; NULL, wenn nicht übergeben, ungültig oder wegen eines früheren Fehlers nicht ausgewertet.

MaxItems
Kann leer sein
int

Gelesene maximale Artikelanzahl; NULL, wenn nicht übergeben, ungültig oder wegen eines früheren Fehlers nicht ausgewertet.

Status varchar(10)
string

UPDATED oder ERROR.

Message varchar(50)
string

Fehlermeldung; Leerstring bei aktualisierten Lagerplätzen.

TransportBin
Kann leer sein
bit
boolean

Transportlagerplatz-Kennzeichen wie übergeben; NULL, wenn nicht übergeben.

Result-Set 3 · Wenn bei der Aktualisierung ein unerwarteter Fehler auftritt.

Fehlerzeile, nachdem der Fehler protokolliert und die Transaktion zurückgerollt wurde.

Spalte Typ Beschreibung
Status varchar(5)
string

Immer ERROR.

Message int

Wert von @@ERROR nach dem Protokollaufruf (meist 0).

Fehlermeldungen

Status Meldung Ursache
ERROR XML contains no data. `BinsXML` ist NULL oder leer. Ein `Bins`-Dokument übergeben.
ERROR Cannot parse XML `BinsXML` ist kein wohlgeformtes XML.
ERROR Bin not updated. Bin key is empty. `BinKey` fehlt oder ist `0` in einem `Bin`-Element.
ERROR Bin not updated. Datatype error (SortNr). `SortNr` ist keine ganze Zahl.
ERROR Bin not updated. SortNr should be positive. `SortNr` ist negativ.
ERROR Bin not updated. Datatype error (MaxItems). `MaxItems` ist keine ganze Zahl.
ERROR Bin not updated. MaxItems should be positive. `MaxItems` ist negativ.
ERROR Bin not updated. Name is empty. Zeile ohne `BinKey` und ohne Namen. Praktisch scheitern solche Zeilen bereits an der `BinKey`-Prüfung.
ERROR Bin Location not updated. Bin has stock. `LocId` weicht vom aktuellen Lager ab, der Lagerplatz hat aber noch Bestand. Den Lagerplatz vor dem Lagerwechsel leeren.
ERROR Bin Name not updated (Duplicated). Der resultierende Name wird bereits von einem anderen Lagerplatz verwendet. Das gilt für: dasselbe Lager; ein anderes Lager bei `FilterStockOperationsWithLocation` = 0; jeden Transportlagerplatz bei übergebenem `TransportBin` = 1.
ERROR Bin not updated (Location does not exist). Die angegebene `LocId` existiert nicht in `Location`.
ERROR Bin not updated (Bin does not exist). Es existiert kein Lagerplatz mit dem angegebenen `BinKey`.
ERROR {@@ERROR} Unerwarteter SQL-Fehler bei der Aktualisierung. Der Fehler wird protokolliert und die Transaktion zurückgerollt; `Message` enthält eine Zahl, nicht den Fehlertext.

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:pixiBinUpdate>
      <BinsXML><![CDATA[<Bins><Bin><BinKey>1234</BinKey><Name>A-01-02</Name><LocId>001</LocId><Group>Regal A</Group><SortNr>10</SortNr><MaxItems>50</MaxItems><TransportBin>0</TransportBin></Bin><Bin><BinKey>1235</BinKey><SortNr>20</SortNr></Bin></Bins>]]></BinsXML>
      <!-- <UpdateEmp>WMS</UpdateEmp> -->
    </ns1:pixiBinUpdate>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

InvBin · Schreiben InvBinItem · Lesen Location · Lesen Settings · Lesen
SQL-Objekt:
dbo.pipiBinUpdate
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben