Mercurial > lada > lada-server
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, ...' |