pixiTagMatchDeleteForOrders
Entfernt Tag-Zuordnungen (TagMatch) von Aufträgen für die per XML übergebenen Tag/Auftrag-Paare und liefert pro Paar eine Statuszeile.
Löscht die Zuordnung von Auftrags-Tags zu Aufträgen. Die Paare werden in TagsXML übergeben; jedes Tag-Element unterhalb von /Tags/Order/TagList ist ein Eintrag.
Ablauf:
- Das XML wird elementbasiert gelesen. Für jedes
TagwirdTagIdaus demTag-Element,OrderIdundOrderNrExternalaus dem übergeordnetenOrder-Element gelesen. EineTagIdoderOrderIdvon0sowie eine leereOrderNrExternalgelten als nicht angegeben. - Der Auftrag wird in
OrderHeaderermittelt: überOrderNr=OrderIdund überOrderNrExternal. Der überOrderIdgefundene OrderHeaderKey hat Vorrang; wird dort keiner gefunden, wird der überOrderNrExternalgefundene verwendet. Ist nurOrderNrExternalangegeben, wird alsOrderIddieOrderNrdes gefundenen Auftrags zurückgegeben. - Jeder Eintrag wird geprüft:
- keine
TagIdoder wederOrderIdnochOrderNrExternal→ErrorMandatory parameter is missing - Auftrag nicht gefunden oder Tag nicht als Auftrags-Tag (
Tag.TypeId = 2) vorhanden →ErrorOne of the provided values is not valid
- keine
- Für gültige Einträge wird eine bestehende
TagMatch-Zeile mit diesem Tag und Auftragskopf gesucht. Existiert sie, erhält der EintragSuccessTag was successfully removed from order und dieTagMatch-Zeile wird gelöscht. Existiert sie nicht, erhält der EintragWarningTag is not assigned to that order. - Pro Eintrag wird eine Ergebniszeile zurückgegeben, sortiert in der Reihenfolge der Einträge im XML.
Hinweise
- Berücksichtigt werden nur Tags mit
TypeId = 2(Auftrags-Tags). - Der Aufruf läuft in einer eigenen Transaktion bzw. in einem Savepoint, wenn bereits eine Transaktion offen ist.
- Bei einem unerwarteten Fehler (z. B. ungültiges XML) wird die Transaktion zurückgerollt, der Fehler über
log.InsertError(nicht beigefügt) protokolliert und keine Ergebnismenge zurückgegeben. Der TextUnexpected error: "…"wird intern gebildet, aber nicht ausgegeben. - Lesezugriffe auf
OrderHeader,TagundTagMatcherfolgen mitNOLOCK; das Löschen mitROWLOCK. - Teilen sich mehrere Aufträge dieselbe
OrderNrExternal, kann ein Eintrag mehrere Ergebniszeilen liefern und der Tag wird von allen passenden Aufträgen entfernt. - Wird dasselbe Tag/Auftrag-Paar doppelt übergeben, erhalten beide Einträge
Success; dieTagMatch-Zeile wird einmal gelöscht. - Der Kopfkommentar der Prozedur lautet Create TagMatch for Order, der Code entfernt jedoch ausschließlich Zuordnungen.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
TagsXML
|
varchar(max) xml |
NULL |
XML-Dokument mit den Aufträgen und den zu entfernenden Tags. Jedes Beispiel:
|
Antwort
Result-Set 1 · Bei erfolgreicher Ausführung (nicht bei einem unerwarteten Fehler)
Eine Statuszeile pro Tag-Eintrag im XML, sortiert nach der Position im XML.
| Spalte | Typ | Beschreibung |
|---|---|---|
TagId
Kann leer sein |
int |
Tag-ID aus dem XML (NULL, wenn fehlend oder 0). |
OrderId
Kann leer sein |
int |
Auftragsnummer ( |
OrderNrExternal
Kann leer sein |
varchar(50) string |
Externe Auftragsnummer aus dem XML. |
OrderHeaderKey
Kann leer sein |
int |
Interner Schlüssel des ermittelten Auftrags; NULL, wenn der Auftrag nicht gefunden wurde. |
Status
|
varchar(254) string |
|
Message
|
varchar(2000) string |
Ergebnismeldung zum Eintrag. |
Beispielantwort
<SqlRowSet1>
<row>
<TagId>7</TagId>
<OrderId>104512</OrderId>
<OrderNrExternal>SHOP-2024-0815</OrderNrExternal>
<OrderHeaderKey>98765</OrderHeaderKey>
<Status>Success</Status>
<Message>Tag was successfully removed from order</Message>
</row>
<row>
<TagId>12</TagId>
<OrderId>104512</OrderId>
<OrderNrExternal>SHOP-2024-0815</OrderNrExternal>
<OrderHeaderKey>98765</OrderHeaderKey>
<Status>Warning</Status>
<Message>Tag is not assigned to that order</Message>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | Mandatory parameter is missing | Der Eintrag hat keine `TagId` oder weder `OrderId` noch `OrderNrExternal` (0 und leere Zeichenketten gelten als fehlend). |
| Error | One of the provided values is not valid | Der Auftrag wird über `OrderId`/`OrderNrExternal` nicht gefunden oder die `TagId` existiert nicht als Auftrags-Tag (`TypeId = 2`). |
| Warning | Tag is not assigned to that order | Tag und Auftrag sind gültig, es besteht aber keine Zuordnung, die entfernt werden könnte. |
| Error | Something went wrong, an undefined error occurred | Ersatzmeldung für einen Eintrag, der die Prüfung nicht besteht, ohne einer konkreten Regel zu entsprechen. |
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:pixiTagMatchDeleteForOrders>
<!-- <TagsXML><![CDATA[<Tags><Order><OrderId>104512</OrderId><OrderNrExternal>SHOP-2024-0815</OrderNrExternal><TagList><Tag><TagId>7</TagId></Tag><Tag><TagId>12</TagId></Tag></TagList></Order></Tags>]]></TagsXML> -->
</ns1:pixiTagMatchDeleteForOrders>
</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:pixiTagMatchDeleteForOrders>
<!-- <TagsXML><![CDATA[<Tags><Order><OrderId>104512</OrderId><OrderNrExternal>SHOP-2024-0815</OrderNrExternal><TagList><Tag><TagId>7</TagId></Tag><Tag><TagId>12</TagId></Tag></TagList></Order></Tags>]]></TagsXML> -->
</ns1:pixiTagMatchDeleteForOrders>
</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><Order><OrderId>104512</OrderId><OrderNrExternal>SHOP-2024-0815</OrderNrExternal><TagList><Tag><TagId>7</TagId></Tag><Tag><TagId>12</TagId></Tag></TagList></Order></Tags>',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiTagMatchDeleteForOrders', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiTagMatchDeleteForOrders