pixiSupplierOrderCreate
Legt eine Lieferantenbestellung oder Vorbestellung aus einem XML-Dokument für einen Lieferanten, Liefer- und Bestelllager an.
Legt eine Lieferantenbestellung (Type = 1) oder eine Vorbestellung (Type = 2) an. Die eigentliche Anlage übernimmt die interne Prozedur pixi.SupplierOrderCreate. Dieser Wrapper löst die Eingabewerte auf und bereitet die Rückgabe auf.
Ablauf:
- Jeder
Typeaußer2wird als1behandelt. - Bei Lieferantenbestellungen (
Type= 1) mussOrderConsiderationStartDateleer sein. Andernfalls wird eine Fehlerzeile geliefert und nichts angelegt. - Eine Transaktion wird gestartet. Besteht bereits eine äußere Transaktion, wird stattdessen ein Savepoint gesetzt.
UserIdwird ausUserNameermittelt, falls nicht angegeben. Bei unbekanntem Benutzernamen wird auf den BenutzerpixiAdministrationzurückgegriffen.- Der Lieferant wird über
SupplierId(Suppliers.SuppliersKey) ermittelt, oder überSupplierNr(SupplNr), wennSupplierIdNULL ist. - Lieferlager und Bestelllager werden über ihren Schlüssel (
DeliveryLocationId,OrderLocationId) ermittelt, oder über das LagerkürzelLocID(DeliveryLocation,OrderLocation), wenn der Schlüssel NULL ist. Eine angegebene, aber nicht existierende ID ergibt NULL. Auf das Kürzel wird dann nicht ausgewichen. - Die Eingabewerte werden normalisiert:
ConsiderPackageUnitsundConsiderMinOrderQty: NULL wird zu0.EstimatedDeliveryDateundOrderConsiderationStartDate: Der Zeitanteil wird entfernt.ExternalCode: Ein Leerstring wird zu NULL.
pixi.SupplierOrderCreatewird mit dem BestelldokumentSupplOrderDocumentund allen aufgelösten Werten ausgeführt.- Bei
ShowDetailedReturn= 1 wird eine Detail-Ergebnismenge geliefert. Sie enthält je Artikelzeile der Eingabe eine Zeile und zeigt, wie die Zeile zugeordnet wurde. Der Status ist einer der WerteOK,Item not found,Item does not have the correct supplier assignedoderItem number supplier is missing for the item. Die Zeile enthält außerdem die angelegte Bestellung und Bestellposition, sofern vorhanden. BeiShowDetailedReturn= 0 wird die innere Prozedur stattdessen angewiesen, die angelegten IDs zurückzugeben. - Hat der Aufruf eine eigene Transaktion geöffnet, wird sie committet. Nach dem Commit wird eine
ReturnCode/ErrorMessage-Zeile geliefert, falls Lieferant, Lieferlager oder Bestelllager nicht aufgelöst werden konnten.
Hinweise
- Aufbau von
SupplOrderDocumentund die eigentlichen Inserts sind inpixi.SupplierOrderCreatedefiniert, das nicht vorliegt. XML-Struktur, die Ergebnismenge mit den angelegten IDs und die geschriebenen Tabellen lassen sich aus diesem Code nicht ableiten. Die Detailrückgabe deutet darauf hin, dass Zeilen Artikel über die interne Artikelnummer (Abgleich mitpixi.ItemCodemitCodeTypeId= 2), die Lieferantenartikelnummer oder die Artikel-ID identifizieren. - Lieferant und Lager werden erst nach Ausführung der inneren Prozedur und dem Commit geprüft. Deren Prüfmeldung garantiert daher nicht, dass nichts geschrieben wurde.
- Läuft der Aufruf in einer äußeren Transaktion, wird keine Prüfmeldung geliefert. Der Commit liegt dann ebenfalls beim Aufrufer.
- Die Prüfzeile verwendet den
ReturnCode-WertErrormit nachgestelltem Leerzeichen, andere Fehler verwendenERROR. - Im Detailmodus wird die angelegte Bestellung als
MAX(Id)vonpixi.SupplierOrderermittelt. Bei parallel angelegten Bestellungen kann dies eine andere Bestellung sein. - Lookups verwenden
NOLOCK. - Fehler werden abgefangen. Transaktion bzw. Savepoint werden zurückgerollt, und der Fehler wird als Zeile mit
ReturnCode=ERRORgeliefert, nicht als SQL-Fehler. AppNameist Pflicht, wird im Code aber nicht verwendet.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
AppName
Pflicht
|
varchar(255) string |
– |
Name der aufrufenden Anwendung. Wird im Code nicht verwendet. Beispiel: |
UserId
|
int | NULL |
ID des Pixi-Benutzers. Bei NULL wird sie aus Beispiel: |
UserName
Pflicht
|
varchar(50) string |
– |
Pixi-Benutzername. Wird nur verwendet, wenn Beispiel: |
SupplierId
|
int | NULL |
Lieferantenschlüssel ( Beispiel: |
SupplierNr
|
varchar(4) string |
NULL |
Lieferantennummer ( Beispiel: |
DeliveryLocation
|
varchar(3) string |
NULL |
Lagerkürzel ( Beispiel: |
DeliveryLocationId
|
int | NULL |
Lagerschlüssel des Liefer- und Rechnungslagers. Hat Vorrang vor Beispiel: |
OrderLocation
|
varchar(3) string |
NULL |
Lagerkürzel ( Beispiel: |
OrderLocationId
|
int | NULL |
Lagerschlüssel des Bestelllagers. Hat Vorrang vor Beispiel: |
SupplOrderDocument
Pflicht
|
xml | – |
XML-Dokument mit den Bestellpositionen. Es wird von |
ConsiderPackageUnits
|
bit boolean |
0 |
Ob Verpackungseinheiten bei den Mengen berücksichtigt werden. NULL wird als 0 behandelt. Erlaubte Werte
Beispiel: |
ConsiderMinOrderQty
|
bit boolean |
0 |
Ob die Mindestbestellmenge berücksichtigt wird. NULL wird als 0 behandelt. Erlaubte Werte
Beispiel: |
ExternalCode
|
nvarchar(50) string |
NULL |
Externe Referenz der Bestellung. Ein Leerstring wird als NULL behandelt. Beispiel: |
EstimatedDeliveryDate
|
datetime dateTime |
NULL |
Voraussichtliches Lieferdatum. Der Zeitanteil wird entfernt. Beispiel: |
ShowDetailedReturn
|
bit boolean |
0 |
1 liefert je Eingabezeile eine Detailzeile mit Zuordnungsstatus. Bei 0 liefert die innere Prozedur die angelegten IDs. Erlaubte Werte
Beispiel: |
Type
|
int | 1 |
Bestellart. Jeder Wert außer 2 wird als 1 behandelt. Erlaubte Werte
Beispiel: |
OrderConsiderationStartDate
|
datetime dateTime |
NULL |
Startdatum der Bestellberücksichtigung. Nur bei Vorbestellungen ( |
Antwort
Result-Set 1 · Wenn Type = 1 und OrderConsiderationStartDate gesetzt ist
Validierungsfehlerzeile. Es wird nichts angelegt.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(5) string |
Immer |
ErrorMessage
|
varchar(57) string |
Fehlertext. |
Result-Set 2 · Wenn ShowDetailedReturn = 0 (geliefert von pixi.SupplierOrderCreate)
Angelegte IDs, wie von der inneren Prozedur geliefert. Die Spalten sind aus diesem Code nicht bekannt.
Result-Set 3 · Wenn ShowDetailedReturn = 1 und kein Fehler auftrat
Eine Zeile je Artikelzeile des Eingabedokuments, mit Zuordnungsstatus und angelegter Bestellposition.
| Spalte | Typ | Beschreibung |
|---|---|---|
SupplierOrderId
Kann leer sein |
int |
ID der angelegten Lieferantenbestellung. NULL, wenn für den Artikel keine Position angelegt wurde. |
InternalNumber
Kann leer sein |
string |
Interne Nummer der Lieferantenbestellung. |
SupplierOrderlineId
Kann leer sein |
int |
ID der angelegten Bestellposition. |
ItemId
Kann leer sein |
int |
Zugeordnete Artikel-ID. |
ItemName
Kann leer sein |
string |
Artikelname aus der Bestellposition, sonst aus den Artikelstammdaten. |
ItemNrSuppl
Kann leer sein |
varchar(50) string |
Lieferantenartikelnummer. |
ItemNrInt
Kann leer sein |
varchar(50) string |
Interne Artikelnummer aus der Eingabe. |
StatusMessage
Kann leer sein |
varchar(100) string |
|
ItemCodeInternal
Kann leer sein |
string |
In der Bestellposition gespeicherter interner Artikelcode. |
Result-Set 4 · Ohne äußere Transaktion, wenn Lieferant, Liefer- oder Bestelllager nicht aufgelöst werden konnte
Prüfmeldungszeile, geliefert nach dem Commit.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(255) string |
|
ErrorMessage
|
varchar(255) string |
Welcher Wert nicht zugeordnet werden konnte. |
Result-Set 5 · Wenn eine Ausnahme auftritt
Fehlerzeile nach dem Rollback.
| Spalte | Typ | Beschreibung |
|---|---|---|
ReturnCode
|
varchar(5) string |
Immer |
ErrorMessage
Kann leer sein |
nvarchar(4000) string |
SQL-Fehlermeldung. |
Beispielantwort
<SqlRowSet1>
<row>
<SupplierOrderId>1534</SupplierOrderId>
<InternalNumber>SO-001534</InternalNumber>
<SupplierOrderlineId>8821</SupplierOrderlineId>
<ItemId>4711</ItemId>
<ItemName>Kaffeetasse weiß</ItemName>
<ItemNrSuppl>KT-100</ItemNrSuppl>
<ItemNrInt>100200</ItemNrInt>
<StatusMessage>OK</StatusMessage>
<ItemCodeInternal>100200</ItemCodeInternal>
</row>
<row>
<ItemNrInt>999999</ItemNrInt>
<StatusMessage>Item not found</StatusMessage>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | OrderConsiderationStartDate is only valid for Pre-Orders | `OrderConsiderationStartDate` wurde übergeben, obwohl `Type` nicht 2 ist. Das Datum weglassen oder `Type` = 2 verwenden. |
| Error | Match value for parameter Supplier does not exists in db. | Weder `SupplierId` noch `SupplierNr` entspricht einem vorhandenen Lieferanten. |
| Error | Match value for parameter delivery location does not exists in db. | `DeliveryLocationId` bzw. `DeliveryLocation` entspricht keinem vorhandenen Lager. |
| Error | Match value for parameter order location does not exists in db. | `OrderLocationId` bzw. `OrderLocation` entspricht keinem vorhandenen Lager. |
| ERROR | {ERROR_MESSAGE()} | Beliebiger SQL-Fehler während der Verarbeitung, z. B. ungültiges XML oder ein Fehler aus `pixi.SupplierOrderCreate`. 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:pixiSupplierOrderCreate>
<AppName>ShopConnector</AppName>
<!-- <UserId>12</UserId> -->
<UserName>jdoe</UserName>
<!-- <SupplierId>5</SupplierId> -->
<!-- <SupplierNr>L001</SupplierNr> -->
<!-- <DeliveryLocation>001</DeliveryLocation> -->
<!-- <DeliveryLocationId>1</DeliveryLocationId> -->
<!-- <OrderLocation>001</OrderLocation> -->
<!-- <OrderLocationId>1</OrderLocationId> -->
<SupplOrderDocument><![CDATA[?]]></SupplOrderDocument>
<!-- <ConsiderPackageUnits>0</ConsiderPackageUnits> -->
<!-- <ConsiderMinOrderQty>0</ConsiderMinOrderQty> -->
<!-- <ExternalCode>PO-2024-0815</ExternalCode> -->
<!-- <EstimatedDeliveryDate>2024-06-15T00:00:00</EstimatedDeliveryDate> -->
<!-- <ShowDetailedReturn>1</ShowDetailedReturn> -->
<!-- <Type>1</Type> -->
<!-- <OrderConsiderationStartDate>?</OrderConsiderationStartDate> -->
</ns1:pixiSupplierOrderCreate>
</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:pixiSupplierOrderCreate>
<AppName>ShopConnector</AppName>
<!-- <UserId>12</UserId> -->
<UserName>jdoe</UserName>
<!-- <SupplierId>5</SupplierId> -->
<!-- <SupplierNr>L001</SupplierNr> -->
<!-- <DeliveryLocation>001</DeliveryLocation> -->
<!-- <DeliveryLocationId>1</DeliveryLocationId> -->
<!-- <OrderLocation>001</OrderLocation> -->
<!-- <OrderLocationId>1</OrderLocationId> -->
<SupplOrderDocument><![CDATA[?]]></SupplOrderDocument>
<!-- <ConsiderPackageUnits>0</ConsiderPackageUnits> -->
<!-- <ConsiderMinOrderQty>0</ConsiderMinOrderQty> -->
<!-- <ExternalCode>PO-2024-0815</ExternalCode> -->
<!-- <EstimatedDeliveryDate>2024-06-15T00:00:00</EstimatedDeliveryDate> -->
<!-- <ShowDetailedReturn>1</ShowDetailedReturn> -->
<!-- <Type>1</Type> -->
<!-- <OrderConsiderationStartDate>?</OrderConsiderationStartDate> -->
</ns1:pixiSupplierOrderCreate>
</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 = [
'AppName' => 'ShopConnector',
// 'UserId' => '12',
'UserName' => 'jdoe',
// 'SupplierId' => '5',
// 'SupplierNr' => 'L001',
// 'DeliveryLocation' => '001',
// 'DeliveryLocationId' => '1',
// 'OrderLocation' => '001',
// 'OrderLocationId' => '1',
'SupplOrderDocument' => '?',
// 'ConsiderPackageUnits' => '0',
// 'ConsiderMinOrderQty' => '0',
// 'ExternalCode' => 'PO-2024-0815',
// 'EstimatedDeliveryDate' => '2024-06-15T00:00:00',
// 'ShowDetailedReturn' => '1',
// 'Type' => '1',
// 'OrderConsiderationStartDate' => '?',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiSupplierOrderCreate', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiSupplierOrderCreate