pixiSetItemInfo
Aktualisiert Stammdaten eines oder mehrerer Artikel (Name, Beschreibung, Kategorie, Preis, MwSt-Stufe, Maße, Zolldaten, Hersteller, interne Artikelnummer).
Ändert Artikelstammdaten in items und die interne Artikelnummer in ItemCode. Zwei Eingabewege sind möglich, einzeln oder kombiniert:
ItemKey+ItemDescription: setzt die Beschreibung eines einzelnen Artikels. Eine fehlende oder leereItemDescriptionentfernt die Beschreibung.ItemInfoXML: beliebig vieleItem-Elemente unterhalb von/ItemInfo(elementbasiert). Jeder Eintrag bestimmt den Artikel überItemKey; fehltItemKeyoder ist er0, wird der Artikel überItemNrInt(Artikelcode vom Typ 2) gesucht.
Ablauf
- Leere Elemente gelten als nicht angegeben.
- Einträge, deren
Enabledkeine Ganzzahl oder derenPriceVKnicht numerisch ist, werden verworfen und mit einer Statuszeile gemeldet. - Feldzuordnung (nicht angegebene Felder behalten ihren aktuellen Wert, außer
ItemDescription):ItemName→ItemName,PicLinkSmall/PicLinkLarge,CustomsTariffNumber,CustomsCountryOfOrigin,CustomsTariffText→ gleichnamige Spalten,Manufacturer→Artist.ItemDescription→ItemDescription, wird immer geschrieben;NULL, wenn der Eintrag keine enthält.Enabled→ Bit (0= deaktiviert, jede andere Zahl = aktiviert).PriceVK→Price(money, Dezimalpunkt).VATLevel:HIGH,LOW,ZERO→MwStSatz1, 2, 3; andere Werte werden ignoriert.Weight→ Ganzzahldecimal(10,0);Heigth,Width,Length→ Ganzzahlendecimal(4,0); nicht konvertierbare Werte werden ignoriert.Category: wird über den Text inTontrArtengesucht. Unbekannte Kategorien werden mit dem nächsten freien Hexadezimal-Code angelegt. Der Artikel erhältCategoryIdundConfigTypedieser Kategorie.InternalItemNumber: Artikelcode vom Typ 3 inItemCode; wird angelegt, wenn der Artikel keinen hat, sonst bei Abweichung geändert.
- Ein Artikel wird nur aktualisiert, wenn er in
itemsexistiert und der Eintrag mindestens ein Feld außerItemDescription/InternalItemNumberenthält oder es sich um den Artikel aus dem ParameterItemKeyhandelt. - Kommt derselbe Artikel in mehreren Einträgen mit unterschiedlichen Daten vor, wird er gar nicht aktualisiert.
- Aktualisierte Artikel erhalten
UpdateDate= aktuelle Zeit undUpdateEmp=API user SetItemInfo.
Ergebnis
Wenn mindestens ein Artikel für die Aktualisierung in Frage kam und kein SQL-Fehler auftrat, wird pro Eintrag eine Zeile mit Status = Updated oder dem Grund für das Überspringen geliefert. Andernfalls wird eine einzelne Zeile mit Status (404 oder 500) und ErrorMsg geliefert. Die Zeilen sind nicht sortiert.
Hinweise
- Beschreibung wird überschrieben: Jeder aktualisierte Artikel erhält
ItemDescriptionaus seinem Eintrag. Ein XML-Eintrag ohneItemDescriptionlöscht daher die vorhandene Beschreibung. Soll sie erhalten bleiben, muss sie immer mitgesendet werden. - Wird derselbe Artikel über den Parameter
ItemKeyund im XML übergeben, entstehen in der Regel zwei unterschiedliche Einträge; der Artikel wird dann ohne Änderung alsDuplicated entries found in input parametersgemeldet. - Ein Eintrag, der nur
InternalItemNumber(und/oderItemDescription) enthält, wird nicht verarbeitet und alsNo item/s found or have no data for updategemeldet, außer es handelt sich um den Artikel aus dem ParameterItemKey. - Neue Kategorien in
TontrArtenwerden vor und unabhängig von der Artikelaktualisierung angelegt, auch wenn der Artikel nicht existiert, der Eintrag doppelt ist oder die Aktualisierung später fehlschlägt. - Es gibt keine explizite Transaktion: Die Änderungen an
ItemCodeund das Update vonitemssind getrennte Anweisungen in einemTRY-Block. Schlägt eine spätere Anweisung fehl, bleiben frühere Änderungen bestehen und der Aufruf liefert500statt der Zeilen pro Artikel. - Während des Updates von
itemswirdCONTEXT_INFOauf0x11199gesetzt, um die Artikel-Trigger zu unterdrücken; danach wird der vorherige Wert wiederhergestellt. - Das Element für die Höhe heißt im XML
Heigth. Weightund die Maße werden auf Ganzzahlen gerundet; Maße über 9999 werden ignoriert.- Fehlerhaftes XML oder ein Konvertierungsproblem vor dem
TRY-Block führt zu einem SQL-Fehler (SqlMessage) statt einer Statuszeile. Der Code prüft nicht explizit, obItemInfoXMLleer ist. - Kommt kein Eintrag für ein Update in Frage, wird nur
404geliefert, auch wenn Einträge wegen nicht numerischemEnabled/PriceVKverworfen wurden. - Lesezugriffe auf
items,ItemCode,TontrArtenundNumberserfolgen mitNOLOCK.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
ItemKey
|
int | NULL |
Schlüssel eines einzelnen Artikels, dessen Beschreibung aus Beispiel: |
ItemDescription
|
varchar(4000) string |
NULL |
Neue Beschreibung für den Artikel aus Beispiel: |
ItemInfoXML
|
varchar(max) xml |
NULL |
XML-Dokument mit einem Beispiel:
|
Antwort
Result-Set 1 · Wenn mindestens ein Artikel für das Update in Frage kam und kein SQL-Fehler auftrat (Status 200)
Eine Zeile pro Eingabeeintrag mit dem Verarbeitungsergebnis.
| Spalte | Typ | Beschreibung |
|---|---|---|
ItemKey
Kann leer sein |
int |
Artikelschlüssel des Eintrags; leer, wenn er nicht ermittelt werden konnte. |
Status
|
varchar(255) string |
|
ItemNrInt
Kann leer sein |
varchar(50) string |
Artikelnummer aus der Eingabe; nur bei übersprungenen Einträgen gefüllt. |
Result-Set 2 · Anstelle der ersten Ergebnismenge, wenn kein Artikel in Frage kam (404) oder beim Update ein SQL-Fehler auftrat (500)
Einzelne Statuszeile.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(3) string |
|
ErrorMsg
Kann leer sein |
varchar(2000) string |
Fehlertext. |
Beispielantwort
<SqlRowSet1>
<row>
<ItemKey>12345</ItemKey>
<Status>Updated</Status>
</row>
<row>
<Status>No item/s found or have no data for update</Status>
<ItemNrInt>ART-9999</ItemNrInt>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| 404 | No item/s found. | Kein Eintrag verweist auf einen existierenden Artikel mit zu ändernden Daten (falscher `ItemKey`/`ItemNrInt`, nur `InternalItemNumber` angegeben oder alle Einträge verworfen). Schlüssel prüfen und mindestens ein änderbares Feld senden. |
| 500 | {ERROR_MESSAGE()} | Beim Schreiben von `ItemCode` oder `items` trat ein SQL-Fehler auf (z. B. Wert zu lang, Constraint-Verletzung). Vor dem Fehler gemachte Änderungen bleiben bestehen. |
| 200 | Value for Enable or Price is not numeric | Zeile pro Eintrag: `Enabled` ist keine Ganzzahl oder `PriceVK` nicht numerisch (Dezimalpunkt verwenden). Der Eintrag wird übersprungen. |
| 200 | No item/s found or have no data for update | Zeile pro Eintrag: Der Artikel existiert nicht, `ItemNrInt` konnte nicht aufgelöst werden oder der Eintrag enthält kein änderbares Feld. |
| 200 | Duplicated entries found in input parameters | Zeile pro Artikel: Derselbe Artikel kommt in mehreren Einträgen mit unterschiedlichen Daten vor (auch in Kombination mit dem Parameter `ItemKey`). Der Artikel wird nicht aktualisiert; jeden Artikel nur einmal senden. |
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:pixiSetItemInfo>
<!-- <ItemKey>12345</ItemKey> -->
<!-- <ItemDescription>Robust stainless steel water bottle, 750 ml</ItemDescription> -->
<!-- <ItemInfoXML><![CDATA[<ItemInfo><Item><ItemKey>12345</ItemKey><ItemNrInt>ART-1001</ItemNrInt><ItemName>Water bottle steel 750 ml</ItemName><ItemDescription>Robust stainless steel water bottle, 750 ml</ItemDescription><InternalItemNumber>INT-1001</InternalItemNumber><Category>Outdoor</Category><Enabled>1</Enabled><PriceVK>19.90</PriceVK><PicLinkSmall>https://shop.example.com/img/1001_s.jpg</PicLinkSmall><PicLinkLarge>https://shop.example.com/img/1001_l.jpg</PicLinkLarge><VATLevel>HIGH</VATLevel><Weight>450</Weight><Heigth>26</Heigth><Width>8</Width><Length>8</Length><CustomsTariffNumber>73239300</CustomsTariffNumber><CustomsCountryOfOrigin>DE</CustomsCountryOfOrigin><CustomsTariffText>Table and kitchen articles of stainless steel</CustomsTariffText><Manufacturer>Example GmbH</Manufacturer></Item><Item><ItemNrInt>ART-1002</ItemNrInt><ItemDescription>Lid for water bottle</ItemDescription><PriceVK>4.50</PriceVK></Item></ItemInfo>]]></ItemInfoXML> -->
</ns1:pixiSetItemInfo>
</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:pixiSetItemInfo>
<!-- <ItemKey>12345</ItemKey> -->
<!-- <ItemDescription>Robust stainless steel water bottle, 750 ml</ItemDescription> -->
<!-- <ItemInfoXML><![CDATA[<ItemInfo><Item><ItemKey>12345</ItemKey><ItemNrInt>ART-1001</ItemNrInt><ItemName>Water bottle steel 750 ml</ItemName><ItemDescription>Robust stainless steel water bottle, 750 ml</ItemDescription><InternalItemNumber>INT-1001</InternalItemNumber><Category>Outdoor</Category><Enabled>1</Enabled><PriceVK>19.90</PriceVK><PicLinkSmall>https://shop.example.com/img/1001_s.jpg</PicLinkSmall><PicLinkLarge>https://shop.example.com/img/1001_l.jpg</PicLinkLarge><VATLevel>HIGH</VATLevel><Weight>450</Weight><Heigth>26</Heigth><Width>8</Width><Length>8</Length><CustomsTariffNumber>73239300</CustomsTariffNumber><CustomsCountryOfOrigin>DE</CustomsCountryOfOrigin><CustomsTariffText>Table and kitchen articles of stainless steel</CustomsTariffText><Manufacturer>Example GmbH</Manufacturer></Item><Item><ItemNrInt>ART-1002</ItemNrInt><ItemDescription>Lid for water bottle</ItemDescription><PriceVK>4.50</PriceVK></Item></ItemInfo>]]></ItemInfoXML> -->
</ns1:pixiSetItemInfo>
</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' => '12345',
// 'ItemDescription' => 'Robust stainless steel water bottle, 750 ml',
// 'ItemInfoXML' => '<ItemInfo><Item><ItemKey>12345</ItemKey><ItemNrInt>ART-1001</ItemNrInt><ItemName>Water bottle steel 750 ml</ItemName><ItemDescription>Robust stainless steel water bottle, 750 ml</ItemDescription><InternalItemNumber>INT-1001</InternalItemNumber><Category>Outdoor</Category><Enabled>1</Enabled><PriceVK>19.90</PriceVK><PicLinkSmall>https://shop.example.com/img/1001_s.jpg</PicLinkSmall><PicLinkLarge>https://shop.example.com/img/1001_l.jpg</PicLinkLarge><VATLevel>HIGH</VATLevel><Weight>450</Weight><Heigth>26</Heigth><Width>8</Width><Length>8</Length><CustomsTariffNumber>73239300</CustomsTariffNumber><CustomsCountryOfOrigin>DE</CustomsCountryOfOrigin><CustomsTariffText>Table and kitchen articles of stainless steel</CustomsTariffText><Manufacturer>Example GmbH</Manufacturer></Item><Item><ItemNrInt>ART-1002</ItemNrInt><ItemDescription>Lid for water bottle</ItemDescription><PriceVK>4.50</PriceVK></Item></ItemInfo>',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiSetItemInfo', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiSetItemInfo