DB-Abfragen


Datenbankabfragen verhalten sich ähnlich wie Datenquellen (XML, CSV, JSON), werden jedoch nicht statisch hinterlegt, sondern dynamisch aus einer Datenbank ausgelesen.

Bei der Erstellung einer Abfrage wird eine bereits angelegte Verbindung zu einer Datenbank benötigt.

Anlegen einer SQL-Abfrage


Die Konfigurationsoberfläche zum Anlegen einer SQL-Abfrage besteht aus vier Teilen: (1) Liste der existierenden Datenbank-Abfragen, (2) Editor zum Definieren der SQL-Abfrage, (3) Einstellungen der Datenbank-Abfrage, (4) Konsole zum Testen der Datenbank-Abfrage.

  • Öffnen Sie das Modul "DB-Abfragen" und klicken Sie auf die Schaltfläche "Neu" in der Kopzeile der Liste (siehe Abbildung).
  • Für die Datenbank-Abfrage werden folgende Daten benötigt:
    • Name: Ein eindeutiger Name der Datenbank-Abfrage
    • Beschreibung: Eine optionale Beschreibung der Datenbank-Abfrage
    • Verbindung: Die DB-Verbindung, die verwendet werden soll
  • Die eigentliche SQL-Abfrage wird im Editor in der Mitte einegeben (siehe Abbildung).

Das eingegebene Statement wird als Prepared-Statement ausgeführt, so dass keine sogenannte SQL-Injection moglich ist. Verwenden Sie daher auch keine Hochkommas. Prinzipiell können auch Übergabeparameter verwendet werden. In der Abfrage setzen Sie an die Stelle des Übergabeparameters ein Fragezeichen ?.

6.4.0+  In den SQL-Statements können Platzhalter verwendet werden.

Verwenden der Abfrage

Die Datenbankabfrage ist innerhalb und außerhalb eines Formulars über das hierfür vorgesehene Servlet unter Verwendung der entsprechenden Parameter abrufbar. Die URL zur Datenbankabfrage lautet wie folgt:

http://<server>/formcycle/datenabfragedb

Die Servlet-URL wird unterhalb der Einstellungen angezeigt (siehe Abbildung).
Folgende URL-Parameter sind hierbei möglich:

ParameternameBeschreibungErforderlich
nameMuss dem Namen der Datenbank-Abfrage entsprechen.Ja
mandantNameMuss dem Namen des Mandanten entsprechen, unter welchen diese Datenbank-Abfrage erstellt wurde.Ja, wenn projektId nicht gegeben
projektIdMuss der ID des Formulars entsprechen. Diese Information kann über XFC_METADATA.currentProject.id abgerufen werden.Ja, wenn mandantName nicht gegeben
sqlParameterSynonym für queryParameter. Sollte in Xima® Formcycle Version 6 nicht mehr verwendet werden und wird voraussichtlich in der nächsten Major-Version entfernt.Nein
queryParameterNur erforderlich, wenn innerhalb der Datenbank-Abfrage Platzhalter in Form eines Fragezeichens verwendet werden. Ist dies der Fall, so entspricht dieser der komma-separierten Listen der zu verwendeten Parameter.

Wenn möglich sollte für neue Projekte anstelle des Parameters queryParameter der Parameter queryParameterValues verwendet werden, da queryParameter in einer zukünftigen Version von Xima® Formcycle nicht mehr unterstützt werden wird.
Nein
delimiterTrennzeichen, welches die einzelnen Werte des queryParameter trennt. Standardmäßig ein Komma ,.

Wenn möglich sollte für neue Projekte anstelle der Parameter delimiter und queryParameter der Parameter queryParameterValues verwendet werden, da delimiter in einer zukünftigen Version von Xima® Formcycle nicht mehr unterstützt werden wird.
Nein
queryParameterValues6.6.3+ Ab Xima® Formcycle Version 6.6.3 zur Verfügung stehende Alternative zu den Parametern queryParameter und delimiter. Wie diese Parameter ist auch queryParameterValues nur dann erforderlich, wenn innerhalb der Datenbank-Abfrage Platzhalter in Form eines Fragezeichens ? verwendet werden. Ist dies der Fall, werden die einzelnen Abfrageparameter hintereinander jeweils als ein eingener Parameter queryParameterValues übergegeben, wodurch auch die Verwendung des Parameters delimiter entfällt.Nein
varNameGibt den Namen des JSON-Response-Objektes an. Ist dieser nicht gesetzt, so besitzt das JSON-Objekt keinen expliziten Namen.Nein

Bei Zugriff aus einem Formular verwenden Sie bitte immer das globale Variablenobjekt XFC_METADATA, siehe hierzu auch die Metadaten. In diesem Objekt stehen alle relevanten URLs von Xima® Formcycle zur Verfügung, sodass diese Beispielhaft wie folgt ermittelt werden kann: XFC_METADATA.urls.datasource_db.

Ferner empfehlen wir, innerhalb des Formulars die JavaScript-Funktion xutil.getdataquery zu verwenden, die das manuelle Aufbauen der Servlet-Abfrage erspart.

Die Rückgabe des Abfrage-Ergebnisses erfolgt im JSON-Format und kann somit innerhalb des Formulars direkt genutzt werden.

Testen der Abfrage

Zum schnellen Testen der Abfrage steht die Tastenkombination Strg + Enter zur Verfügung.

Datenbank-Abfragen können direkt in der Konfigurationsoberfläche getestet werden. Hierzu steht eine Testkonsole unterhalb des SQL-Editors zur Verfügung (siehe Abbildung).
Im Header der Testkonsole befindet sich eine Reihe von Buttons zur Steuerung der Abfrage:

  • Abfrage ausführen
    Führt die Datenbank-Abfrage aus. Werden Abfrageparameter (?) verwendet, wird der Nutzer aufgefordert Werte für diese Parameter einzugeben. Ist dies nicht der Fall wird das Ergebnis der Abfrage direkt in der Tabellenansicht dargestellt.

  •  Abfrageparameter
    Maske zum Eingeben von Werten für Abfrageparameter. Diese Option steht nur zur Verfügung, wenn Abfrageparameter (?) in der SQL-Abfrage verwendet werden. Die einzelnen Abfrageparameter werden nummeriert im SQL-Query dargestellt. Ein Klick auf "Parameter für Abfrage verwenden" führt die Abfrage mit den eingebenen Parametern aus. Das Ergebnis wird in der Tabellenansicht dargestellt.


    Eigentliche Abfrage im SQL-Editor:

  • Tabellenansicht
    Abfrageergebnis in Tabellenform

  •  Quellcodeansicht
    Abfrageergebnis im JSON-Format

  •  Generiertes SQL
    Zeigt das generierte SQL-Statement mit eingefügten Parameterwerten

Sonderfall Auswahlelement

Soll das Ergebnis einer Datenbankabfrage direkt in ein Auswahlelement geladen werden, erfolgt dies über die Eigenschaften des Auswahlelements im Xima® Formcycle-Designer.

Abfragen die in Auswahlelementen eingesetzt werden, dürfen kein "?" beinhalten, da diese Abfragen einen Übergabeparameter erwarten und dies bei Auswahlelementen nicht möglich ist. Abfragen mit einem "?" werden nicht als Datenquelle bei Auswahlelementen angeboten.

Verwenden des Ergebnises einer Datenbankabfrage als Datenquelle für ein Auswahlelement im Xima® Formcycle-Designer.

Der Inhalt der SQL-Datenbankabfrage wird in einem Auswahlelement in folgender Reihenfolge verwendet.

Sichtbarer Wert, Übertragener Wert, Optionaler Wert 1, Optionaler Wert 2, ...

Alle übertragenenen Werte werden als Wert des HTML-Attribut col0 (sichtbarer Wert), col1 (übertragener Wert), col2 (optionaler Wert 1), col3 (optionaler Wert 2) usw. an das jeweilige option-Element angefügt. 

Der sichtbare Wert wird in der Auswahlliste im Formular angezeigt. Der übertragene Wert wird als Wert des HTML-Attributs value beim Absenden des Formulars übertragen.

Werden zudem noch ein oder mehrere optionale Werte von der SQL-Datenbankabfrage zurückgegeben, so können diese per Javascript über den folgenden jQuery-Selector abgerufen werden.

$('[name=sel2]').find('option:selected').attr('col2') // Selektiert die Aktive Option des Auswahlelements mit Name 'sel2' und liefert den ersten optionalen Wert zurück.

Beipiele

6.6.3+ Ab Xima® Formcycle Version 6.6.3 kann Anstelle des Parameters queryParameter der Parameter queryParameterValues verwendet werden. Letzterer wird für neue Projekte empfohlen, da der Parameter queryParameter in einer zukünftigen Version von Xima® Formcycle nicht mehr unterstützt werden wird. In den folgenden Beispielen wird für jede SQL-Abfrage daher jeweils eine Servlet-Abfrage mit queryParameter und mit queryParameterValues gezeigt.

select name, vorname from tabelle where vorname like(?)

Diese SQL-Abfrage liefert die Namen aller Personen zurück, die einen bestimmten Vornamen haben. Nach welchem Vornamen gesucht werden soll, kann über einen URL-Parameter angegeben werden.

Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=Mustermann

6.6.3+ Ab Xima® Formcycle Version 6.6.3 mögliche Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=Mustermann

 

select name, vorname from tabelle where id=?

Diese SQL-Abfrage liefert die Person mit einer bestimmten ID zurück. Die ID wird als URL-Parameter übergeben.

Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=100

6.6.3+ Ab Xima® Formcycle Version 6.6.3 mögliche Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=100

 

select name, vorname from tabelle where ort like(?) AND plz = ?

Diese SQL-Abfrage liefert die Namen aller Personen zurück, die an einem bestimmten Ort wohnen. Der Ort mit Postleitzahl wird über URL-Parameter übergeben.

Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=Entenhausen,02442

6.6.3+ Ab Xima® Formcycle Version 6.6.3 mögliche Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=Entenhausen&queryParameterValues=02442

 

select name, vorname from tabelle where ort like concat(?, '%')

Diese SQL-Abfrage liefert die Namen aller Personen zurück, die in einem Ort wohnen der mit den gesuchten Buchstaben/Zeichen beginnt. Das '%'-Zeichen dient als Platzhalter für beliebig viele beliebige Zeichen. Je nach verwendetem DBMS kann die Syntax geringfügig abweichen (hier: MySQL). Der gesuchte Wert wird über URL-Parameter übergeben.

Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=Entenhau

6.6.3+ Ab Xima® Formcycle Version 6.6.3 mögliche Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=Entenhau

 

select name, vorname from tabelle where lower(ort) like concat('%', lower(?), '%')

Diese SQL-Abfrage liefert die Namen aller Personen zurück, die in einem Ort wohnen der die gesuchten Buchstaben/Zeichen beinhaltet. Hierbei ist spielt die Klein/Groß-Schreibung keine Rolle, da die Abfrage in der Datenbank sowohl die Werte-Spalte als auch den eigentlichen Filter-Wert zu Kleinschreibung umwandelt (lower(...)). Der gesuchte Wert wird über URL-Parameter übergeben.

Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameter=teHaUs

6.6.3+ Ab Xima® Formcycle Version 6.6.3 mögliche Abfrage per Servlet:
http://meinserver/formcycle/datenquelledb?mandantName=ich&name=demo&queryParameterValues=teHaUs