pixiTagMatchAddForItems
Ordnet Artikeln per XML ein oder mehrere Artikel-Tags zu und liefert je angeforderter Tag-/Artikel-Zuordnung eine Statuszeile.
Legt Einträge in TagMatch an, die Tags vom Typ 1 (Artikel-Tags) mit Artikeln verknüpfen.
Verarbeitung der Eingabe
TagsXMLwird mitOPENXMLüber den Pfad/Tags/Item/TagList/Tag(elementzentriert) gelesen. JedesTag-Element ist eine angeforderte Zuordnung.TagIdwird aus demTag-Element gelesen,ItemIdundItemNrIntaus dem übergeordnetenItem-Element. Die Werte0und Leerstring gelten als nicht angegeben.- Der Artikel wird so ermittelt: Ist
ItemIdangegeben, wird dieser Wert verwendet. Andernfalls wirdItemNrIntinpixi.ItemCode(CodemitCodeTypeId = 2) gesucht, um den Artikelschlüssel zu bestimmen.
Prüfung, in dieser Reihenfolge
- Anforderungen, deren Artikelschlüssel nicht in
itemsexistiert oder deren Tag nicht inTagmitTypeId = 1existiert, erhalten einen Status:TagIdfehlt, oderTagIdist angegeben, aber wederItemIdnochItemNrInt:Error/ Mandatory parameter is missing.ItemNrIntnicht gefunden,ItemIdunbekannt oder Tag unbekannt bzw. kein Artikel-Tag:Error/ One of the provided values is not valid.
- Verbleibende Anforderungen, deren Tag-/Artikel-Paar bereits in
TagMatchexistiert (für ein Tag vom Typ 1):Warning/ Tag is already assigned to that item. - Alle übrigen Anforderungen:
Success/ Tag was successfully assigned to item. Diese Paare werden inTagMatcheingefügt (Duplikate innerhalb des XML nur einmal).
Ergebnis
Eine Zeile je angeforderter Zuordnung, sortiert nach der Position des Tag-Elements im XML, mit Tag-ID, ermittelter Artikel-ID, übergebener Artikelnummer sowie Status/Message.
Hinweise
- Die Prozedur läuft in einer eigenen Transaktion oder setzt einen Savepoint, wenn der Aufrufer bereits eine Transaktion geöffnet hat.
- Zugriffe auf
items,Tag,TagMatchundpixi.ItemCodeerfolgen mitNOLOCK; parallele Aufrufe können daher dasselbe Paar doppelt einfügen oder nicht festgeschriebene Daten sehen. - Bei einem unerwarteten Fehler wird die Transaktion zurückgerollt und der Fehler über
log.InsertError(nicht beigefügt) protokolliert. Der CATCH-Block setzt intern eine "Unexpected error"-Meldung, gibt sie aber nicht als Zeile zurück; der Aufrufer erhält in diesem Fall kein Resultset. Oblog.InsertErrorden Fehler erneut auslöst, ist im Code nicht ersichtlich. ItemIdhat Vorrang vorItemNrInt; sind beide angegeben, wirdItemNrIntnur zurückgegeben.- Passt eine
ItemNrIntauf mehrere Einträge inpixi.ItemCode, kann eine Anforderung mehrere Ergebniszeilen erzeugen. - Tags mit einem
TypeIdungleich 1 werden als ungültig abgewiesen.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
TagsXML
|
varchar(max) xml |
NULL |
XML-Dokument mit den Artikeln und den zuzuordnenden Tags. Jedes Beispiel:
|
Antwort
Result-Set 1 · Bei Erfolg (kein unerwarteter Fehler); eine Zeile je Tag-Element im XML.
Status jeder angeforderten Tag-Zuordnung, sortiert nach Position im XML.
| Spalte | Typ | Beschreibung |
|---|---|---|
TagId
Kann leer sein |
int |
Tag-ID aus dem XML (NULL, wenn fehlend oder 0). |
ItemId
Kann leer sein |
int |
Artikelschlüssel, aus dem XML oder über |
ItemNrInt
Kann leer sein |
varchar(50) string |
Interne Artikelnummer wie im XML übergeben (NULL, wenn leer). |
Status
|
varchar(254) string |
|
Message
|
varchar(2000) string |
Erläuterung zum Status. |
Beispielantwort
<SqlRowSet1>
<row>
<TagId>5</TagId>
<ItemId>1234</ItemId>
<Status>Success</Status>
<Message>Tag was successfully assigned to item</Message>
</row>
<row>
<TagId>7</TagId>
<ItemId>1234</ItemId>
<Status>Warning</Status>
<Message>Tag is already assigned to that item</Message>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | Mandatory parameter is missing | Das `Tag`-Element hat keine `TagId` (oder 0), oder für den Artikel ist weder `ItemId` noch `ItemNrInt` angegeben. Tag und Artikelkennung angeben. |
| Error | One of the provided values is not valid | Die `ItemNrInt` wurde in `pixi.ItemCode` nicht gefunden, die `ItemId` existiert nicht, oder das Tag existiert nicht bzw. ist kein Artikel-Tag (`TypeId` 1). |
| Warning | Tag is already assigned to that item | Das Tag-/Artikel-Paar existiert bereits in `TagMatch`; für diese Anforderung wird nichts eingefügt. |
| Error | Something went wrong, an undefined error occurred | Rückfallstatus für ein undefiniertes Prüfergebnis; unter normalen Umständen nicht zu erwarten. |
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:pixiTagMatchAddForItems>
<!-- <TagsXML><![CDATA[<Tags><Item><ItemId>1234</ItemId><ItemNrInt></ItemNrInt><TagList><Tag><TagId>5</TagId></Tag><Tag><TagId>7</TagId></Tag></TagList></Item><Item><ItemId>0</ItemId><ItemNrInt>ART-10001</ItemNrInt><TagList><Tag><TagId>5</TagId></Tag></TagList></Item></Tags>]]></TagsXML> -->
</ns1:pixiTagMatchAddForItems>
</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:pixiTagMatchAddForItems>
<!-- <TagsXML><![CDATA[<Tags><Item><ItemId>1234</ItemId><ItemNrInt></ItemNrInt><TagList><Tag><TagId>5</TagId></Tag><Tag><TagId>7</TagId></Tag></TagList></Item><Item><ItemId>0</ItemId><ItemNrInt>ART-10001</ItemNrInt><TagList><Tag><TagId>5</TagId></Tag></TagList></Item></Tags>]]></TagsXML> -->
</ns1:pixiTagMatchAddForItems>
</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 = [
// 'TagsXML' => '<Tags><Item><ItemId>1234</ItemId><ItemNrInt></ItemNrInt><TagList><Tag><TagId>5</TagId></Tag><Tag><TagId>7</TagId></Tag></TagList></Item><Item><ItemId>0</ItemId><ItemNrInt>ART-10001</ItemNrInt><TagList><Tag><TagId>5</TagId></Tag></TagList></Item></Tags>',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiTagMatchAddForItems', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiTagMatchAddForItems