pixiBinCreate
Legt einen oder mehrere Lagerplätze aus einer XML-Liste an, prüft jeden Eintrag und liefert pro Lagerplatz eine Statuszeile.
Legt neue Lagerplätze in der Tabelle InvBin aus dem in BinsXML übergebenen XML an. Jedes Element /Bins/Bin beschreibt einen Lagerplatz.
Prüfungen für die gesamte Anfrage
- Ist
BinsXMLNULL oder leer oder enthält es kein Element/Bins/Bin, wird eine einzelne StatuszeileERROR/XML contains no data.geliefert. - Kann der Text nicht in XML umgewandelt werden, wird
ERROR/Cannot parse XMLgeliefert.
Prüfung je Lagerplatz (ein Lagerplatz, der eine Prüfung nicht besteht, erhält Status = ERROR und wird nicht angelegt):
- Duplikate innerhalb der Anfrage: Bei Einstellung
FilterStockOperationsWithLocation= 0 muss der Lagerplatzname in der Anfrage eindeutig sein, bei Einstellung = 1 die Kombination aus Name und Lager. Transportlagerplätze (TransportBin= 1) mit gleichem Namen gelten unabhängig vom Lager immer als Duplikat. Namedarf nicht leer sein.LocIddarf nicht leer sein.SortNrmuss eine ganze Zahl ≥ 0 sein (Pflicht).MaxItemsmuss eine ganze Zahl ≥ 0 sein (Pflicht).- Duplikate in der Datenbank: Bei Einstellung = 0 darf kein vorhandener Lagerplatz in irgendeinem Lager denselben Namen haben, bei Einstellung = 1 kein vorhandener Lagerplatz mit demselben Namen im selben Lager.
- Das Lager
LocIdmuss inLocationexistieren.
Anlage
Alle fehlerfreien Lagerplätze werden in einer Transaktion in InvBin eingefügt (BinLocID, BinName, BinMaxItems, BinSortNum, BinGroup, TransportBin); CreateEmp/UpdateEmp erhalten den Wert von CreateEmp (Standard API), CreateDate/UpdateDate den aktuellen Zeitpunkt. Ein fehlendes Group wird als Leerstring, ein fehlendes TransportBin als 0 gespeichert.
Antwort
Eine Zeile je Bin-Element, sortiert nach seiner Position im XML (Row). Erfolgreich angelegte Lagerplätze haben Status = CREATED, eine leere Message und den neuen BinKey (ermittelt über Name und Lager). Abgelehnte Lagerplätze haben Status = ERROR, den Grund in Message und BinKey = NULL.
Hinweise
- Das Verhalten hängt von der Einstellung
FilterStockOperationsWithLocationab (gelesen überSettingGet, Standard 0): Bei 0 sind Lagerplatznamen systemweit eindeutig, bei 1 nur je Lager. - Je Lagerplatz wird nur eine Fehlermeldung behalten. Ein leerer Name überschreibt eine zuvor gesetzte Duplikatmeldung; spätere Prüfungen laufen nur für Zeilen ohne bisherigen Fehler.
- Welcher von mehreren doppelten Einträgen der Anfrage angenommen wird, ist nicht garantiert der erste im XML, da die Nummerierung innerhalb einer Duplikatgruppe nur nach dem Lagerplatznamen sortiert.
SortNrundMaxItemswerden mitTRY_PARSE(Kultur der Sitzungssprache) umgewandelt. Ein fehlender Wert scheitert bereits alsDatatype error, daher werden die MeldungenSortNr is empty./MaxItems is empty.praktisch nie geliefert. Die SpaltenSortNrundMaxItemsder Antwort zeigen den umgewandelten Eingabewert und sind bei nicht numerischen Werten NULL.TransportBinwird direkt alsbitgelesen. Ein nicht umwandelbarer Wert (z. B.yes) löst außerhalb der Fehlerbehandlung einen SQL-Fehler aus, der alsSqlMessagezurückkommt.- Die Existenzprüfungen gegen
InvBinundLocationverwendenNOLOCK; parallele Aufrufe mit gleichen Lagerplatznamen können daher dennoch Duplikate erzeugen. - Das Einfügen läuft in einer eigenen Transaktion (bzw. einem Savepoint, wenn bereits eine Transaktion offen ist). Bei einem unerwarteten Fehler wird alles zurückgerollt, der Fehler über
log.InsertError(nicht beigefügt) protokolliert und eine einzelne ZeileERRORmit dem SQL-Fehlertext geliefert.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
BinsXML
Pflicht
|
varchar(max) xml |
– |
XML-Liste der anzulegenden Lagerplätze. Wurzel Beispiel:
|
CreateEmp
|
varchar(50) string |
API |
Benutzername, der als Ersteller und letzter Bearbeiter der neuen Lagerplätze gespeichert wird. Ein leerer Wert wird durch Beispiel: |
Antwort
Result-Set 1 · Wenn BinsXML leer ist, nicht geparst werden kann oder kein Element /Bins/Bin enthält.
Einzelne Statuszeile; es wird kein Lagerplatz angelegt.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(5) string |
Immer |
Message
|
varchar(21) string |
Fehlertext. |
Result-Set 2 · Nach der Prüfung, sofern kein unerwarteter SQL-Fehler auftritt.
Eine Zeile je Bin-Element der Anfrage mit dem Ergebnis der Anlage, sortiert nach Row.
| Spalte | Typ | Beschreibung |
|---|---|---|
Row
|
int |
Position des |
BinKey
Kann leer sein |
int |
Schlüssel des angelegten Lagerplatzes in |
BinName
Kann leer sein |
varchar(50) string |
Lagerplatzname aus der Anfrage. |
LocId
Kann leer sein |
varchar(3) string |
Lager-ID aus der Anfrage. |
BinGroup
Kann leer sein |
varchar(20) string |
Lagerplatzgruppe aus der Anfrage (Leerstring, wenn nicht angegeben). |
SortNr
Kann leer sein |
int |
Aus der Anfrage umgewandelte Sortiernummer; NULL, wenn fehlend oder nicht numerisch. |
MaxItems
Kann leer sein |
int |
Aus der Anfrage umgewandelte maximale Artikelanzahl; NULL, wenn fehlend oder nicht numerisch. |
Status
|
varchar(10) string |
|
Message
|
varchar(50) string |
Ablehnungsgrund; Leerstring bei Erfolg. |
TransportBin
|
bit boolean |
Gibt an, ob es sich um einen Transportlagerplatz handelt. |
Result-Set 3 · Wenn beim Einfügen oder Erstellen der Antwort ein unerwarteter SQL-Fehler auftritt.
Einzelne Statuszeile mit dem SQL-Fehlertext; alle Einfügungen des Aufrufs werden zurückgerollt.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(5) string |
Immer |
Message
Kann leer sein |
nvarchar(4000) string |
SQL-Fehlermeldung. |
Beispielantwort
<SqlRowSet1>
<row>
<Row>1</Row>
<BinKey>4711</BinKey>
<BinName>A-01-01</BinName>
<LocId>001</LocId>
<BinGroup>Regal A</BinGroup>
<SortNr>10</SortNr>
<MaxItems>100</MaxItems>
<Status>CREATED</Status>
<Message/>
<TransportBin>false</TransportBin>
</row>
<row>
<Row>2</Row>
<BinName>A-01-02</BinName>
<LocId>099</LocId>
<BinGroup>Regal A</BinGroup>
<SortNr>20</SortNr>
<MaxItems>100</MaxItems>
<Status>ERROR</Status>
<Message>Bin not created (Location does not exist).</Message>
<TransportBin>false</TransportBin>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | XML contains no data. | `BinsXML` ist NULL, leer oder enthält kein Element `/Bins/Bin`. Mindestens ein `Bin`-Element unter der Wurzel `Bins` senden. |
| ERROR | Cannot parse XML | `BinsXML` ist kein wohlgeformtes XML. |
| ERROR | Bin not created (Duplicated). | Der Lagerplatzname kommt mehrfach in der Anfrage vor (je Lager bei `FilterStockOperationsWithLocation` = 1; bei Transportlagerplätzen immer) oder bei Einstellung = 0 existiert bereits ein Lagerplatz mit diesem Namen in einem beliebigen Lager. |
| ERROR | Bin Name not created (Duplicated). | Bei `FilterStockOperationsWithLocation` = 1 existiert bereits ein Lagerplatz mit gleichem Namen im selben Lager. |
| ERROR | Bin not created. Name is empty. | `Name` fehlt oder ist leer. |
| ERROR | Bin not created. Location is empty. | `LocId` fehlt oder ist leer. |
| ERROR | Bin not created. Datatype error (SortNr). | `SortNr` fehlt oder ist keine gültige ganze Zahl. |
| ERROR | Bin not created. SortNr is empty. | `SortNr` ist nach der Umwandlung NULL; in der Praxis wird ein fehlender Wert bereits als Datentypfehler gemeldet. |
| ERROR | Bin not created. SortNr should be positive. | `SortNr` ist negativ. 0 oder eine positive ganze Zahl verwenden. |
| ERROR | Bin not created. Datatype error (MaxItems). | `MaxItems` fehlt oder ist keine gültige ganze Zahl. |
| ERROR | Bin not created. MaxItems is empty. | `MaxItems` ist nach der Umwandlung NULL; in der Praxis wird ein fehlender Wert bereits als Datentypfehler gemeldet. |
| ERROR | Bin not created. MaxItems should be positive. | `MaxItems` ist negativ. 0 oder eine positive ganze Zahl verwenden. |
| ERROR | Bin not created (Location does not exist). | Die angegebene `LocId` existiert nicht in der Lagertabelle. |
| ERROR | {ERROR_MESSAGE()} | Unerwarteter SQL-Fehler beim Einfügen der Lagerplätze oder Erstellen der Antwort; 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:pixiBinCreate>
<BinsXML><![CDATA[<Bins><Bin><Name>A-01-01</Name><LocId>001</LocId><Group>Regal A</Group><SortNr>10</SortNr><MaxItems>100</MaxItems><TransportBin>0</TransportBin></Bin><Bin><Name>TR-01</Name><LocId>001</LocId><Group></Group><SortNr>900</SortNr><MaxItems>0</MaxItems><TransportBin>1</TransportBin></Bin></Bins>]]></BinsXML>
<!-- <CreateEmp>ShopSync</CreateEmp> -->
</ns1:pixiBinCreate>
</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:pixiBinCreate>
<BinsXML><![CDATA[<Bins><Bin><Name>A-01-01</Name><LocId>001</LocId><Group>Regal A</Group><SortNr>10</SortNr><MaxItems>100</MaxItems><TransportBin>0</TransportBin></Bin><Bin><Name>TR-01</Name><LocId>001</LocId><Group></Group><SortNr>900</SortNr><MaxItems>0</MaxItems><TransportBin>1</TransportBin></Bin></Bins>]]></BinsXML>
<!-- <CreateEmp>ShopSync</CreateEmp> -->
</ns1:pixiBinCreate>
</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 = [
'BinsXML' => '<Bins><Bin><Name>A-01-01</Name><LocId>001</LocId><Group>Regal A</Group><SortNr>10</SortNr><MaxItems>100</MaxItems><TransportBin>0</TransportBin></Bin><Bin><Name>TR-01</Name><LocId>001</LocId><Group></Group><SortNr>900</SortNr><MaxItems>0</MaxItems><TransportBin>1</TransportBin></Bin></Bins>',
// 'CreateEmp' => 'ShopSync',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiBinCreate', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiBinCreate