![]() |
eine neuere Version liegt hier |
Im Masken-Tutorial wird erläutert wie Quellcodes für Masken und Felder erstellt werden. Damit werden grundlegende Masken. und Tabellenlayouts erzeugt. Darüber hinaus gibt es viele weitere Möglichkeiten, diese Layouts anzupassen.
Spaltenlayout in Ergebnistabellen
Wie im Masken-Tutorial gezeigt, wird das Spaltenlayout (Überschriften, Breite) in der sog. "xil_proplist" gesteuert (der Name stammt übrigens vom früher im SuperX-Windows-Client eingesetzten XVT-Compiler zur Layoutdarstellung). Das Format ist etwas eigenwillig und soll hier erläutert werden.
Die Attribute in der xil_proplist
Zunächst ein Beispiel: der Code für die Maske "Bewerbungsprozess nach Studiengang" im ZUL-Modul beginnt wie folgt:
XIL List sizable_columns horizontal_scrolling drop_and_delete movable_columns white_space_color=COLOR_WHITE fixed_columns=2 min_heading_height=55 Column CID=0 heading_text="Ebene" center_heading row_selectable heading_platform readonly width=5 text_size=20 explanation=""
Hier sehen Sie die Ausgabe:
Der Code stammt wie gesagt von einem alten Windows-Client und wurde nur aus Gründen der abwärtskompatibilität übernommen. Nur die fett hervorgehobenen Code-Teile werden überhaupt ausgewertet. Wichtig ist aber, daß die Absatzstruktur des vorhandenen Dokuments beibehalten wird (d.h. jede Spalte ist in einem Absatz definiert, der mit "Column" beginnt). Am Ende der gesamten Xil_proplist befindet sich die Endemarke "@@@" in einem neuen Absatz.
Hier eine Erläuterung der Attribute:
Name | Bedeutung |
Column | Definiert eine neue Spalte. Achtung: die Anzahl der "Column"-Anweisungen muss mit der Anzahl der Spalten übereinstimmen, die beim select_stmt geliefert werden. |
heading_text | Die Spaltenüberschrift in der Ergebnistabelle. Hier sind noch spezielle Layoutanweisungen möglich (s.u.), außerdem können Sie Glossar pflegen über Captions-HISinOne-BI nutzen |
width | Die Spaltenbreite in Zeichen. Diese Anweisung wird im HTML-Layout nicht ausgewertet. Im PDF-Layout wird sie relativ ausgewertet: Alle Spaltenbreiten werden addiert, und zum DIN-A-4-Querformat in Beziehung gesetzt, und dann werden alle Spalten prozentual auf cm heruntergerechnet.
In Excel werden die Breiten in Zeichen umgesetzt. |
explanation | Erläuterungstext, der zu der Ergebnistabelle in einem separation Fenster angezeigt werden kann. Achtung: Wenn Sie explanations einsetzen, müssen alle Spalten dieses Attribut haben. Bitte nicht nur einzelne Spalten dokumentieren. Im Notfall schreiben Sie nur die Spaltenüberschrift rein. |
Mehrzeilige Spaltenüberschriften
Im Attribut "heading_text" können auch mehrzeilige Spaltenüberschriften definiert werden. Fügen Sie den Zeilenumbruch aber nicht direkt ein, sondern codieren Sie diesen als "\n". Bei der Ausgabe wird dies als Umbruch umgesetzt.
Beispiel: Der Code
Column CID=0 heading_text="Art\nd.Ebene" center_heading row_selectable heading_platform readonly width=10 text_size=20 explanation="@@@sos_ebene@@@"
Verknüpfte Spaltenüberschriften
Um Spaltenüberschriften zu verknüpfen, muss man wie folgt vorgehen:
Alle Zellen, die verknüpft werden sollen, müssen den gleichen Namen haben, und mit dem Steuerzeichen "\000" sowie einem Zeilenumbruch "\n" enden.
Beispiel: Der Code
Column CID=4 heading_text="Bewerbungen \000\n gesamt" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10 explanation="Bewerberanzahl "
Column CID=4 heading_text="Bewerbungen \000\n weiblich" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10 explanation=""
Column CID=5 heading_text="Bewerbungen \000\n weibl. in %" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10 explanation=""
dynamische Spaltenanzahl
kann mit Freemarker realisiert werden, Einfaches Beispiel
nur bei FIN_Quellsystem 1 (MBS) Soll Ansatz ausgegeben werden.
abschluss-Select in masken-sql
select name,<#if K_FIN_Quellsystem=1> hhans</#if>, einnahmen, ausgaben from fin;
XIL
Column CID=4 heading_text="Name" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
<#if K_FIN_Quellsystem=1>
Column CID=4 heading_text="Ansatz" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
</#if>
Column CID=4 heading_text="Einnahmen" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
Column CID=4 heading_text="Einnahmen" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
weiteres Beispiel: Spalte Bewilligung soll nur angezeigt werden, wenn werte größer 0 in masken sql
<sqlvars>
<sqlvar bewilligungen>select sum(bewill) from fin where ins=<<Ins>> </sqlvar>
</sqlvars>
Abschluss-select
select name,ansatz<#if bewilligungen>0> , bewill, </#if> , ausgaben,verfuegbar from tmp_erg.
XilProplist
XIL
Column CID=4 heading_text="Name" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
<#if bewilligungen>>0 >
Column CID=4 heading_text="bewill" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
</#if>
Column CID=4 heading_text="Ausgaben" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
Column CID=4 heading_text="verfügbar" center_heading
row_selectable col_selectable rightJust heading_platform readonly
width=10
Bisher musste dafür in der XIL-Proplist der sqlvar-Block wiederholt werden, in der aktuellen SuperX-Version stehen aber die sqlvars aus der masken-sql automatisch zu Verfügung.
Hochschulspezifische Einstellungemöglichkeit
Der Standardbericht sollte so viele Spalten wie maximal benötigt enthalten, in der Standardauslieferung werden alle Spalten gezeigt. Beispiel standard schluss-select select name, akt_soll,einnahmen,aus,verfuegbar from tmp-erg
Wenn eine Hochschule nicht alle Spalten sehen möchte, oder die Spalten in einer anderen Reihenfolge (!), folgendes Vorgehen:
in sx_repository eine Variable definieren CUSTOM_XXXXXX (Maskennummer)
assign, der einen Hash definiert
<#assign customize={"resulttable":[
{"field":"name","caption":"Gliederung","width":14},
{"field":"akt_soll","caption":"Ansatz","width":15,"explanation":"Haushaltsansatz inkl.Einnahmen und Reste (Haushalterisch: Aktuelles Soll)"},
{"field":"einnahmen","caption":"Einnahmen","width":10},{"field":"aus","caption":"Ausgaben","width":10},
{"field":"fest","caption":"Festgelegt","width":10},
{"field":"verfuegbar","caption":"verfügbar","width":12,"explanation":"@@@fin_verfuegbar@@@"}
]}/>
es wird ein customize-hash defniert, darin sind Felder definiert, die angezeigt werden sollen.
(Nach Eingabe/Änderung manager-cache leeren!)
So wie oben ist die gleiche Ausgabe wie Standard.
Reihenfolge ändern: verfügbar nach vorne
<#assign customize={"resulttable":[
{"field":"name","caption":"Gliederung","width":14},
{"field":"verfuegbar","caption":"verfügbar","width":12,"explanation":"@@@fin_verfuegbar@@@"},
{"field":"akt_soll","caption":"Ansatz","width":15,"explanation":"Haushaltsansatz inkl.Einnahmen und Reste (Haushalterisch: Aktuelles Soll)"},
{"field":"einnahmen","caption":"Einnahmen","width":10},{"field":"aus","caption":"Ausgaben","width":10},
{"field":"fest","caption":"Festgelegt","width":10}
]}/>
Will eine Hochschule zum verfügbar vorn stehen haben, und akt_soll gar nicht sehen, muss Eintrag so aussehen
<#assign customize={"resulttable":[
{"field":"name","caption":"Gliederung","width":14},
{"field":"verfuegbar","caption":"verfügbar","width":12,"explanation":"@@@fin_verfuegbar@@@"},
{"field":"einnahmen","caption":"Einnahmen","width":10},{"field":"aus","caption":"Ausgaben","width":10},
{"field":"fest","caption":"Festgelegt","width":10}
]}/>
field ist Feldname in der tmp_erg-tabelle, caption Spaltenüberschrift, width für xil-proplist und explanation ggfs. auch
man muss genau auf richtige Anzahl von { }, achten, sonst kommt beim Maskenaufruf interpretation error
im Masken-sql gegen Ende baut man ein
<#if CUSTOM_xxxxxx?exists>
<#assign inlineTemplate=CUSTOM_xxxxxx?interpret>
<@inlineTemplate/>
</#if>
wenn eine Hochschule ein custom_xxx angelegt hat, wird der Inhalt interpretiert und ein customize-Hash steht zur Verfügung.
Abschluss-select prüft also
<#if customize?exists> --customize existiert, abschluss select daraus aufbauen
<div style="margin-left:0cm;margin-right:0cm;">select <#foreach f in customize.resulttable>
${f.field} <#if h_has_next>,</#if>
<div style="margin-left:0cm;margin-right:0cm;"></#foreach>
<div style="margin-left:0cm;margin-right:0cm;"> from tmp_erg2 ;
<#else> -- kein customize objekt existiert, standard abschluss select
select name,akt_soll,einnahmen,ausgaben,verfügbar from tmp_erg;
</#if>
Für die XIL-Proplist muss es genauso laufen:
XIL List
--freemarker template
<#if CUSTOM_xxxx?exists>
<#assign inlineTemplate=CUSTOM_xxxx?interpret>
<@inlineTemplate/>
</#if>
<#if customize?exists>--wenn Hochschul-customizeobjekt exisit xil dynamisch aufbauen
<#foreach f in customize.resulttable>
Column CID=0 heading_text="${f.caption}"
center_heading explanation="<#if f.explanation?exists>${f.explanation}</#if>"
row_selectable col_selectable heading_platform readonly width=${f.width}
</#foreach>
<#else> --standard xil list
Column CID=0 heading_text="Name explanation="" center_heading row_selectable col_selectable heading_platform readonly width=9 text_size=0
Column CID=0 heading_text="aktsoll explanation="" center_heading row_selectable col_selectable
..
</#if>
Spezielle Spaltennamen
Baumdarstellung
Um im XML-Frontend eine Baumstruktur (Treetable) zu erhalten die auf- und zugeklappt werden kann, muss nur in dem letzten select als erstes Feld die Spalte "ebene" angegeben werden. Dieses Feld soll Zahlen enthalten, welche die Ebene angeben (1= erste Ebene, 2= zweite Ebene …). Dabei ist darauf zu achten, dass es keine Sprünge zur übernächsten höheren Ebene gibt, z.B. nicht von Ebene 2 auf Ebene 4 gesprungen wird. Andersherum ist dies kein Problem, also z.B. von Ebene 4 auf Ebene 2. Wenn es nun zuerst eine Spalte mit Ebene 1 gibt und darauf mehrere mit der Ebene 2 sind diese alle unter der Spalte der Ebene 1. Die Reihenfolge der Auflistung entscheidet dabei den übergeordneten Knoten und nicht nur die Ebene.
Ein Beispiel:
Zum Nachladen von Ergebniszeilen wird das Stylesheet tabelle_html_rows.xsl benutzt.
Wenn man ein spezielles Stylesheet hat, das auch die nachgeladenen Zeilen besonders darstellt, kann man eine eigene Variante von tabelle_html_rows.xsl erstellen und den Dateinamen in der Maske bei chartx eintragen.
Wenn die Ergebnistabelle an das XML-Frontend übergeben wird, dann können spezielle Spalten für die Navigation eingesetzt werden. Die Spaltennamen werden im letzten select des select_stmt einer Maske übergeben.
- nexttable
- Link auf eine andere SuperX-Tabelle; der Inhalt des Feldes wird dann um den Pfad zum Servlet, (optional auch den String der Sessionid) und den Passus
"SuperXmlTabelle?tid="
ergänzt, d.h. dem Servlet wird als erster Parameter die maskeninfo-tid übergeben.
- nextwindowtable
- Das gleiche wie "nexttable", nur es wird ein neues Fenster geöffnet.
- nextpage
- Link auf eine andere SuperX-Tabelle wie nexttable, es wird nur kein Icon und ein anderer Target genutzt.
- nextmask
- Link auf eine andere SuperX-Maske; der Inhalt des Feldes wird dann um den Pfad zum Servlet, (optional auch den String der Sessionid) und den Passus
"SuperXmlMaske?tid="
ergänzt.- Code :
20010&id=2044
- Link:
http://<URL der Webapplikation>>/servlet/SuperXmlMaske?tid=20010&id=2044
- Icon: Datei:Plus rect.gif
- Code :
- nextdelete
- Link auf eine andere SuperX-Maske; Im Unterschied zu nextmask wird hier ein anderes Icon gewählt: Die Ergebnisseite wird dann um einen Delete-Button [[Image:|top]] ergänzt.
- Icon: Datei:delete.gif
- nextedit
- Link auf ein DBForms-Formular relativ zur URL des Servlets. die Ergebnisseite wird um einen "Bearbeiten"-Button [[Image:|top]] ergänzt.
- nextmail
- Feldinhalte werden um einen Mailto-Tag ergänzt.
- Code :
z.B.info@superx-projekt.de
- Link:
<a mailto:" info@superx-projekt.de"> info@superx-projekt.de</a>
- Code :
- url
- Feldinhalte werden um einen href-Tag (sowie wenn nötig um ein "http") ergänzt.
- Code:
www.superx-projekt.de
- Link:
<a href="http://www.superx-projekt.de">www@superx-projekt.de</a>
- Icon: ohne
- Code:
- nextlink
- Link auf eine externe Seite oder eine andere SuperX-Tabelle; anders als bei nexttable wird ein frei wählbarer textueller Link angegeben, wobei der Volltext des Links und der eigentliche Linkt durch ein Trennzeichen "|" getrennt sind.
- Code:
"Erläuterungen|http://www.erlaeuterungen.de"
- Link:
<a href="http://www.erlaeuterungen.de">Erläuterungen</a>
- Code:
- Wenn nach dem Trennzeichen keine externe Web-Adresse angeboten wird (erkennbar am vorangestellten "http:"), dann wird der Inhalt des Feldes um den Pfad zum Tabellen-Servlet ergänzt:
- Code:
Details zur Hochschule|20010&id=2044
- Link:
<a href=../servlet/SuperXmlTabelle?tid=20010&id=2044>Details zur Hochschule</a>
- Code:
- nextgenericlink
für generische LInks mit optional JSESSIONID ersetzt
- nextwindowgenericlink
wie nextgenericlink nur mit Target _blank (ab Kernmodul 5.0 / HisInOne 2023.06)
- nextserverlink
Link auf eine andere Seite auf dem aktuellen Server, z.B. die vorgeschaltete HISinOne-Instanz
- Code:
CONCAT ( ' |','/<<his1_refapp>>', '/pages/startFlow.xhtml?_flowId=searchStudentData-flow&personId=' ,personid ) as nextserverlink
- Link:
https://muster-head.his.de/qisserver/pages/startFlow.xhtml?_flowId=searchStudentData-flow&personId=745
- Icon:

