Zeilen einer Liste anreichern und filtern
Ein Beleg bringt seine Positionen mit, aber jede Position nennt nur den Artikelcode – nicht die Eigenschaften des Artikels. Soll das Zielsystem nur einen Teil der Positionen erhalten, fehlt genau der Wert, nach dem entschieden werden müsste. Eine Zusatzdaten-Abfrage auf Ebene Zeilen einer Liste schließt diese Lücke: Sie lädt zu jeder Zeile ihren Wert nach, und der Elementfilter der Zuordnung greift anschließend darauf zu.
Als durchgehendes Beispiel dient die Route Lieferung-Export Logistik-Partner: Der Logistik-Partner übernimmt für Cambira nur den Versand der Warengruppe Elektrowerkzeuge, die Lieferung enthält aber gemischte Positionen. Die Warengruppe steht am Artikel, nicht an der Position – eine Abfrage auf Zeilenebene lädt sie zu jeder Position nach, danach filtert die Zuordnung die Liste darauf.
Was Sie brauchen
- Eine Route, deren Datensätze eine Liste enthalten – im Beispiel die Positionen der Lieferung unter
OriginalPayload.DocumentLines. - Referenzdaten: Laden Sie über Nach Schlüssel laden eine echte Lieferung. Ohne sie lässt sich das Ergebnis später nicht abrufen und prüfen, und die Feldauswahl der Zuordnung bleibt leer.
- Die einfache Anreicherung sollte Ihnen vertraut sein – sie ist in Daten mit Zusatzdaten anreichern beschrieben. Diese Anleitung setzt darauf auf.
Die Abfrage legen Sie im Reiter Quelldaten an, den Filter im Reiter Zuordnung. Änderungen werden automatisch gespeichert – es gibt keine separate Speichern-Schaltfläche. Sie landen im Entwurf und wirken erst mit dessen Aktivierung.
Die Abfrage auf die Zeilen richten
Legen Sie im Reiter Quelldaten über Zusatzdaten hinzufügen eine Abfrage an und stellen Sie Ebene auf Zeilen einer Liste. Damit erscheinen drei zusätzliche Felder; andere entfallen: Maximale Zeilen, weil die Zeilenzahl sich aus der Liste ergibt, Unterobjekt samt Verknüpfungsfeld (Unterobjekt), weil Xchange auf Zeilenebene gebündelt aus dem Hauptobjekt allein liest, und Ergebnistyp samt Spaltenname, weil zu einer Zeile ein Datensatz gehört und keine Liste.
- Bezeichnung – im Beispiel
Warengruppe. Unter diesem Namen erreichen Sie den Wert später an der Zeile. - Zeilenliste – die Liste, deren Zeilen abgefragt werden:
OriginalPayload.DocumentLines[*]. Die Auswahl bietet die Listen des Quellschemas an, in derselben Schreibweise wie die Quell-Liste der Zuordnung; ist noch kein Schema geladen, geben Sie den Pfad selbst ein. - Hauptobjekt – die Objektart, aus der gelesen wird: die Artikel (
Items). - Felder – die zu lesenden Felder, hier die Warengruppe (
ItemsGroupCode).
Die Verknüpfung angeben
Zwei Felder sagen Xchange, welcher Artikel zu welcher Position gehört:
- Verknüpfungsfeld (Zeile) – das Feld der Position, das den Artikel benennt:
ItemCode. - Verknüpfungsfeld (Hauptobjekt) – das Feld des Artikels, auf das die Position verweist: ebenfalls
ItemCode.
Sobald Zeilenliste und Hauptobjekt stehen, sind beide vorbelegt: rechts der Schlüssel des Hauptobjekts, links das gleichnamige Feld der Zeile, sofern es eines gibt. Heißen die beiden Felder unterschiedlich, stellen Sie die linke Seite um.
Das Verknüpfungsfeld im Hauptobjekt muss dessen Schlüssel sein. Der Grund liegt darin, wie Xchange liest: Statt je Position einzeln abzurufen, sammelt es die Artikelcodes aller Positionen und lädt sie in einer gebündelten Abfrage – eine Lieferung mit vierzig Positionen kostet also nicht vierzig Abrufe. Ein anderes Feld als der Schlüssel lässt sich so nicht bündeln, und die Prüfliste meldet es.
Bedingungen wirken hier wie auf Datensatzebene, sie grenzen die abgerufenen Artikel zusätzlich ein. Die Verknüpfung selbst gehört nicht in eine Bedingung – dafür sind die beiden Felder oben da.
Ergebnis abrufen und prüfen
Zusatzdaten abrufen führt die Abfrage gegen die geladenen Referenzdaten aus. Prüfen Sie das Ergebnis in der Datenvorschau: Die Warengruppe steht jetzt an jeder Position, nicht am Beleg – jede Zeile trägt ihren eigenen Wert. Steht an einer Position kein Wert, gibt es zu ihrem Artikelcode keinen Artikel; prüfen Sie dann das Verknüpfungsfeld (Zeile).
Die Liste danach filtern
Wechseln Sie in den Reiter Zuordnung und öffnen Sie die Listenzuordnung, welche die Positionen füllt. Ihre Quell-Liste ist dieselbe Liste, auf die sich die Abfrage bezieht (OriginalPayload.DocumentLines[*]).
Öffnen Sie die Listeneinstellungen und dort den Reiter Filter:
- Bedingung hinzufügen.
- Feld – wählen Sie in der Feldauswahl unter Elementfelder die nachgeladene Warengruppe. Sie steht dort neben den Feldern, welche die Position selbst mitbringt; dass sie erst nachgeladen wurde, spielt für den Filter keine Rolle.
- Operator – ist gleich.
- Wert – die Warengruppe der Elektrowerkzeuge, im Beispiel
100.
Nur Positionen, auf die der Filter zutrifft, erscheinen in der Zielliste. Mehrere Bedingungen verknüpfen Sie über die Schaltfläche UND / ODER.
Wenn die Liste in einer Liste liegt
Die Zeilenliste darf selbst in einer Liste liegen – etwa die Chargen einer Position unter OriginalPayload.DocumentLines[*].BatchNumbers[*]. Drei Ebenen sind möglich: Hauptdatensatz, Liste, Liste innerhalb dieser Liste.
In der Zuordnung einer solchen Liste führt die Feldauswahl dann drei Gruppen: Elementfelder (die Charge selbst), Übergeordnete Zeile (die Position, in der sie liegt) und Hauptdatensatz (die Lieferung). So erreicht eine Chargenzeile den Artikelcode ihrer Position, ohne dass er an der Charge steht.
Aktivieren
Abfrage und Filter greifen im laufenden Betrieb erst, wenn Sie den Entwurf aktivieren. Den vollständigen Ablauf beschreibt die Anleitung Konfigurationsänderungen aktivieren.
Wie es weitergeht
Prüfen Sie vor der Aktivierung im Testbereich, ob die Route die erwarteten Positionen überträgt – der Filter wirkt dort genauso wie im Betrieb.