Zuletzt bearbeitet vor 3 Monaten
von Daniel Quathamer

Masken- und Tabellengestaltung

Detailansicht verlinken

Es ist möglich die Werte einer bestimmten Spalte als Links auszugeben, sodass mit einem Klick auf diesen weitere Details in einer zweiten Ergebnistabelle gezeigt werden. Dabei wird über Klick auf diesen Link eine zweite Maske aufgerufen, die Maskenfelder dieser Maske mit den übergebenen Parametern gefüllt und die Ergebnistabelle dieser Maske ausgegeben.
Im Folgenden eine Erläuterung anhand eines Beispiels mit Prüfungsanmeldungen. Die Tabelle listet pro Modul die Anzahl der Anmeldung und in einer weiteren Spalte die Anzahl der Studierenden, welche zu ihrem dritten Prüfungsversuch antreten. Die Werte der letzten Spalte mit den Drittversuchen wird verlinkt:

Links in Ergebnistabelle

Nach Klick auf einen der Links erscheint eine weitere Tabelle, welche statt der Anzahl die einzelnen Matrikelnummern inklusive Studiengang ausgibt:

Detailansicht
In diesem Falle fungieren die Werte der Spalte drittversuch als Link. Um dies umzusetzen geben wir eine weitere Spalte hidden_drittversuch aus. Durch hidden wird diese nicht dargestellt und _drittversuch dient als Referenz auf die Spalte drittversuch. Die Spalte hidden_drittversuch enthält den Teil der URL, welcher die Parameter beim Maskenaufruf definiert. Das sieht beispielsweise so aus:

'?tid=30610360&Prüfungskurztext='||pktxt||'&&cachingcontrol=clearmask' as hidden_drittversuch

'||pktxt||' wird ersetzt durch den Wert des Feldes pktxt derselben Zeile:

select 
	pktxt,
	pdtxt,
	(case when pstatus='AN' then 1 else 0 end) as anmeldung,
	(case when pversuch=3 then 1 else 0 end) as drittversuch,
	'?tid=30610360&Prüfungskurztext='||pktxt||'&&cachingcontrol=clearmask' as hidden_drittversuch
into temp tmp_ergebnis

Werden beim Maskenaufruf der Detailansicht weitere Felder benötigt, wird für diese eine Variable angelegt:

#assign stg=""/>
<#if "<<Studiengang>>"!=""><#assign stg="&Studiengang=<<Studiengang>>"?replace("'","")?replace("|",",")/></#if> 

So ist gewährleistet, dass der Parameter nicht in die URL übernommen wird, falls das Maskenfeld leer ist. Zudem werden einfache Hochkommata ' und Pipes | ersetzt, um zugewährleisten, dass die URL funktioniert. Einfache Hochkommata ' könnten beispielsweise bei Schlüsseln, welche als charakter definiert sind übergeben werden und Pipes | bei Aufzählungen. Die Variable wird in den select der Spalte hidden_drittversuch eingebunden:

'?tid=30610360&Prüfungskurztext='||pktxt||'${stg}&&cachingcontrol=clearmask' as hidden_drittversuch

Checkboxen und Querabhängigkeiten

Checkboxen können mit Feldart 10 definiert werden. Bei einfachen Masken, kann felderinfo.relation leer bleiben und in felderinfo.default auch ein fester Wert stehen wie true. Wenn es auf der Maske dynamische Felder gibt, in deren SQL z.B. <<UserID>> steht, ist es wichtig, dass auch für Checkboxen in relation und default datenbanktypische Definitionen der auswählbaren Werte stehen, z.B.

<<SQL>> select 'true','Ja' from xdummy union select 'false','Nein' from xdummy
<<SQL>> select 'false','Nein' from xdummy

Felder auf der Maske verstecken

Wenn Felder auf der Maske versteckt werden sollen, gibt es zwei Möglichkeiten:

  • Feldart 13 -> das Feld ist versteckt und wird intern nicht aufgebaut, im Masken-XML ist es aber enthalten
  • Feldart beliebig, Eintrag in Spalte attribut: hidden
    Das Feld wird intern aufgebaut und kann auch im Masken-SQL per FreeMarker benutzt werden, es wird aber keine Auswahlmöglichkeit auf der Maske angezeigt (benutzt bisher für Feld Kostenstelle, das nicht angezeigt werden sollte, im Masken-SQL aber schon für Rechtekontrollen benutzt wird)
  • Feldart 999 (ab SuperX3.5rc2): Feld wird gar nicht erst aus Datenbank eingelesen, also ob nicht existent

Bei Benutzung der erweiterten kameralen Rechte SxFinRechte:
Auch wenn auf der Maske nicht alle kameralen Felder benötigt werden (z.B. Titel) müssen diese als versteckte Felder vorhanden sein, damit Querabhängigkeiten in Maskenbuttons z.B. FB SxFinRechte(..,"<<Titel>>",....) aufgelöst werden können!

Bei sehr vielen versteckten Feldern rutscht der Abschicken-Button nach unten, da auch versteckte Felder (noch) für die absolute Positionierung berücksichtigt werden. Trick: versteckte Felder in felderinfo auf y=-1 setzen, dann kommen sie nicht in Reihenzählung.