comparison README.markdown @ 1093:effef57f3f7e 2.3.0

Complement and correct data model and docs for queries.
author Tom Gottfried <tom@intevation.de>
date Fri, 14 Oct 2016 15:18:42 +0200
parents ff07474b65e0
children b22ffbf88a43
comparison
equal deleted inserted replaced
1092:b225875c68fe 1093:effef57f3f7e
88 $ mvn javadoc:javadoc 88 $ mvn javadoc:javadoc
89 89
90 Der Ordner 'target' enthält dann die Dokumentation im HTML-Format in dem 90 Der Ordner 'target' enthält dann die Dokumentation im HTML-Format in dem
91 Verzeichnis 'site/apidocs'. 91 Verzeichnis 'site/apidocs'.
92 92
93 Erstellen von Filtern 93 Erstellen von Queries
94 --------------------- 94 ---------------------
95 Um neue Filter für die Suche von Proben, Messungen und Messprogrammen zu 95 Queries können als SQL-Statement in der Tabelle stammdaten.queries definiert
96 werden. Eine Filterung kann über Variablen erfolgen, die in stammdaten.filter
97 definiert werden müssen und mittels SQL-Interpolation im SQL-Statement
98 verwendet werden können.
99 Um neue Queries für die Suche von Proben, Messungen und Messprogrammen zu
96 erstellen sind die folgenden Schritte erforderlich: 100 erstellen sind die folgenden Schritte erforderlich:
97 101
98 1. In der Tabelle 'stammdaten.query' einen neuen Eintrag erzeugen. 102 1. In der Tabelle 'stammdaten.query' einen neuen Eintrag erzeugen.
99 * id: Primary-Key (wird generiert) 103 * id: Primary-Key (wird generiert)
100 * name: Der Name des Filters 104 * name: Der Name der Query
101 * type: Der Datentyp der gefiltert werden soll. 105 * type: Der Datentyp der gefiltert werden soll.
102 (mögliche Werte: 'probe', 'messung', 'messprogramm', 'ort', 'probenehmer', 106 (mögliche Werte siehe Datenbank-Schema-Definition)
103 'datensatzerzeuger', 'messprogrammkategorie')
104 * sql: Das auszuführende SQL-Statement (siehe #Regeln für die Syntax) 107 * sql: Das auszuführende SQL-Statement (siehe #Regeln für die Syntax)
105 * description: Ein beschreibender Text 108 * description: Ein beschreibender Text
106 109
107 2. In der Tabelle 'stammdaten.result' für die anzuzeigenden Felder je einen 110 2. In der Tabelle 'stammdaten.result' für die anzuzeigenden Felder je einen
108 Eintrag erzeugen: 111 Eintrag erzeugen:
112 * header: Der Titel der Spalte für diesen Eintrag 115 * header: Der Titel der Spalte für diesen Eintrag
113 * width: Die Spaltenbreite (in Pixel) 116 * width: Die Spaltenbreite (in Pixel)
114 * flex: Dynamische Spaltenbreite (true/false) 117 * flex: Dynamische Spaltenbreite (true/false)
115 * index: Der Datenindex 118 * index: Der Datenindex
116 119
117 3. In der Tabelle 'stammdaten.filter' für jedes 'WHERE'-Statement in der Query 120 3. In der Tabelle 'stammdaten.filter' für jeden Parameter in der 'WHERE'-Clause
118 einen Eintrag erzeugen: 121 der Query einen Eintrag erzeugen:
119 * id: Primary-Key (wird generiert) 122 * id: Primary-Key (wird generiert)
120 * query_id: ID der zugehörigen und in Schritt 1. erzeugten Query 123 * query_id: ID der zugehörigen und in Schritt 1. erzeugten Query
121 * data_index: Der Name der Variablen, die in dem 'WHERE'-Statement ersetzt 124 * data_index: Der Name der Variablen, die in dem 'WHERE'-Statement ersetzt
122 werden soll 125 werden soll
123 * type: Datenbasis, die im Client als Eingabe genutzt werden soll 126 * type: Datenbasis, die im Client als Eingabe genutzt werden soll
127 (mögliche Werte siehe Datenbank-Schema-Definition)
124 * label: Der angezeigte Name des Filters 128 * label: Der angezeigte Name des Filters
125 * multiselect: Mehrfachangabe von Werten für diesen Filter (true/false) 129 * multiselect: Mehrfachangabe von Werten für diesen Filter (true/false)
126 130
127 ### Regeln 131 ### Regeln
128 132
129 * Bei Queries vom Typ `probe` muss das erste selektierte Feld `probe.id` sein. 133 * Bei Queries vom Typ `probe` muss das erste selektierte Feld `probe.id` sein.
130 Dieses wird in der Oberfläche nicht angezeigt. 134 Dieses wird in der Oberfläche nicht angezeigt.
131 * Bei Queries vom Typ `messung` muss das erste selektierte Feld `messung.id` und 135 * Bei Queries vom Typ `messung` muss das erste selektierte Feld `messung.id`
132 das Zweite `probe.id AS probeId` sein. Diese werden in der Oberfläche nicht 136 und das zweite `probe.id` sein. Diese werden in der Oberfläche nicht
133 angezeigt. Um im Client die Funktionalität zu erhalten, sollten Messungsfilter 137 angezeigt. Für `probe.id` muss in stammdaten.result ein Eintrag mit
134 die beiden Felder `probe.hauptproben_nr AS hauptprobenNr` und 138 `data_index = 'probeId'` angelegt werden (obwohl diese Spalte nicht angezeigt
135 `messung.nebenproben_nr AS nebenprobenNr` enthalten. 139 wird). Um im Client die Funktionalität zu erhalten, sollten Messungsfilter
140 die beiden Felder `probe.hauptproben_nr` und `messung.nebenproben_nr`
141 enthalten.
136 * Bei Queries vom Typ `messprogramm` muss das erste selektierte Feld 142 * Bei Queries vom Typ `messprogramm` muss das erste selektierte Feld
137 `messprogramm.id` sein. Dieses wird in der Oberfläche nicht angezeigt. 143 `messprogramm.id` sein. Dieses wird in der Oberfläche nicht angezeigt.
144 * Werden bei einem JOIN Spalten gleichen Namens aus verschiedenen Tabellen
145 in der SELECT-Clause verwendet, so müssen diese mit einem expliziten Alias
146 versehen werden, um eine
147 org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException zu
148 vermeiden.
138 * Im `WHERE`-Statement genutzte Variablen müssen in der Form `:variablenName` 149 * Im `WHERE`-Statement genutzte Variablen müssen in der Form `:variablenName`
139 angegeben werden und dem Feld `data_index` im zugehörigen Filter entsprechen. 150 angegeben werden und dem Feld `data_index` im zugehörigen Filter entsprechen.
140 * Um auch leere Filterangaben zu erlauben, sollte im `WHERE`-Statement ein 151 * Wenn ein Filter mit `multiselect = true` angegeben wird, so wird in der
141 Element wie folgt aussehen: 152 `WHERE`-Clause ein `SIMILAR TO` erwartet.
142 ... WHERE (tabelle.feld = :variablenName OR '' = :variablenName) ...
143 * Wenn ein Filter mit `multiselect = true` angegeben wird, so wird in dem
144 `WHERE`-Statement ein `SIMILAR TO` erwartet.
145 * Das Feld `index` in der Tabelle `stammdaten.result` dient zur Zuordnung des 153 * Das Feld `index` in der Tabelle `stammdaten.result` dient zur Zuordnung des
146 selektierten Datenfeldes zu dem Entsprechenden Eintrag in der Tabelle 154 selektierten Datenfeldes zu dem Entsprechenden Eintrag in der Tabelle
147 `stammdaten.result`. Beispiel: 155 `stammdaten.result`. Beispiel:
148 ``` 156 ```
149 'SELECT probe.id, probe.mst_id AS mstId, probe.hauptproben_nr AS hpNr, ...' 157 'SELECT probe.id, probe.mst_id AS mstId, probe.hauptproben_nr AS hpNr, ...'
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)