- nextdokulink
- Link auf eine integrierte Wiki-Seite;
- Code:
CONCAT ( ' |','/<<his1_refapp>>', '/pages/cs/sys/portal/documentation/documentation.faces?navigationPosition=documentation&site=', K.doku_link, '.xhtml' ) as nextdokulink,\
- Link:
http://<URL der Webapplikation>>/hisinone/pages/cs/sys/portal/documentation/documentation.faces?navigationPosition=documentation&site=Konstanten_-_HISinOne-BI.xhtml
- Icon: Datei:help.gif
Einzelne Zellen oder Spalten formatieren (CSS)
Wenn im Masken-Resultset zum Beispiel eine Spalte "verfuegbar" existiert, kann über eine zusätzliche Spalte nach dem Muster
hidden - Spaltenname - css
Also hier z.B. eine versteckte Spalte hiddenverfuegbarcss mit dem Inhalt des css-Klassennamens, z.B. neu in kern44 td.boldnumber:
Auszug
create temp table tmp_erg
(
titel char(5),titelbez varchar(255),sort smallint,
hhans decimal (14,2),
sperre decimal (14,2),
reste decimal(14,2),
akts decimal(14,2),
einnahmen decimal(14,2),
ausgaben decimal (14,2),
fest decimal (14,2),
verfuegbar decimal (14,2),
hiddenverfuegbarcss varchar(200)
) <@informixnolog/>;
…
update tmp_erg set hiddenverfuegbarcss='boldnumber' where sort=0;
select titelbez, hhans,sperre ,reste,akts,einnahmen,ausgaben,fest,verfuegbar+fest,verfuegbar,
hiddenverfuegbarcss from tmp_erg order by sort,titel;
entsprechende XIL_proplist-Definition muss es auch geben
Dezimalstellen variieren
Normalerweise werden Werte mit Dezimalstellen immer zweistellig wiedergegeben. Im Ausnahmefall kann man dies ändern, indem man eine Spalte mit dem Namensschema "hidden"+Spaltenname+"dp" hinter die jeweilige Spalte setzt, und der Inhalt der Spalte enthält die Zahl der Nachkommastellen (0-6 möglich.
Beispiel:
select ... plan_soll ,
1::integer as hiddenplan_solldp,...
bewirkt, dass die Spalte plan_soll einstellig dargestellt wird.
Dies klappt nicht bei verschachtelten Spaltenlayouts.
Datenbalken
Datenbalken in Standardberichten allgemein
Es gibt die Möglichkeit, in der Ergebnistabelle horizontale Balken (In Excel nennt man dies "Datenbalken") anzeigen zu lassen. Dies kann z.B. dazu genutzt werden, ein Balkendiagramm darzustellen.
Hier ein Beispiel: Maske Administration -> Benutzer -> Gruppe suchen -> dort im Ergebnis die Spalte "Anteil Benutzer an Gesamtzahl (in %) "
Voreingestellt ist auch, dass beim MouseOver ein Tooltip mit der Zahl angezeigt wird.
Es gibt die Möglichkeit, die Datenbalken zu variiieren:
- Balken links- oder rechtsbündig
- Die Breite der Balken wird in Pixel angegeben, Sie können die Breite aber anpassen
- Der jew. Balken kann relativ zu einem Gesamtwert dargestellt werden
- Der gesamte Balken kann in der Breite angepaßt werden
- Auch Balken mit Serien sind möglich
Datenbalken linksbündig
Der Default des Datenbalkens ist linksbündig, wenn sie also "_graph" als Spaltenüberschrift nehmen, wird der Balken linksbündig gezeichnet.
Datenbalken rechtsbündig
Wenn sie "_graphbarright" als Spaltenüberschrift nehmen, wird der Balken rechtsbündig gezeichnet.
Datenbalken Breite
Die Gesamtbreite der Spalte mit dem Datenbalken (wie gewohnt anteilig zu allen Spalten) wird in der xil_proplist festgelegt. Im folgenden Beispiel wurde die Balkenbreite von 10 auf 20 erhöht:
Wenn der Wert für den Datenbalken kein Prozentwert ist (also nicht die Skala 1-100 hat), können Sie den Gesamtwert mit "|" dahinter setzen. Dadurch wird die Breite anteilig berechnet. Beispiel:
Eine Spalte hat den Wert 44 von einem Gesamtwert von 50. Damit der Datenbalken nicht schmaler als die Häfte ist geben Sie die Gesamtsumme dahinter an:
select ..., '44|50' as _graph2 ...
Damit wird der Datenbalken mit der Hälfte der Gesamtbreite angezeigt.
Datenbalken mit Beschriftung
Sie können den Datenbalken auch mit einer Beschriftung versehen, indem Sie als Spaltenname "_graphbarwithlabel" nutzen:
Je nach Länge der Zahl und Breite des Balkens kann es zu unschönen Darstellungen kommen.
Datenbalken in xCube
Da in xCube die Masken nicht änderbar sind, können Sie die Funktion über die Maske bzw. das Maskenfeld "Spaltenvisualisierung" direkt nutzen.
- Siehe in xCube
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.
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:
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:
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.
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:
Der Quellcode wird im Browser in einem neuen Fenster ausgegeben:
Diesen Quellcode können Sie per Copy-Paste in Ihre Mediawiki übernehmen, in der Variante Bluespice sieht das dann so aus: