Postman-Collection
Items Lesen

pixiItemGetByTags

Liefert Artikel, deren zugeordnete Tags einem XML-Tagfilter mit AND-, OR- und NOT-Gruppen entsprechen; Tags werden per ID oder (Teil-)Name bestimmt.

Sucht Artikel anhand der ihnen zugeordneten Tags (Tabelle TagMatch).

1. Filter einlesen

TagFilter ist ein XML-Dokument mit dem Wurzelelement TagFilter und den Gruppen AND, OR und NOT. Jede Gruppe kann beliebig viele TagId- und TagName-Elemente enthalten. Namen werden getrimmt; leere Namen gelten als fehlend.

2. Tags auflösen

Jeder Eintrag wird gegen Tags mit TypeId = 1 aufgelöst:

  • TagId wird mit der Tag-ID verglichen.
  • TagName wird bei PartialTagNameMatch = 0 exakt verglichen, bei PartialTagNameMatch = 1 per LIKE '%name%'. Ein Teilname kann mehrere Tags treffen.

3. Prüfung

Der Aufruf bricht mit einer Status-Ergebnismenge ab und liefert keine Artikel, wenn:

  • ein Eintrag keinem Tag zugeordnet werden kann oder
  • dasselbe Tag mehrfach aufgelöst wird. Das gilt gruppenübergreifend, innerhalb einer Gruppe und wenn ein Tag sowohl per ID als auch per Name angegeben ist.

Dann wird je Filtereintrag eine Zeile geliefert:

  • Fehlerhafte Einträge erhalten Status = ERROR.
  • Gültige Einträge erhalten OK mit Complete match on TagName, Partial match on TagName oder Complete match on TagId.

4. Artikelauswahl

Berücksichtigt werden nur Artikel, denen in TagMatch mindestens ein Tag zugeordnet ist. Ein Artikel wird geliefert, wenn er keines der NOT-Tags hat und mindestens eine der folgenden Bedingungen gilt:

  • es wurden weder AND- noch OR-Tags angegeben (nur NOT oder leerer Filter);
  • er hat alle AND-Tags. Bei StrictANDCondition = 1 darf er zusätzlich keine weiteren Tags haben; seine Tag-Menge muss also genau der AND-Menge entsprechen;
  • er hat mindestens ein OR-Tag.

AND und OR werden mit ODER verknüpft. OR-Tags erweitern das Ergebnis also, statt es einzuschränken.

Das Ergebnis enthält ItemId, ItemNrInt und ItemName. Die Zeilen sind eindeutig und nicht sortiert.

Hinweise

  • Alle Tabellen werden mit NOLOCK gelesen; nicht festgeschriebene Daten sind möglich.
  • Die Umwandlung von TagFilter in XML erfolgt vor der Fehlerbehandlung. Ungültiges XML führt daher zu einem SQL-Fehler (SqlMessage) statt zu einer Statuszeile.
  • Ein nicht numerischer TagId-Wert verursacht einen Konvertierungsfehler innerhalb der Fehlerbehandlung. Ergebnis ist die einzelne Statuszeile Unexpected error occured while parsing the @TagFilter parameter.
  • Das Verhalten bei TagFilter = NULL ist im Code nicht explizit behandelt.
  • Im Filter sind nur Tags mit TypeId = 1 verwendbar.
  • Die strikte AND-Prüfung berücksichtigt alle dem Artikel in TagMatch zugeordneten Tags, unabhängig vom Typ.
  • Nach einer Status-Ergebnismenge liefert die Prozedur den Rückgabewert 1. Statuszeilen und Artikelzeilen kommen nie im selben Aufruf vor; beide erscheinen als SqlRowSet1. Zur Unterscheidung auf eine Spalte Status prüfen.
  • Bei PartialTagNameMatch = 1 kann ein kurzer Name mehrere Tags treffen. Er überschneidet sich dann leicht mit anderen Einträgen und löst Tag used in another operation aus.

Parameter

Parameter Typ Standardwert Beschreibung
TagFilter
Pflicht
varchar(max)
xml
–

XML-Filter mit Wurzel TagFilter und optionalen Gruppen AND, OR und NOT, die jeweils TagId- und/oder TagName-Elemente enthalten.

Beispiel:

<TagFilter>
  <AND>
    <TagId>12</TagId>
    <TagName>Summer</TagName>
  </AND>
  <OR>
    <TagId>15</TagId>
    <TagName>New</TagName>
  </OR>
  <NOT>
    <TagId>20</TagId>
    <TagName>Discontinued</TagName>
  </NOT>
</TagFilter>
PartialTagNameMatch
bit
boolean
0

Steuert, wie TagName-Einträge mit Tag-Namen verglichen werden.

Erlaubte Werte

  • 0 – Exakter Namensvergleich
  • 1 – Name enthält den angegebenen Text (LIKE '%text%')

Beispiel: 0

StrictANDCondition
bit
boolean
0

Steuert, wie streng die AND-Gruppe auf die Tags eines Artikels angewendet wird.

Erlaubte Werte

  • 0 – Artikel muss alle AND-Tags haben; weitere Tags sind erlaubt
  • 1 – Artikel muss genau die AND-Tags und keine weiteren Tags haben

Beispiel: 0

Antwort

Result-Set 1 · Bei Erfolg (Filter vollständig aufgelöst, keine doppelten Tags)

Eindeutige Artikel, die dem Tagfilter entsprechen, unsortiert.

Spalte Typ Beschreibung
ItemId int

Artikelschlüssel (items.ItemKey).

ItemNrInt
Kann leer sein
string

Interne Artikelnummer.

ItemName
Kann leer sein
string

Artikelbezeichnung.

Result-Set 2 · Anstelle der Artikelliste, wenn ein Filtereintrag nicht gefunden wird, ein Tag mehrfach aufgelöst wird oder das Einlesen fehlschlägt

Eine Statuszeile je Filtereintrag mit dem Auflösungsergebnis. Bei einem unerwarteten Fehler eine einzelne Zeile, in der alle Spalten außer Status und StatusMessage NULL sind.

Spalte Typ Beschreibung
Operation
Kann leer sein
varchar(3)
string

Filtergruppe: AND, OR oder NOT.

XMLTagId
Kann leer sein
nvarchar(1024)
string

TagId-Wert wie im XML angegeben.

XMLTagName
Kann leer sein
nvarchar(1024)
string

TagName-Wert wie im XML angegeben (getrimmt).

TagId
Kann leer sein
int

Aufgelöste Tag-ID; NULL, wenn nicht gefunden.

TagName
Kann leer sein
varchar(50)
string

Aufgelöster Tag-Name; NULL, wenn nicht gefunden.

Status varchar(10)
string

OK oder ERROR.

StatusMessage varchar(255)
string

Erläuterung des Status, z. B. Complete match on TagId oder TagId or TagName not found.

Fehlermeldungen

Status Meldung Ursache
ERROR TagId or TagName not found Ein `TagId`- oder `TagName`-Eintrag trifft kein Tag mit `TypeId = 1` oder ein Name ist leer. Vorhandene Tag-IDs oder -Namen verwenden.
ERROR Tag used in another operation Dasselbe Tag wird von mehreren Filtereinträgen aufgelöst: in verschiedenen Gruppen, doppelt in einer Gruppe, per ID und Name oder über überlappende Teilnamen. Jedes Tag darf im gesamten Filter nur einmal vorkommen.
ERROR Insufficient data to identify Error Ein aufgelöster Eintrag konnte beim Aufbau der Statusliste nach einem anderen Fehler nicht eingeordnet werden. Die übrigen Statuszeilen prüfen.
ERROR Unexpected error occured while parsing the @TagFilter parameter Beliebiger Fehler beim XML-Verarbeiten oder Auflösen der Tags, z. B. ein nicht numerischer `TagId`-Wert. Numerische Tag-IDs und eine gültige Struktur 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:pixiItemGetByTags>
      <TagFilter><![CDATA[<TagFilter><AND><TagId>12</TagId><TagName>Summer</TagName></AND><OR><TagId>15</TagId><TagName>New</TagName></OR><NOT><TagId>20</TagId><TagName>Discontinued</TagName></NOT></TagFilter>]]></TagFilter>
      <!-- <PartialTagNameMatch>0</PartialTagNameMatch> -->
      <!-- <StrictANDCondition>0</StrictANDCondition> -->
    </ns1:pixiItemGetByTags>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

Tag · Lesen TagMatch · Lesen items · Lesen
SQL-Objekt:
dbo.pipiItemGetByTags
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben