Zuletzt bearbeitet vor einem Jahr
von Daniel Quathamer

Masken- und Tabellenlayouts anpassen: Unterschied zwischen den Versionen

(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…“)
 
Zeile 1: Zeile 1:
=Maskenlayouts mit XSLT=
=Masken- und Tabellenlayouts mit XSLT=
==Stylesheets verwalten==
==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  
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  
Zeile 112: Zeile 112:
</xsl:template>
</xsl:template>
</source>
</source>
=Tabellenexport und Weiterverarbeitung=
Sie können Tabellen in verschiedene Formate exportieren, und dabei z.B. [[Kern_Oberflaeche#Individuelle_Kopf-_und_Fusszeilen|Kopf- und Fußzeilen]] anpassen.
== Export von Abfragen nach PDF und XLS ==
Im XML-Frontend können Abfragen direkt nach html (Druckversion), XML, PDF oder XLS (->Excel) exportiert werden. Die zugehörigen Stylesheets lauten:
* '''html (Druckversion)'''
** <code> $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_html_p.xls  </code>
*'''PDF '''
** <code> $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_fo_pdf.xsl  </code>
*'''XLS '''
** <code> $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_xls.xsl </code>
Der PDF-Konverter arbeitet mit der OpenSource-Bibliothek FOP, der Excel-Konverter mit POI. Die Vorlagen können als Grundlage für eigene Stylesheets verwendet werden.
Der PDF-Export funktioniert zwar technisch, aber leider sehen die Ergebnisse oft nicht "schön" aus, da die Berichte in SuperX generell über die Seitenbreite hinaus gehen. Wir empfehlen daher, die Exporte nur bei speziell geeigneten Berichten (mit weniger Spalten) zu verwenden. Außerdem gibt es für Volltexte keine Silbentrennung.
Der XLS-Export wurde mit MS Excel <!--(95-2003)--> und OpenOffice<!-- (1.1.3-2.x)--> getestet. Da die Produkte automatisch auf Seitenbreite skalieren können, sieht der Export hier deutlich besser aus.
Außerdem können grundlegende Layoutelemente wie Kopf- und Fußzeilen und Seitenzahlen individuell angepasst werden, ohne zwingend XSLT-Kenntnisse zu haben.
=== PDF-Export ===
Kurz ein paar Hinweise:
Am besten nimmt man zur Bearbeitung eine bestehende PDF-Vorlage.
Tabellen:
Für jede Spalte muss direkt unter fo:table fin table-column ein Knoten mit der Breite kommen (im mm)
<source lang="xml">
<fo:table>
<fo:table-column column-width=”30mm”>
<fo:block font-size=”10pt” text-align=”start/end” font-weight=”bold” font-family=”serif” line-height=”9pt”
space-before.optimum=”6pt” space-after.optimum=”6pt” language=”en” hyphente=”true”>
<xsl:value-if select=”format-number(/ergebnisse…,’#.###.##0,00,’German’)”/>
German groß ist wichtig!!!
</fo:block>
</fo:table-column>
<fo:table-header>
<fo:table-row>
<fo:table-cell border-width=”0.1mm” border-style=”solid” padding-left=”0.5mm” padding-right=”0.5mm”>..
<fo:table-body>
<fo:table-row><fo:table-cell>..
<fo:block text-align=”center” font-size=”9pt” font-weight=”bold” hyphenate=”false”>
</source>
Blöcke zusammenhalten
<source lang="xml">
<fo:block keep-together.within-page=”always”>
Block1
Block2
</fo:block>
</source>
Um lokal zu testen gibt es die Java-Klasse de.superx.bin.ExcelPdfCreator
Params
-in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_fo_pdf_xxxx.xsl -out/home/superx/test.pdf
(Dateiendung legt fest, dass ein PDF erzeugt werden soll).
=== Excelexport ===
Man kann einen Performance-optimierten Excelexport anstoßen, indem man im Berichtskopf den Kommentar "--ram excelexport" setzt:
Kurz ein paar Hinweise:
Am besten nimmt man zur Bearbeitung eine bestehende xsl-Vorlage.
Man kann eine bestehende Excel-Datei als Vorlage nehmen (attribut Vorlage des xls_workbook Knotens).
Dies ist praktisch, um nicht direkt erzeugbare Einstellungen zu hinterlegen, z. B.
* Skalierung auf 70%
* wiederholende Tabellenüberschrift (Seite einrichten/Tabelle)
* Extras/Schutz/Blattschutz (Poi kann man trotzdem reinschreiben!)
<xls_workbook vorlage="vorlage1.xls" removeAdditionalSheets="true">
Wenn man Tabellen auf Vorrat angelegt hat, kann man mit dem Tag removeAdditionalSheets=true überflüssige Tabellen entfernen.
Es werden alle Zellen neu erzeugt, man kann jedoch einzelne Zeilen oder Zellen überspringen, um in der Excel-Vorlage enthaltenes nicht zu überschreiben:
<xls_row jumpover="true">
<xls_cell jumpover="true"></xls_cell>
Tabellenblatt
<xsl_sheet>
Zelle kann Attribute haben ebene=summe
<xsl_row>
;Zellen
Für Zahlen
<xls_cell style="body_dec" numeric="true">
mögliche Attribute: width (gilt logischerweise für ganze Spalte)
Um lokal zu testen gibt es Java-Klasse de.superx.bin.ExcelPdfCreator
Params
-in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_xls_xxxxxx.xsl -out/home/superx/test.xls
(Dateiendung legt fest, dass eine Excel-Datei erzeugt werden soll)
===Export als Mediawiki-Quellcode===
Wenn sie die Software Mediawiki nutzen, können Sie Tabellenexporte auch direkt als Quellcode exportieren:
[[Bild:tabelle_html_wiki1.png|600px]]
Der Quellcode wird im Browser in einem neuen Fenster ausgegeben:
[[Bild:tabelle_html_wiki2.png|600px]]
Diesen Quellcode können Sie per Copy-Paste in Ihre Mediawiki übernehmen, in der Variante [https://www.hallowelt.com Bluespice] sieht das dann so aus:
[[Bild:tabelle_html_wiki3.png|600px]]

Version vom 26. Juli 2023, 20:39 Uhr

Masken- und Tabellenlayouts 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>

Tabellenexport und Weiterverarbeitung

Sie können Tabellen in verschiedene Formate exportieren, und dabei z.B. Kopf- und Fußzeilen anpassen.

Export von Abfragen nach PDF und XLS

Im XML-Frontend können Abfragen direkt nach html (Druckversion), XML, PDF oder XLS (->Excel) exportiert werden. Die zugehörigen Stylesheets lauten:

  • html (Druckversion)
    • $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_html_p.xls
  • PDF
    • $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_fo_pdf.xsl
  • XLS
    • $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_xls.xsl

Der PDF-Konverter arbeitet mit der OpenSource-Bibliothek FOP, der Excel-Konverter mit POI. Die Vorlagen können als Grundlage für eigene Stylesheets verwendet werden.

Der PDF-Export funktioniert zwar technisch, aber leider sehen die Ergebnisse oft nicht "schön" aus, da die Berichte in SuperX generell über die Seitenbreite hinaus gehen. Wir empfehlen daher, die Exporte nur bei speziell geeigneten Berichten (mit weniger Spalten) zu verwenden. Außerdem gibt es für Volltexte keine Silbentrennung.

Der XLS-Export wurde mit MS Excel und OpenOffice getestet. Da die Produkte automatisch auf Seitenbreite skalieren können, sieht der Export hier deutlich besser aus.

Außerdem können grundlegende Layoutelemente wie Kopf- und Fußzeilen und Seitenzahlen individuell angepasst werden, ohne zwingend XSLT-Kenntnisse zu haben.

PDF-Export

Kurz ein paar Hinweise:

Am besten nimmt man zur Bearbeitung eine bestehende PDF-Vorlage.

Tabellen:

Für jede Spalte muss direkt unter fo:table fin table-column ein Knoten mit der Breite kommen (im mm)

<fo:table>
<fo:table-column column-width=”30mm”>
<fo:block font-size=”10pt” text-align=”start/end” font-weight=”bold” font-family=”serif” line-height=”9pt”
space-before.optimum=”6pt” space-after.optimum=”6pt” language=”en” hyphente=”true”>
<xsl:value-if select=”format-number(/ergebnisse…,’#.###.##0,00,’German’)”/>
German groß ist wichtig!!!
</fo:block>
</fo:table-column>
<fo:table-header>
<fo:table-row>
<fo:table-cell border-width=”0.1mm” border-style=”solid” padding-left=”0.5mm” padding-right=”0.5mm”>..
<fo:table-body>
<fo:table-row><fo:table-cell>..

<fo:block text-align=”center” font-size=”9pt” font-weight=”bold” hyphenate=”false”>

Blöcke zusammenhalten

<fo:block keep-together.within-page=”always”>
Block1
Block2
</fo:block>

Um lokal zu testen gibt es die Java-Klasse de.superx.bin.ExcelPdfCreator Params

-in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_fo_pdf_xxxx.xsl -out/home/superx/test.pdf

(Dateiendung legt fest, dass ein PDF erzeugt werden soll).

Excelexport

Man kann einen Performance-optimierten Excelexport anstoßen, indem man im Berichtskopf den Kommentar "--ram excelexport" setzt:

Kurz ein paar Hinweise:

Am besten nimmt man zur Bearbeitung eine bestehende xsl-Vorlage.

Man kann eine bestehende Excel-Datei als Vorlage nehmen (attribut Vorlage des xls_workbook Knotens).

Dies ist praktisch, um nicht direkt erzeugbare Einstellungen zu hinterlegen, z. B.

  • Skalierung auf 70%
  • wiederholende Tabellenüberschrift (Seite einrichten/Tabelle)
  • Extras/Schutz/Blattschutz (Poi kann man trotzdem reinschreiben!)


<xls_workbook vorlage="vorlage1.xls" removeAdditionalSheets="true">

Wenn man Tabellen auf Vorrat angelegt hat, kann man mit dem Tag removeAdditionalSheets=true überflüssige Tabellen entfernen.

Es werden alle Zellen neu erzeugt, man kann jedoch einzelne Zeilen oder Zellen überspringen, um in der Excel-Vorlage enthaltenes nicht zu überschreiben:

<xls_row jumpover="true">
<xls_cell jumpover="true"></xls_cell>

Tabellenblatt

<xsl_sheet>

Zelle kann Attribute haben ebene=summe <xsl_row>

Zellen

Für Zahlen

<xls_cell style="body_dec" numeric="true">

mögliche Attribute: width (gilt logischerweise für ganze Spalte)

Um lokal zu testen gibt es Java-Klasse de.superx.bin.ExcelPdfCreator Params

-in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_xls_xxxxxx.xsl -out/home/superx/test.xls

(Dateiendung legt fest, dass eine Excel-Datei erzeugt werden soll)

Export als Mediawiki-Quellcode

Wenn sie die Software Mediawiki nutzen, können Sie Tabellenexporte auch direkt als Quellcode exportieren:

tabelle html wiki1.png

Der Quellcode wird im Browser in einem neuen Fenster ausgegeben:

tabelle html wiki2.png

Diesen Quellcode können Sie per Copy-Paste in Ihre Mediawiki übernehmen, in der Variante Bluespice sieht das dann so aus:


tabelle html wiki3.png