Zuletzt bearbeitet vor einem Jahr
von Daniel Quathamer

Masken- und Tabellenlayouts anpassen

Version vom 26. Juli 2023, 20:08 Uhr von Daniel Quathamer (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=Maskenlayouts mit XSLT= ==Stylesheets verwalten== Es ist möglich für Spezialfunktionen eigene Stylesheets für einzelne Masken zu hinterlegen. Zunächst mus…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Maskenlayouts mit XSLT

Stylesheets verwalten

Es ist möglich für Spezialfunktionen eigene Stylesheets für einzelne Masken zu hinterlegen. Zunächst muss für das Ergebnis ein neues Stylesheet erzeugt werden. Als Vorlage für Masken können Sie das Muster-Stylesheet

$WEBAPP/xml/maske_html.xsl 

verwenden. Für Ergebnistabellen können Sie das Muster-Stylesheet

$WEBAPP/xml/tabelle_html.xsl 

verwenden. Speichern Sie das Stylesheet unter einem anderen Namen im gleichen Verzeichnis ab, und ändern Sie das Stylesheet. Dann fügen Sie das Stylesheet in die Tabelle sx_stylesheets ein.

sx stylesheets access.png

Das Beispiel zeigt einige Stylesheets, das erste ist bereits Teil des Kernmoduls, das fünfte befindet sich im COB-Modul. Zu den Feldern:

  • filename kennzeichnet den Dateinamen relativ zum Verzeichnis $SUPERX_DIR/webserver/tomcat/webapps/superx/xml.
  • caption dient als Kurzüberschrift, die im Ergebnisblatt als Button angezeigt wird.
  • description stellt einen Erläuterungstext für den Button dar.
  • relation bezieht sich auf die Beziehung des Stylesheets; mögliche Werte sind "mask" für eine Maske und "table" für Tabelle.
  • useragent bietet die Möglichkeit, ein Stylesheet für spezielle Lesegeräte anzubieten, z.B. WAP-Hanys oder Braille-Zeilen.
  • contenttype entspricht dem useragent und kennzeichnet den content-type, der dem Lesegerät im http-header übermittelt werden soll. Möglich sind derzeit die obigen Varianten (svg oder excel sind in Vorbereitung).
  • is_generic. Generisches Stylesheet für alle Ergebnistabellen (1=ja)
  • usage_resultset_data. Nutzung der Ergebnisdaten: Welche Ergebniszeilen soll das Stylesheet verarbeiten. S=Nur Schema, T=Aktuelle Baumstruktur,A=Alle Daten. Die Ausprägung T=aktuelle Baumstruktur wird nur ausgewertet, wenn die Ergebnistabelle in den Zeilen eine Aufklappfunktion bietet.
  • stylesheet_type. Art des Stylesheets (XSL,JRXML,XSL_JRXML,XSL_FO,XML,NATIVE,XLSX). Der Wert XSL_JRXML wird nur ausgewertet wenn das RPTA-Modul installiert ist (Berichtsassistent)
  • jr_datasource. Datenquelle (JasperReports). Wird nur bei JasperReports ausgewertet. Mögliche Werte: RS (Resultset vom Servlet) oder XMLSOURCE (XML vom Servlet). Ersteres ist schneller, zweites ist flexibler.

Im Browser können Sie die Daten mit dieser Maske bearbeiten:

stylesheets suchen bearbeiten.png

Zuordnung eines Stylesheets zu einer Maske

Konkret arbeitet SuperX so: Wenn einer Abfrage ein oder mehrere Stylesheets zugeordnet sind, dann werden die in der Reihenfolge angezeigt, in der sie definiert sind. Wenn kein Stylesheet definiert ist, dann wird das Standard-Stylesheet von SuperX benutzt: maske_html.xsl für Masken sowie tabelle_html.xsl für Tabellen.

Die Zuordnung eines Stylesheets geschieht in der Tabelle sx_mask_style . Der Tupelidentifier des Stylesheets wird in der Tabelle sx_mask_style im Feld stylesheet_id eingetragen. Die Tabelle lässt sich über ein Bearbeitungsformular füllen. Dieses wird erreicht wenn die Maske gesucht wird, welcher ein Stylesheet zugeordnet wird:

MaskenfeldSemester

Das Feld Sortiernummer (ord) kennzeichnet die Reihenfolge der anzubietenden Stylesheets. Wir sehen hier, dass zuerst das generische Standard-Stylesheet angezeigt wird und dann ein JasperReport als weiteres Stylesheet. MaskenfeldSemester

Defaultmäßig sind die Stylesheets für html (Druckversion in neuem Fenster), xml, Excel und PDF in jeder Ergebnistabelle enthalten. Andere Stylesheets werden in der obigen Tabelle zugeordnet.

Einzelne Templates anpassen

Mit eigenen XSL-Stylesheets kann man das Aussehen von Masken oder Ergebnistabellen sehr individuell anpassen. Oben beschrieben war das Vorgehen, dass man eine Kopie von maske_html/pdf/xls.xsl bzw tabelle_html/pdf/xls.xsl machte und darin Änderungen vornahm.

Da inzwischen immer wieder Erweiterungen an den Standardstylesheets vorgenommen werden, kommen diese Erweiterungen dann jedoch nicht in die kopierten Spezialstylesheets.

Daher sind die Stylesheets inzwischen etwas „objektorientierter" und kleine Änderungen kann man auch in der Datei

.../webapps/superx/xml/page_components_final.xsl 

vornehmen.

Beispiel aus der Praxis, bei 2-3 Masken sollte unter dem Maskennamen noch ein Link zu PDF-Dateien erscheinen.

In der Standard maske_html.xsl ist nach dem Titel ein template-Aufruf definiert.

<p class="maskentitel"><xsl:value-of select="maske/@name" /></p>
<xsl:call-template name="pccustomize"> <xsl:with-param name="position" select="'mask_post_title'">
</xsl:with-param> </xsl:call-template>

Das Template ist als leer in Page-Components.xsl definiert. Man kann es in pageComponents_final.xsl definieren, dann wird es überschrieben.

<xsl:template name="pccustomize">
 <xsl:param name="position"/>
 <xsl:if test="$position='mask_post_title'">
   <!-- hier kommt der individuelle Inhalt rein -->
  </xsl:if>
</xsl:template>

Die Links werden nur bei den entsprechenden Masken eingebaut.

Außerdem wird standardmäßig das leere maskonload überschrieben, um den div der folgenden Maskenfelder etwas tiefer zu setzen, damit Platz für einen größeren Titel ist.

Um bei bestimmten Masken Export-Buttons auszublenden, kopieren Sie das entsprechende Template (hier: exportButtons) aus der Page-Components.xsl in die pageComponents_final.xsl und fügen dort eine if-Bedingung ein.

Beispiel für das Entfernen des PDF-Export-Buttons für die Masken mit der tid 16000 und 17000:

 <xsl:template name="exportButtons" >
...
<xsl:if test="/ergebnisse/ergebnis/maskenname/@id!='16000' and /ergebnisse/ergebnis/maskenname/@id!='17000'">
 <!-- hier kommt der PDF-Button -->
</xsl:if>
...
</xsl:template>

Will man ein spezielles Tabellenstylesheet erzeugen, braucht man tabelle_html.xsl nicht mehr kopieren, sondern erzeugt eine xsl-Datei mit den Standard-Importen und fügt dort den Import für tabelle_html.xsl hinzu.

<xsl:import href="xsl_functions.xsl" />
<xsl:import href="resultset_html.xsl" />
<xsl:import href="interLinks_html.xsl" />
<xsl:import href="pageComponents_html.xsl" />
<xsl:import href="tabelle_html.xsl" />
<xsl:import href="pageComponents_html_final.xsl" />

als weiteres braucht man nur das Template von tabelle_html.xsl zu überlagern, was geändert werden soll.

Einfachstes Beispiel - keine Erläuterungslinks anzeigen:

Template explanation wird überlagert

 <xsl:template name="explanation"/>

Bei Bedarf kann man auch die standardmäßig leeren Funktionen wie

<xsl:call-template name="tablecustomize"><xsl:with-param name="position"
select="'table_post_center'"></xsl:with-param></xsl:call-template>

überlagern.

Am Ende folgt dann, um die Tabelle aufzubauen.

<xsl:template match="/">
<xsl:call-template name="table"/>
</xsl:template>