Zum Inhalt springen

Parameter und Bindungen

Eine Abfrage, die immer dieselben vier Wochen liest, taugt für ein Dashboard nicht. Werte, die von außen hereinkommen — ein Zeitraum, eine Linie, eine Fehlerart — stehen deshalb nicht im Abfragetext, sondern als Parameter.

Im Abfragetext steht ein Parameter an seiner Position: $1, $2, $3. Einen Namen bekommt er daneben, in der Parameterliste des Tags. Beides zusammen, weil die Position sagt, wo der Wert eingesetzt wird, und der Name sagt, wer ihn füllt.

Die Liste folgt dem Text. Schreiben Sie in eine laufende Abfrage ein $4, entsteht ein vierter Parameter mit dem vorläufigen Namen param4. Schon vergebene Namen bleiben, wie sie sind — eine Umbenennung würde die Bindung zerreißen, die den Parameter füttert.

Werte werden nie in den Abfragetext geschrieben. Sie gehen als echte Bindeparameter an die Datenbank. Das ist die Grenze, an der eine Eingabe aus einem Widget aufhört, Text zu sein.

Im Reiter Bindungen am Abfrage-Tag verbinden Sie jeden Parameter mit einem anderen Tag. Zur Laufzeit wird der Wert dieses Tags eingesetzt. Gespeichert wird die Bindung über die unveränderliche Kennung des Quell-Tags: Wird die Quelle umbenannt, hält die Bindung.

Ein ungebundener Parameter bleibt leer. Was er trifft, hängt davon ab, wie die Abfrage ihn verwendet.

Legt der Baukasten einen Zeitraum an, heißen die beiden Parameter from und to — und zwar genau so. Der Zeitraumfilter eines Boards füllt Parameter über ihren Namen; eine Abfrage, deren Zeitparameter anders heißen, erreicht der Datumswähler nicht.

Der Baukasten schreibt den Zeitraum so:

($1::timestamptz IS NULL OR "ProductionReport.Timestamp" >= $1::timestamptz)
AND ($2::timestamptz IS NULL OR "ProductionReport.Timestamp" < $2::timestamptz)

Zwei Eigenschaften davon werden im Betrieb gebraucht:

  • Leer heißt offen. Ein nicht gefülltes to bedeutet „kein oberes Ende”, nicht „nichts passt”. Deshalb die IS NULL-Hälfte.
  • Halboffenes Intervall. Untere Grenze eingeschlossen, obere ausgeschlossen. Zwei aneinander anschließende Zeiträume überlappen so weder, noch fällt eine Zeile zwischen sie.

Wer die Parameter füllt, steht am Zeitraum als Satz: Sind from und to an Tags gebunden, nennt der Hinweis diese Tags beim Namen. Sind sie es nicht, sagt er, dass sie noch von nichts gefüllt werden. Üblich sind Memory-Tags wie Plant.Filter.From und Plant.Filter.To, in die die Filter-Widgets des Boards schreiben.

Die Reichweite eines Abfrage-Tags leitet sich aus seinen Bindungen ab. Hängt ein Parameter an einem Tag, das je Benutzer oder je Ansicht einen eigenen Wert hat, gilt das Ergebnis ebenso weit — und nicht für den ganzen Mandanten. Ohne eine solche Bindung ist die Zahl für alle dieselbe.

Der Probelauf hat für jeden deklarierten Parameter ein Eingabefeld. Ein leeres Feld geht als NULL hinein, nicht als leerer Text. Das ist derselbe Unterschied wie oben: ein offenes Ende gegenüber einem Wert, auf den nichts passt.