pixiCreateItemSupplier
Legt eine neue Lieferantenzuordnung (AddItems-Datensatz) für einen bestehenden Artikel an, optional mit eigener EAN und als bevorzugter Lieferant.
Ordnet einem Artikel einen Lieferanten zu, indem ein Datensatz in AddItems eingefügt wird. Der Aufruf liefert genau eine Statuszeile (Status, Message).
Ablauf:
- Lieferantenprüfung:
SupplNrist Pflicht; ein Leerstring gilt als nicht angegeben. Der Lieferant muss inSuppliersexistieren. - Artikelidentifikation: Der Artikel wird über
pixi.ItemCodeermittelt, und zwar anhand vonItemKey,EAN(Barcode, Codetyp 1) und/oderItemNrInt(Shop-Artikelnummer, Codetyp 2). Mindestens ein Wert ist erforderlich. Werden mehrere Werte angegeben, müssen alle auf denselben Artikel zeigen. Jeder angegebene Wert muss gefunden werden. - Prüfung NewEAN: Wird
NewEANangegeben, darf dieser Code bei keinem anderen Artikel unter einem scanbaren Codetyp existieren. - EAN des neuen Datensatzes: Gespeichert wird
NewEAN. Fehlt dieser Wert, wirdEANverwendet. Fehlen beide, wird dieEANUPCdes Artikels ausitemsübernommen. Aus dem Artikel übernommen werden außerdemItemNrInt(falls nicht angegeben),IntLinkNR1,IntLinkNRund der VerkaufspreisPrice. - Dublettenprüfung: Existiert für den Artikel in
pixi.ItemCodebereits ein Barcode-Eintrag mit dieser EAN für diesen Lieferanten, bricht der Aufruf mit einem Fehler ab. - Bevorzugter Lieferant: Bei
PreferredSupplier= 1 wird zuerst der bisherige bevorzugte Lieferantendatensatz des Artikels (ein Datensatz,TOP (1)) aufPreferredSupplier= 0 gesetzt. - Einfügen: Ein neuer
AddItems-Datensatz wird angelegt. Er erhältSupplPrice,ItemNrSuppl,SupplDeliveryTime(=ItemDeliveryTime),MinOrderQty,OrderOnlyPackageUnits(=OnlyPU),Active(=IsActive) undPreferredSupplier.AutoPricewird auf 0 gesetzt,CreateDateauf den aktuellen Zeitpunkt.
Bei Erfolg lautet der Status New record inserted. Die Meldung enthält den gespeicherten Lieferantenpreis, die Lieferantenartikelnummer und die EAN.
Hinweise
- Alle Fehler werden als normale Zeile mit
Status=Errorzurückgegeben; es wird keinRAISERRORverwendet. - Das Zurücksetzen des alten bevorzugten Lieferanten und das Einfügen laufen in einer Transaktion. Läuft bereits eine Transaktion, wird stattdessen ein Savepoint gesetzt.
- Bei einer Ausnahme wird die Transaktion zurückgerollt und der Fehler über
log.InsertErrorprotokolliert. Der SQL-Fehlertext wird anschließend inMessagegeliefert. - Die Abfragen verwenden
NOLOCK; nicht festgeschriebene Daten können gelesen werden. - Die Dublettenprüfung liest
pixi.ItemCode, nichtAddItems. Obpixi.ItemCodemitAddItemssynchron gehalten wird (z. B. per Trigger), ist aus diesem Code nicht ersichtlich. - Lässt sich keine EAN ermitteln (kein
NewEAN, keinEAN, Artikel ohneEANUPC), greift die Dublettenprüfung nie. Der Datensatz wird dann ohne EAN angelegt. NewEANsetzt nur die EAN des neuen Lieferantendatensatzes. Die Haupt-EAN des Artikels initemsbleibt unverändert.ItemNrIntwird nicht von Leerstring auf NULL normalisiert. Ein leer übergebenesItemNrIntzusammen mit einem anderen Identifikator führt zu einer leerenItemNrIntim neuen Datensatz.ItemDeliveryTimewird bei explizit übergebenem NULL nicht durch 0 ersetzt.- Es wird nur ein bisher bevorzugter Datensatz (
TOP (1)) zurückgesetzt. Weitere als bevorzugt markierte Datensätze bleiben unverändert.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
ItemKey
|
int | NULL |
Artikelschlüssel zur Identifikation des Artikels. 0 gilt als nicht angegeben. Beispiel: |
ItemNrInt
|
varchar(50) string |
NULL |
Shop-Artikelnummer zur Identifikation des Artikels (Codetyp 2). Fehlt sie, wird die Beispiel: |
EAN
|
varchar(13) string |
NULL |
Barcode zur Identifikation des Artikels (Codetyp 1). Er wird auch als EAN des neuen Datensatzes verwendet, wenn Beispiel: |
NewEAN
|
varchar(13) string |
NULL |
EAN, die im neuen Lieferantendatensatz gespeichert wird. Sie darf nicht als scanbarer Code bei einem anderen Artikel existieren. Beispiel: |
SupplNr
Pflicht
|
varchar(4) string |
– |
Lieferantennummer (Pflicht); muss in Beispiel: |
SupplPrice
|
money decimal |
0 |
Einkaufspreis beim Lieferanten; NULL wird zu 0. Beispiel: |
ItemNrSuppl
|
varchar(50) string |
NULL |
Artikelnummer des Lieferanten; ein Leerstring wird als NULL gespeichert. Beispiel: |
PreferredSupplier
|
bit boolean |
0 |
Markiert den neuen Datensatz als bevorzugten Lieferanten; der bisherige bevorzugte Datensatz wird zuvor zurückgesetzt. Erlaubte Werte
Beispiel: |
MinOrderQty
|
int | 0 |
Mindestbestellmenge; NULL wird zu 0. Beispiel: |
OnlyPU
|
bit boolean |
0 |
Nur in Verpackungseinheiten bestellen (gespeichert in Erlaubte Werte
Beispiel: |
ItemDeliveryTime
|
int | 0 |
Lieferzeit des Lieferanten (gespeichert in Beispiel: |
IsActive
|
bit boolean |
1 |
Gibt an, ob der Lieferantendatensatz aktiv ist; NULL wird zu 1. Erlaubte Werte
Beispiel: |
Antwort
Result-Set 1 · Immer (genau eine Zeile: Erfolg oder Fehler)
Statuszeile des Aufrufs.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(19) string |
|
Message
Kann leer sein |
nvarchar(4000) string |
Bei Erfolg gespeicherter Lieferantenpreis, Lieferantenartikelnummer und EAN; sonst der Fehlertext. |
Beispielantwort
<SqlRowSet1>
<row>
<Status>New record inserted</Status>
<Message>SupplPrice:12.50, ItemNrSuppl:SUP-4711, EAN:4006381333931</Message>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | Parameter @SupplNr is mandatory. | `SupplNr` fehlt oder ist leer. |
| Error | Supplier with SupplNr:{SupplNr} does not exist. | In `Suppliers` existiert kein Lieferant mit dieser Nummer. |
| Error | Please specify at least one parameter. | Weder `ItemKey` noch `EAN` noch `ItemNrInt` wurde angegeben. |
| Error | No items found with given parameters. ItemKey: {ItemKey} not found. | Für den angegebenen `ItemKey` gibt es keinen Eintrag in `pixi.ItemCode`. |
| Error | No items found with given parameters. EAN: {EAN} not found. | Die angegebene `EAN` ist bei keinem Artikel als Barcode (Codetyp 1) hinterlegt. |
| Error | No items found with given parameters. ItemNrInt: {ItemNrInt} not found. | Die angegebene `ItemNrInt` ist bei keinem Artikel als Shop-Artikelnummer (Codetyp 2) hinterlegt. |
| Error | More than one item was identified with the given parameters. | Die angegebenen Identifikatoren gehören zu verschiedenen Artikeln. Es sind Identifikatoren desselben Artikels zu übergeben. |
| Error | The @NewEAN code {NewEAN} already exists on another scannable item. | `NewEAN` ist bereits als scanbarer Code bei einem anderen Artikel vergeben. |
| Error | Item with EANUPC: {EAN} and Supplier number "{SupplNr}" already exists. | Für den Artikel ist diese EAN bei diesem Lieferanten bereits hinterlegt. |
| Error | {ERROR_MESSAGE()} | Beim Aktualisieren oder Einfügen in `AddItems` ist ein SQL-Fehler aufgetreten (z. B. Constraint-Verletzung). 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:pixiCreateItemSupplier>
<!-- <ItemKey>10452</ItemKey> -->
<!-- <ItemNrInt>SHOP-10452</ItemNrInt> -->
<!-- <EAN>4006381333931</EAN> -->
<!-- <NewEAN>4006381333948</NewEAN> -->
<SupplNr>L001</SupplNr>
<!-- <SupplPrice>12.50</SupplPrice> -->
<!-- <ItemNrSuppl>SUP-4711</ItemNrSuppl> -->
<!-- <PreferredSupplier>1</PreferredSupplier> -->
<!-- <MinOrderQty>10</MinOrderQty> -->
<!-- <OnlyPU>0</OnlyPU> -->
<!-- <ItemDeliveryTime>5</ItemDeliveryTime> -->
<!-- <IsActive>1</IsActive> -->
</ns1:pixiCreateItemSupplier>
</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:pixiCreateItemSupplier>
<!-- <ItemKey>10452</ItemKey> -->
<!-- <ItemNrInt>SHOP-10452</ItemNrInt> -->
<!-- <EAN>4006381333931</EAN> -->
<!-- <NewEAN>4006381333948</NewEAN> -->
<SupplNr>L001</SupplNr>
<!-- <SupplPrice>12.50</SupplPrice> -->
<!-- <ItemNrSuppl>SUP-4711</ItemNrSuppl> -->
<!-- <PreferredSupplier>1</PreferredSupplier> -->
<!-- <MinOrderQty>10</MinOrderQty> -->
<!-- <OnlyPU>0</OnlyPU> -->
<!-- <ItemDeliveryTime>5</ItemDeliveryTime> -->
<!-- <IsActive>1</IsActive> -->
</ns1:pixiCreateItemSupplier>
</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 = [
// 'ItemKey' => '10452',
// 'ItemNrInt' => 'SHOP-10452',
// 'EAN' => '4006381333931',
// 'NewEAN' => '4006381333948',
'SupplNr' => 'L001',
// 'SupplPrice' => '12.50',
// 'ItemNrSuppl' => 'SUP-4711',
// 'PreferredSupplier' => '1',
// 'MinOrderQty' => '10',
// 'OnlyPU' => '0',
// 'ItemDeliveryTime' => '5',
// 'IsActive' => '1',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiCreateItemSupplier', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiCreateItemSupplier