Abfragekonfigurator


Mit dem Abfragekonfigurator können unterschiedliche Typen von Abfragen bzw. "Suchen" konfiguriert und unter Berücksichtigung der Zugriffsrechte des aktuellen Benutzerkontexts auf die Lobster Data Platform / Orchestration-Datenbank ausgeführt werden.

Auch wenn der Abfragekonfigurator damit grundsätzlich zur Ausführung konkreter Recherchen in der Lobster Data Platform / Orchestration-Datenbank verwendet werden kann, besteht die wesentlich wichtigere Aufgabe darin, Abfrage-Definitionen zu entwerfen, die unmittelbar getestet und anschließend in einem anderen Kontext (z. B. Lobster_pro: SearchTask (_data-Funktion), SearchCronTask, Dashboards) implementiert werden sollen, wo ein selektiver Zugriff auf Daten bzw. Datenobjekte stattfinden soll. Der Abfragekonfigurator ist dabei als reine "Werkbank" für diesen Design-Prozess konzipiert und bietet keinerlei Funktionalitäten zum Speichern von "Suchen". Im Idealfall kann die XML-Definition einer erstellten Abfrage über die Zwischenablage direkt in den Zielkontext übertragen werden. Die "Einschränkungen" für Eigene Übersichten können umgekehrt in den Abfragekonfigurator übernommen werden.

Der logische Aufbau solcher "Suchen" ähnelt dem Aufbau von SQL-SELECT-Statements.

  • Jede Suche bezieht sich auf eine bestimmte Entität, also einen bestimmten Datenobjekttyp aus aus der Datenbank von Lobster Data Platform / Orchestration (quasi der FROM-Teil eines SELECT-Statements).

  • Joins zu anderen Entitäten können den Dateninhalt der Suche erweitern (wie im FROM-Teil eines SELECT-Statements).

  • Die Struktur der Ergebnisse wird durch Projektionen (wie im SELECT-Teil einer SQL-Abfrage) bestimmt, wenn die Suche nicht auf komplette Datenobjekte der gewählten Entität abzielt.

  • Bedingungen können das Suchergebnis qualitativ abgrenzen (WHERE-Teil eines SELECT-Statements), der Parameter Maximale Ergebnisse (TOP/LIMIT/... in SQL-Statements) quantitativ.

  • Gruppierungen können in Verbindung mit Aggregationsfunktionen in Projektionen verwendet werden, um Teilergebnisse zu aggregieren (GROUP-BY in SELECT-Statements).

►HINWEIS◄ Mit Blick auf die Laufzeit beim Ausführen einer Suche sollte in Bedingungen, Sortierungen, Gruppierungen und Joins auf nicht-indizierte Felder möglichst verzichtet werden. Als Hilfestellung für die Gestaltung performanter Abfragen werden indizierte Felder im Kontext der Abfragedefinition immer durch ein angehängtes Sternchen gekennzeichnet. Das Sternchen kann wie im folgenden Beispiel als Suchkriterium eingegeben werden, sodass das Dropdown nur die indizierten Felder der gewählten Entität anzeigt:

images/download/attachments/78263404/image2019-3-18_10-46-11-version-1-modificationdate-1632297841365-api-v2.png

Grundsätzlich sind drei Typen von "Suchen" zu unterschieden:

Typ

Suchergebnis

Format

Einfaches Beispiel

Suche

Alle Instanzen einer Entität, für die ggf. angegebene Bedingungen erfüllt sind.

Das Beispiel rechts zeigt leicht gekürzte ("[...]") Ergebnisdaten für einen einzelnen Treffer der Entität "Rolle".

XML

<base:Role id="501" [...] active="true">
<roleName>Super user limited</roleName>
<parentRole>1</parentRole>
<flatPermissionNames>~</flatPermissionNames>
</base:Role>

Tupel-Suche

Ein zweidimensionales XML-Listenformat, das in einem durch die Projektionen definierten Spaltenformat (columns.name[]) mehrere Zeilen (result.row[]) mit typisierten Daten (row.item[]) ausgeben kann.

Das Beispiel rechts zeigt eine komplette Liste für eine Suche nach "Rollen", deren Name mit dem Buchstaben "S" beginnt. Ausgegeben werden zwei Spalten mit den Beschriftungen ROLE_ID und ROLE_NAME die durch Projektionen für die Merkmale "Role.id" und "roleName" (Datenmodell siehe vorheriges Beispiel) befüllt werden.

Alternativ kann die Ausgabe auch im XML Format "Client Objekt" erfolgen. Hierbei sind keine Such-Typ Informationen sowie keine Zeilen und Spalten Informationen enthalten. Dazu den Schalter "Tupel Ergebnis als Client Objekt" auf "On" stellen.

XML

images/download/attachments/78263404/image2018-8-28_13_45_10-version-1-modificationdate-1632297841076-api-v2.png

CSV-Suche

Ein zweidimensionales CSV-Listenformat, dessen Informationsgehalt dem einer Tupel-Suche entspricht.

Das Beispiel rechts zeigt dasselbe Suchergebnis wie im vorherigen Beispiel nur im CSV-Format.

CSV

images/download/attachments/78263404/image2018-8-28_14_3_22-version-1-modificationdate-1632297841056-api-v2.png


Anhand eines Beispiels soll hier die grundsätzliche Funktionalität des Abfragekonfigurators erläutert werden.

Für Datenbankabfragen werden Suchobjekte verwendet, die im XML-Format zwischen dem Client- und dem Server übertragen werden. Bei der Verwendung beim Import über den _data, fungiert der _data quasi als Client, der die Suchobjekte auch im XML-Format liefert.

Das XML-Format der Suche im Beispiel ( Das XML ist eigentlich größer, aber nicht relevante Teile wurden der Übersichtlichkeit halber durch ... ersetzt):

XML der Suchanfrage
<?xml version="1.0" encoding="UTF-8"?>
<core:SearchTask ... entity="shp:Shipment" ... >
<base:LobsterDataLoginRequest ... userName="jabend" selectedRole="51" selectedCompany="51"/>
<core:Search>
<core:PropertySearch>
<core:PropertyProjection property="cne.value.address.name1"/>
<compareType>like</compareType>
<value xsi:type="core:LiteralValueResolver">
<value xsi:type="xsd:string">Mustermann</value>
</value>
</core:PropertySearch>
<core:TypedAttributeJoin alias="cne" joinType="LEFT" optional="true" attribute="base:CompanyAddressAttribute" attributeType="base:CompanyType#CNE"/>
</core:Search>
</core:SearchTask>

images/download/attachments/78263404/image2018-7-18_15_9_50-version-1-modificationdate-1632297841088-api-v2.png


Über (1) muss angegeben werden, welche Suchart verwendet werden soll, siehe auch Sucharten. Die Sucharten unterscheiden sich grundsätzlich nur darin, wie die Daten der Suche zurückgeliefert werden, z.B. Objekte, oder CSV oder Tuple-Objekte.

Eine Suchanfrage (SearchTask) erfordert immer die Angabe der Entität (2). Die Entität (im XML ist das dann der XML-Name als entity im Root-Knoten) entspricht dem FROM-Ausdruck in SQL, also welches Datenobjekt gesucht werden soll.

Auf der linken Seite wird die Suche in einem Baum dargestellt (3). Auf der rechten Seite (4) kann der links im Baum ausgewählte Teilbereich konfiguriert werden. Hier wurde die Bedingung (eine Feldeinschränkung) ausgewählt.

Die Bedingung (4) entspricht dem WHERE-Ausdruck in SQL. Hier werden über Projektionen (5) (siehe auch Projektionen) und Einschränkungen (4) (siehe auch Einschränkungen) die WHERE-Bedingungen konfiguriert.

Im Beispiel wird eine Feld Einschränkung (4) definiert, welche eine Feldprojektion (5) des Feldes cne.value.address.name1 mit like (6) auf den Wert (7) Mustermann überprüfen soll.


Bearbeitung

images/download/attachments/78263404/image2018-7-18_15_12_0-version-1-modificationdate-1632297841122-api-v2.png

Grundsätzlich kann die Suche links im Baum(1) und rechts in der Detailansicht bearbeitet werden.

Auf der rechten Seite (2) ändern sich die Konfigurationsmöglichkeiten anhand der Auswahl im Baum (1)

Basiseinstellungen


images/download/attachments/78263404/image2018-7-18_15_13_35-version-1-modificationdate-1632297841118-api-v2.png
Um die Basiseinstellungen der Suche zu bearbeiten, kann im Baum auf die Suche geklickt werden. Rechts werden anschließend die Einstellungen zur Bearbeitung angeboten (1) .

Ein möglicher Offset des Ergebnisses (2) (z.B. für Paging) und die maximale Anzahl der Ergebnisse (3) wird hier eingestellt.

Im Normalfall erfolgt bei einer Suche in der gleichen Transaktion ein Flush der in dieser Transaktion geänderten Daten. Ist die Einstellung Änderung anwenden (4) nicht gestetzt, wird dieser Flush unterdrückt.

Ist die Suchoptimierung (6) aktiviert (empfohlen), werden zunächst nur die IDs der Ergebnismenge (mit Einschränkung und Sortierung) geholt. In einer zweiten Abfrage werden dann sämtliche Projektion ausgewertet.
Ist eine Projektion auf wiederholte Einträge vorhanden, sollte die Suchoptimierung deaktiviert werden, da die Ergebnismenge ansonsten nicht mit der Einschränkung übereinstimmen könnte.
Beispiel: Join auf plurales typisiertes Attribut mit Projektion und Einschränkung auf Joinergebnis. Sucheinschränkungen und Paging funktionieren nicht auf so einer Projektion. Durch deaktivieren der Suchoptimierung kann dieses repariert werden.
Hinweis: Nur sinnvoll in Verbindung mit Ergebnistyp "Tupel"

Wenn die Option Gesamtanzahl berechnen (5) gesetzt ist (Default=true), dann wird die Gesamtanzahl der gefundenen Werte mit einem count-Statement ermittelt.

Beispiel:

23 Sendungen sind vorhanden

Einstellung

Ergebnis

images/download/attachments/78263404/image2018-6-21_15_27_20-version-1-modificationdate-1632297841200-api-v2.png

images/download/attachments/78263404/image2018-6-21_15_30_4-version-1-modificationdate-1632297841183-api-v2.png

Die Gesamtanzahl 23 wird ermittelt und steht im Attribute count.

Im Suchergebnis sind 10 Rows.

Count entspricht nicht der Anzahl Rows im Suchergebnis.

images/download/attachments/78263404/image2018-6-21_15_39_55-version-1-modificationdate-1632297841152-api-v2.png

images/download/attachments/78263404/image2018-6-21_15_40_34-version-1-modificationdate-1632297841144-api-v2.png

Die Gesamtanzahl 23 wird ermittelt und steht im Attribute count.

Im Suchergebnis sind 3 Rows.

Count entspricht nicht der Anzahl Rows im Suchergebnis.

images/download/attachments/78263404/image2018-6-21_15_31_24-version-1-modificationdate-1632297841179-api-v2.png

images/download/attachments/78263404/image2018-6-21_15_31_47-version-1-modificationdate-1632297841171-api-v2.png

Die Gesamtanzahl wird nicht ermittelt.

Im Suchergebnis sind 10 Rows.

Count entspricht der Anzahl der gefunden Rows.

images/download/attachments/78263404/image2018-6-21_15_34_47-version-1-modificationdate-1632297841163-api-v2.png

images/download/attachments/78263404/image2018-6-21_15_36_6-version-1-modificationdate-1632297841155-api-v2.png

Die Gesamtanzahl wird nicht ermittelt.

Im Suchergebnis sind 3 Rows.

Count entspricht der Anzahl der gefunden Rows.





Joins

images/download/attachments/78263404/image2018-7-18_15_22_28-version-1-modificationdate-1632297841115-api-v2.png

Um der Suche eine Join hinzuzufügen, kann im Suchbaum auf (1) geklickt werden. Es erscheint die Auswahl der möglichen Joins (siehe auch Joins).

images/download/attachments/78263404/image2018-7-18_15_23_52-version-1-modificationdate-1632297841111-api-v2.png

Um eine Join zu entfernen, zu kopieren oder auszuschneiden, kann auf (2) geklickt werden.


images/download/attachments/78263404/image2018-7-18_15_25_23-version-1-modificationdate-1632297841106-api-v2.png

Die Konfiguration der ausgewählten Join (1) erfolgt auf der rechten Seite.


Sortierung

Es besteht die Möglichkeit für die Suche eine optionale Sortierung anzugeben.

images/download/attachments/78263404/image2018-7-18_15_28_41-version-1-modificationdate-1632297841102-api-v2.png

Dabei können mit einem Klick auf (1) beliebig viele Sortierungs-Einträge (SearchOrder-Objekte) erzeugt werden.

images/download/attachments/78263404/image2018-7-18_15_32_5-version-1-modificationdate-1632297841099-api-v2.png

Für jeden Sortierungs-Eintrag muss eine Projektion angegeben werden. Klick auf (1).


images/download/attachments/78263404/image2018-7-18_15_37_10-version-1-modificationdate-1632297841095-api-v2.png

Die Konfiguration der Projektion (1) erfolgt wie gewohnt im rechten Bereich. (hier z.B. das Änderungsdatum) (1)

Die Sortierreihenfolge (aufsteigend, absteigend) kann bei (2) konfiguriert werden.


XML anzeigen und setzen

images/download/attachments/78263404/image2018-5-15_11_49_28-version-1-modificationdate-1632297841244-api-v2.png

Im Reiter XML (1) wird das XML der Suchabfrage (2) in einem Highlight-Editor angezeigt. Die Bearbeitung (inkl. Copy&Paste) des XML ist möglich. Mit (3) wird das bearbeitete XML übernommen und anschließend wieder im Reiter Editor angezeigt.


Suche ausführen

images/download/attachments/78263404/image2018-5-15_12_0_35-version-1-modificationdate-1632297841239-api-v2.png

Die Suche wird bei einem Klick auf (1) ausgeführt.

Das Ergebnis wird dann in einem neuen Tabreiter im XML-Format angezeigt.

Das Suchergebnis im Beispiel sieht dann in etwa so aus:

XML des Suchergebnisses
<?xml version="1.0" encoding="UTF-8"?>
<core:DataServiceSearchResult ... >
<core:SearchResult maxResults="100" count="7">
<shp:Shipment ...>
...
</shp:Shipment>
<shp:Shipment ...>
...
</shp:Shipment>
...
</core:SearchResult>
</core:DataServiceSearchResult>

Angegeben wird auch die Anzahl der gefundenen Objekte und die maximale Anzahl (entspricht Maximale Anzahl in Suche Einstellungen) mit der gesucht wurde.


Suchen aus Übersichten übernehmen


images/download/attachments/78263404/image2018-7-18_15_45_36-version-1-modificationdate-1632297841092-api-v2.png

Wenn man in beliebigen Übersichten mit gedrückten Strg+Shift-Tasten auf die Suche klickt, wird das Suchobjekt in die Zwischenablage kopiert.


images/download/attachments/78263404/image2018-7-18_16_16_39-version-1-modificationdate-1632297841083-api-v2.png

Im Abfragekonfigurator kann dann im Auswahlfeld für den Suchtyp (1) mit der rechten Maustaste der Inhalt aus der Zwischenablage eingefügt werden (2).