SearchTask (Integration-Funktion)

Prev Next

Die Funktion SearchTask (Integration-Funktion) ermöglicht das Abfragen von Inhalten aus der Datenbank von Lobster Data Platform / Orchestration (Details s. Such API) im Mapping (Phase 3) eines Profils.

Die Suchabfrage wird über die XML-Struktur eines SearchTask-Objekts im Parameter a definiert, die u. a. mit dem Abfragekonfigurator interaktiv aufgebaut und getestet werden kann.

Die XML-Struktur kann sich in der Syntax @PARAM_X@ (mit X aus {B,C,D,E,F,G,H,I,J}) auf die Werte der optionalen Parameter b, ..., j aus dem Funktionsaufruf beziehen.

Analog kann über die Syntax @VARIABLENNAME@ auf die Werte von Variablen aus dem Kontext des Profils zugegriffen werden.

Der Rückgabewert der Funktion ist immer das Suchergebnis eines bestimmten SearchResult-Objekts (SearchResult, TupleSearchResult oder CsvSearchResult, Details s. Sucharten) als Text im XML-Format .

Über den optionalen Parameter k kann diese Struktur in eine benanntes DOM-Objekt geparst werden, z. B. um dieses anschließend mit der Funktion get value from XML() über XPath-Ausdrücke auszuwerten.

images/download/attachments/201674109/image2021-9-23_15-48-12-version-1-modificationdate-1747044403439-api-v2.png

Parameter

Parameter

Beschreibung

Beispiel

Hinweis

a

XML-Struktur eines SearchTask-Objekts

SearchTask

<?xml version="1.0" encoding="UTF-8"?>
<core:SearchTask ... entity="base:User">
   <base:LobsterDataLoginRequest userName="admin"
 selectedRole="1" selectedCompany="1"/>
   <core:TupleSearch>
      <core:SimplePropertySearch 
projection="address.name1" compareType="=="/>
      <core:PropertyProjection property="username"/>
      <groupBy/>
   </core:TupleSearch>
</core:SearchTask>
  • Diese Suche soll über eine Tupel-Suche die Konten aller Benutzer ermitteln, für die in der Adresse kein Name (address.name1) angegeben wurde und eine Liste von Benutzernamen (username) zurückgeben.

Eine "Abfrage" kann mit dem Abfragekonfigurator interaktiv angelegt und getestet werden. Die XML-Struktur des SearchTask-Objekts wird dann im XML-Tab angezeigt. Diese Abfragedefinition kann dann einfach über die Zwischenablage als statischer Wert für den Parameter a eingefügt und bei Bedarf editiert werden.

Häufig müssen - anders als im sehr einfachen Beispiel links - Daten aus dem Laufzeitkontext im Profil in die Suche einfließen, damit diese die "passenden" Ergebnisse liefert. Das XML kann sich zu diesem Zweck auf Variablen oder Parameter deren Werte zur Laufzeit aus dem Kontext des Aufrufs im Profil eingefügt werden.

Besonders für komplexere Anwendungsfälle kann es hilfreich sein, die XML-Struktur des SearchTask-Objekts in die Zielstruktur des Profils zu integrieren, so dass die "Suche" per Mapping an Quelldaten angebunden und zur Laufzeit dynamisch konstruiert werden kann. Dann wird der Parameter a über die Funktion create xml from node() befüllt (s. ausführlicheres Beispiel unten). Auch dann kann die XML-Definition Parameter und Variablen einbeziehen.

b-j

Parameter, die - analog zu regulären Variablen zwischen zwei '@'-Zeichen - in der XML-Definition der Suche adressiert werden können

SearchTask

<?xml version="1.0" encoding="UTF-8"?>
<core:SearchTask ... entity="base:User">
   <base:LobsterDataLoginRequest userName="admin"
 selectedRole="501" 
selectedCompany="@MSG_CALL_SCM_Company_id@"/>
   <core:TupleSearch>
      <core:SimplePropertySearch projection="@PARAM_B@" 
compareType="=="/>
      <core:PropertyProjection property="@PARAM_C@"/>
      <groupBy/>
   </core:TupleSearch>
</core:SearchTask>

Ausgehend vom obigen Beispiel wurden hier Parameter und Variablen eingefügt:

  • Die Variable MSG_CALL_SCM_Company_id definiert die Firma für den Anmeldekontext der Abfrage.

  • Der Parameter b (PARAM_B) definiert das Feld des Benutzerkontos, das gegen "leer" geprüft werden soll.

  • Der Parameter c (PARAM_C) definiert das Feld des Benutzerkontos, das im Ergebnis erscheinen soll.

Um dieselben Suchergebnisse zu erhalten, wie im obigen statischen Fall, müssen folgende Bedingungen erfüllt sein:

  • Der Profilaufruf muss im Anmeldekontext der Firma mit der ID 1 erfolgen, sodass die Variable MSG_CALL_SCM_Copmany_id den Wert 1 hat.

  • Beim Funktionsaufruf müssen die Parameter b und c folgende Textwerte liefern:

    • PARAM_B: address.name1

    • PARAM_C: username

l

true/false (Standard: false).

Gibt an, ob als Ergebnis, anstelle der gefunden Datensätze, lediglich die Anzahl der Ergebnisse zurückgeliefert werden soll.




Beispiele


Suchdefinition über einen SearchTask-Knoten  

Im nachfolgenden Beispiel werden alle Sendungen mit dem Arbeitsstatus "Freigegeben" (RELEASED) gesucht.

Die entsprechende Suche wurde über den Abfragekonfigurator aufgebaut und über den Menüpunkt Orchestration-Vorlagen als Unterknoten SearchTask zum Knoten SearchNode (mit gesetzter Option "Nur für SQL") eingefügt (s. Erstellen einer statischen Zielstruktur).

images/download/attachments/201674109/image2020-10-27_11-26-50-version-1-modificationdate-1747044403503-api-v2.png

Die Ausführung der Suche wird durch Funktionsaufrufe für das Feld executeSearch im Data-Knoten ausgelöst:

  • Die Funktion create xml from node()liefert das XML des SearchTask-Knotens:

    images/download/attachments/201674109/image2020-10-27_11-50-49-version-1-modificationdate-1747044403498-api-v2.png  



  • Die XML-Struktur des SearchTask-Knotens wird als Ergebnis in Parameter a der SearchTask (Integration-Funktion)-Funktion übernommen, die die Suche ausführt und das Ergebnis in das DOM-Objekt searchResult (Parameter k) speichert:

    images/download/attachments/201674109/image2020-10-27_11-52-26-version-1-modificationdate-1747044403495-api-v2.png  



  • Im nachfolgenden Feld getResult wird die Funktion get value from XML() verwendet, um das DOM-Objekt mit einem XPath-Ausdruck auszuwerten:

    images/download/attachments/201674109/image2020-10-27_11-58-21-version-1-modificationdate-1747044403493-api-v2.png

  • Im Beispiel wird dem Feld getResult die ID (id) der ersten Sendung zugewiesen, die die Suche zurückgibt.

Suchdefinition mit Parametern in einer Profil-Variablen  

Eine Tupel-Suche soll über zwei Parameter (Benutzername/username, Kontonummer/address.accNumber) ein bestimmtes Benutzer-Konto in Lobster Data Platform / Orchestration identifizieren und - sofern ein Treffer existiert - dessen ID (id) zurückgeben.

images/download/attachments/201674109/image2020-10-27_15-0-6-version-1-modificationdate-1747044403490-api-v2.png

Wie im vorigen Beispiel wird der Abfragekonfigurator (links) verwendet, um ein geeignetes SearchTask-Objekt aufzubauen. Dabei können die Referenzen auf die Parameter direkt als Vergleichswerte in den jeweiligen Bedingungen eingetragen werden. Idealerweise erfolgt dies erst, nachdem die Abfrage mit konkreten Beispieldaten getestet wurde.

Die XML-Struktur des SearchTask-Objekts kann dann im XML-Tab angezeigt werden. Für das aktuelle Beispiel ergibt sich folgende Struktur:

XML

<?xml version="1.0" encoding="UTF-8"?>
<core:SearchTask ... entity="base:User" skipCsvEnvelope="false" tryUseExistingConnection="true">
   <base:LobsterDataLoginRequest ... />
   <core:TupleSearch>
      <core:SearchJunction junction="CONJUNCTION">
         <core:SimplePropertySearch projection="username" compareType="==" stringValue="@PARAM_B@"/>
         <core:SimplePropertySearch projection="address.accNumber" compareType="=="
 stringValue="@PARAM_C@"/>
      </core:SearchJunction>
		...
      <core:PropertyProjection property="id"/>
		...
      <groupBy/>
   </core:TupleSearch>
</core:SearchTask>

Aus dem XML-Tab im Abfragekonfigurator kann diese Struktur in die Zwischenablage kopiert und im Profil als Wert einer Variablen eingefügt werden:

images/download/attachments/201674109/image2020-10-27_15-21-56-version-1-modificationdate-1747044403487-api-v2.png

  • Hier wurde das Such-XML als (Standard-)Wert in einer benutzerdefinierten Variablen (vom Typ String) mit dem Namen var__searchUserId eingefügt.

  • Im Feld Beschreibung kann der Zweck der Suche optional dokumentiert werden.

Als konkreter Anwendungsfall soll die in der Variable var__searchUserId vordefinierte Tupel-Suche mit wechselnden Parametern genutzt werden, um die Konten bestimmter Benutzer per Batch-Import zu aktualisieren.

ANMERKUNG◄ Da die Tupel-Suche den zu aktualisierenden Benutzer über die zurückgegebene ID (id) identifiziert, kann der search-Knoten im batch-Knoten des Imports deaktiviert werden, wenn diese als Wert für das id-Attribut im User-Knoten zugewiesen wird.

images/download/attachments/201674109/image2020-10-27_15-50-19-version-1-modificationdate-1747044403485-api-v2.png

Im batch-Knoten der BatchImport-Struktur wurde ein Berechnungsfeld searchUserId ergänzt, das zwei Funktionsaufrufe verkettet:

Zunächst wird die im obigen Screenshot rechts ausgewählte Funktion SearchTask (Integration-Funktion) aufgerufen, der per Parameter a auf die Variable var_searchUserId zugreift.

  • Den "Suchparametern" b und c werden Werte von Quellfeldern ("username" und "account") zugewiesen, so dass jede Iteration des batch-Knotens eine individuelle Suche ausführt.

  • Das Suchergebnis wird per Parameter k als DOM-Objekt mit dem Namen searchResult gespeichert.

images/download/attachments/201674109/image2020-10-27_16-0-0-version-1-modificationdate-1747044403483-api-v2.png

Die Funktion get value from XML()greift über den XPath-Ausdruck //row[1]/item[1] auf den Wert der ersten Spalte (item[1]) der ersten Zeile (row[1]) innerhalb des result-Knotens der TupleSearchResult-Strukur (s. Tupel-Suche) zu. Da die Suche nur ein einzige Projektion (id) verwendet, ist das die ID des ersten Treffers, sofern es überhaupt Treffer gibt. Dieser Wert wird dem Feld searchUserId als Berechnungsergebnis zugewiesen. Das Feld id_attr im User-Objekt kann diesen Wert z. B. über die Funktion copy() auf das Zielfeld searchUserId übernehmen.

Suchdefinition mit Parametern als statischer Text im Funktionsparameter  

Innerhalb eines Profils soll eine Tupel-Suche alle Benutzer ermitteln, deren Adresse eine bestimmte Kontonummer (address.accNumber) zugewiesen ist, um zu prüfen, ob diese Kontonummer eindeutig vergeben ist.

images/download/attachments/201674109/image2020-10-27_18-58-44-version-1-modificationdate-1747044403481-api-v2.png

Der Abfragekonfigurator (links) wird verwendet, um ein geeignetes SearchTask-Objekt aufzubauen. Dabei kann die Referenz auf den Parameter b direkt als Vergleichswert in den jeweiligen Bedingungen eingetragen werden. Idealerweise erfolgt dies erst, nachdem die Abfrage mit konkreten Beispieldaten getestet wurde.

Die XML-Struktur des SearchTask-Objekts kann dann im XML-Tab angezeigt werden. Für das aktuelle Beispiel ergibt sich folgende Struktur:

 XML

<?xml version="1.0" encoding="UTF-8"?>
<core:SearchTask ... entity="base:User" skipCsvEnvelope="false" tryUseExistingConnection="true">
   <base:LobsterDataLoginRequest ... />
   <core:TupleSearch>
      <core:SimplePropertySearch projection="address.accNumber" compareType="==" stringValue="@PARAM_B@"/>
		...
      <core:PropertyProjection property="id"/>
      <core:PropertyProjection property="username"/>
      <groupBy/>
   </core:TupleSearch>
</core:SearchTask>

Diese Struktur wir direkt aus dem XML-Tab im Abfragekonfigurator in die Zwischenablage kopiert.

In der Zielstruktur wird ein Berechnungsfeld mit zwei Funktionsaufrufen versehen:

images/download/attachments/201674109/image2020-10-27_19-5-21-version-1-modificationdate-1747044403478-api-v2.png

Zunächst wird die Funktion SearchTask (Integration-Funktion) ausgeführt, deren Parameter a die XML-Struktur aus der Zwischenablage als statischer Textwert zugewiesen wird.

  • Der Parameter b wird mit einem Quelldatenfeld account verknüpft, das die zu prüfende Kontonummer definiert.

  • Das Suchergebnis wird per Parameter k als DOM-Objekt mit dem Namen searchResult gespeichert.

images/download/attachments/201674109/image2020-10-27_19-7-52-version-1-modificationdate-1747044403476-api-v2.png

Anschließend wird das als Suchergebnis zurückgegebene DOM-Objekt searchResult (Parameter a) mit der Funktion get value from XML() ausgewertet.

  • Der XPath-Ausdruck (//@count) liefert die Anzahl der Zeilen innerhalb der TupleSearchResult-Struktur (s. Tupel-Suche), die im Kopf der Suche als Attribut übergeben werden.