<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://superxhosting.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Danielq</id>
	<title>SuperX - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://superxhosting.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Danielq"/>
	<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php/Spezial:Beitr%C3%A4ge/Danielq"/>
	<updated>2026-09-18T18:08:35Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Masken-_und_Tabellengestaltung&amp;diff=16617</id>
		<title>Masken- und Tabellengestaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Masken-_und_Tabellengestaltung&amp;diff=16617"/>
		<updated>2026-09-14T19:27:17Z</updated>

		<summary type="html">&lt;p&gt;Danielq: /* Eigene Navigationsspalten zum Anklicken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Vorbemerkung SuperX/HISinOne-BI=&lt;br /&gt;
;Vorbemerkung:Die im folgenden vorgestellten Techniken funktionieren in SuperX und in der HISinOne-BI in der Oberfläche &amp;quot;Business Intelligence&amp;quot;-&amp;gt; &amp;quot;Standardberichte&amp;quot; (ggf. mit dem Zusatz &amp;quot;konfigurieren&amp;quot; oder &amp;quot;klassisch&amp;quot;). Nicht alle der im Folgenden dargestellten Möglichkeiten funktionieren in der Angular Oberfläche von HISinOne-BI.&lt;br /&gt;
&lt;br /&gt;
=Selektionsmasken anpassen=&lt;br /&gt;
==Checkboxen und Querabhängigkeiten==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;UserID&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
steht, ist es wichtig, dass auch für Checkboxen in relation und default datenbanktypische Definitionen der auswählbaren Werte stehen, z.B.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select &#039;true&#039;,&#039;Ja&#039; from xdummy union select &#039;false&#039;,&#039;Nein&#039; from xdummy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und im Defaultwert:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select &#039;false&#039;,&#039;Nein&#039; from xdummy;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Felder auf der Maske verstecken==&lt;br /&gt;
&lt;br /&gt;
Wenn Felder auf der Maske versteckt werden sollen, gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
*Feldart 13 -&amp;gt; das Feld ist versteckt und wird intern nicht aufgebaut, im Masken-XML ist es aber enthalten &lt;br /&gt;
&lt;br /&gt;
* Feldart beliebig, Eintrag in Spalte attribut: hidden &amp;lt;/br&amp;gt; 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) &lt;br /&gt;
&lt;br /&gt;
* Feldart 999 (ab SuperX3.5rc2): Feld wird gar nicht erst aus Datenbank eingelesen, also ob nicht existent &lt;br /&gt;
&lt;br /&gt;
Bei Benutzung der erweiterten kameralen Rechte SxFinRechte:&amp;lt;/br&amp;gt;&lt;br /&gt;
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(..,&amp;quot;&amp;lt;&amp;lt;Titel&amp;gt;&amp;gt;&amp;quot;,....) aufgelöst werden können!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
==Felder zum Verarbeiten von Eingaben per Javascript==&lt;br /&gt;
;Vorbemerkung:Diese Auswertung wird mit Release Kernmodul 5.1 bzw. HISinOne-BI 2024.06 ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
Ab  können Sie vor dem Abschicken einer Maske benutzerdefiniterte Scripte ausführen, die z.B.&lt;br /&gt;
* bei Feldinhalt a von Feld x das Feld y mit dem Inhalt b befüllen&lt;br /&gt;
** Beispiel fürs Land Sachsen: wenn im Feld &amp;quot;Bericht&amp;quot; der Wert &amp;quot;Stellenbewirtschaftungsbericht (Excel)&amp;quot; ausgewählt wird, wird&lt;br /&gt;
*** das Feld &amp;quot;tablestylesheet&amp;quot; mit dem entsprechenden JasperReport befüllt&lt;br /&gt;
*** das Feld &amp;quot;Ausgabeformat&amp;quot; mit dem Wert für Excel befüllt.&lt;br /&gt;
* Es gibt noch viele andere Szenarien, z.B. können bestimmte Eingaben geprüft und, bei Warnungen, entsprechende Meldungen ausgegeben werden, und das Abschicken wird verhindert.&lt;br /&gt;
&lt;br /&gt;
Technisch ist das wie folgt umgesetzt: Wenn eine Maske ein Feld mit dem Namen &amp;quot;_customValidation&amp;quot; hat, wird &lt;br /&gt;
* der defaultwert des Feldes ausgewertet, dieser enthält den Namene einer Javascript-Methode&lt;br /&gt;
* diese Methode wird &#039;&#039;vor&#039;&#039; dem Abschicken einer Maske ausgeführt und je nachdem ob &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; zurückgeliefert wird, wird die Maske tatsächlich abgeschickt oder nicht.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
* Die Maske &amp;quot;Maske kopieren&amp;quot; ermöglicht es, Maskenkopien anzulegen. Die Zielnummer sollte nach den Konventionen von SuperX in einem 10er oder 20er Nummernkreis bestehen. Wenn eine andere Zahl eingegeben wird, sollte eine Warnung erscheinen.&lt;br /&gt;
* das Maskenfeld sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:masken_kopieren_custom_validation_feld.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Im Maskenfeld befindet sich eine Referenz auf die Javascript-Funktion &#039;&#039;validiereNeueMaskennr&#039;&#039;. Dieser Funktion wird vom Server immer der Parameter des Formulars und der Plattform (superx oder HISinOne-BI) übergeben. Hier der Quellcode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 function validiereNeueMaskennr(frm,platform)&lt;br /&gt;
{&lt;br /&gt;
	var neueNr=frm.elements[&amp;quot;Neue tid&amp;quot;].value;&lt;br /&gt;
	if(neueNr.indexOf(&amp;quot;0&amp;quot;, neueNr.length - 1) == -1)&lt;br /&gt;
	{&lt;br /&gt;
		var meldung=&amp;quot;&amp;lt;p&amp;gt;Achtung: bitte w&amp;amp;auml;hlen Sie eine Maskennummer, die mit 0 endet. Zu Nummernkreisen &amp;quot;;&lt;br /&gt;
		if(platform==&amp;quot;his1&amp;quot;)&lt;br /&gt;
			meldung +=&amp;quot;siehe &amp;lt;a href=&#039;https://wiki.his.de/mediawiki/index.php/Masken_entladen_und_einspielen_-_HISinOne-BI&#039; target=&#039;_blank&#039;&amp;gt;Leitfaden&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
			else&lt;br /&gt;
			meldung +=&amp;quot;siehe &amp;lt;a href=&#039;http://www.superx-projekt.de/doku/entwicklung/masken/f_MaskenerstellenausKopien.htm&#039; target=&#039;_blank&#039;&amp;gt;Leitfaden&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
		document.getElementById(&#039;validation&#039;).innerHTML = meldung;&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Im Ergebnis passiert nun folgendes, wenn man eine &amp;quot;ungerade&amp;quot; Maskennummer als &amp;quot;Neue Tid&amp;quot; eingibt und abschickt:&lt;br /&gt;
&lt;br /&gt;
[[Bild:masken_kopieren_custom_validation.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Es erscheint eine Warnung, und die Maske wird nicht abgeschickt.&lt;br /&gt;
&lt;br /&gt;
== Felder für Benutzergruppen verstecken ==&lt;br /&gt;
Es ist möglich, auf einzelnen Masken Felder für einzelne Gruppen zu verstecken. Dies dient z. B. dazu, das Feld &amp;quot;Hörerstatus&amp;quot; für die Gruppe &amp;quot;Externe Anwender&amp;quot; auszublenden, d.h. es würde immer &amp;quot;Alle&amp;quot; selektiert. Um dies zu realisieren geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
# Ermitteln Sie zunächst die Feldnummer unter Administration-&amp;gt;Masken -&amp;gt; Felder -&amp;gt; Feld suchen.&lt;br /&gt;
# Nutzen Sie die Selektionsparameter, um das gewünschte Feld zu suchen.&lt;br /&gt;
# Klicken Sie auf &amp;quot;Abschicken&amp;quot;. Die Nummer steht in der Spalte &amp;quot;tid&amp;quot;.&lt;br /&gt;
# Öffnen Sie Administration-&amp;gt; Tabelle suchen&lt;br /&gt;
#Geben Sie als Stichwort &amp;quot;pref&amp;quot; ein.&lt;br /&gt;
#Es erscheinen ein Listen- und ein Detailformular für die Tabelle.&lt;br /&gt;
#Klicken Sie auf &amp;quot;Bearbeiten&amp;quot;. Es öffnet sich ein Detailformular.&lt;br /&gt;
# Wählen Sie die gewünschte &amp;quot;Gruppe&amp;quot; sowie das &amp;quot;Feld&amp;quot; aus.&lt;br /&gt;
#Wählen Sie unter Voreinstellung &amp;quot;Versteckt&amp;quot;, damit wird das Feld für die jeweilige Gruppe ausgeblendet.&lt;br /&gt;
# Klicken Sie auf &amp;quot;Neuen Datensatz einfügen&amp;quot; bzw. &amp;quot;Speichern&amp;quot; .&lt;br /&gt;
# Nach dem Speichern können Sie diesen Datensatz &amp;quot;kopieren&amp;quot; oder einen &amp;quot;Neuen Datensatz anlegen&amp;quot; . Auch ein Blättern durch die angelegten Datensätze ist nun möglich.&lt;br /&gt;
&lt;br /&gt;
== Anpassung von Feld-Vorbelegungen ==&lt;br /&gt;
Manche Masken haben Vorbelegungen, die bei der Hochschule nicht passen, z.B. Hörerstatus &amp;quot;Alle&amp;quot; im Bereich Studierende. Die in den jeweiligen Komponenten ausgelieferten Masken lassen sich zwar ändern, aber beim Einspielen eines neuen Releases würden diese überschrieben. Um dies zu vermeiden gibt es zwei Wege:&lt;br /&gt;
&lt;br /&gt;
* Sie kopieren die Maske in einen eigenen Nummernkreis, dann ist sie vor Upgrades &amp;quot;geschützt&amp;quot;.&lt;br /&gt;
* Sie ändern die Maske, und führen danach eine [Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung| Customize]-Regel ein, die nach jedem Upgrade ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Beide Varianten haben Vor- und Nachteile. Die erste Variante ist besser, wenn Sie nur eine Maske ändern wollen, und ggf. auch noch andere Layouts (z.B. auch Spaltenlayouts der Ergebnistabelle) ändern wollen. Die zweite Variante ist besser, wenn Sie auf einen Schlag mehrere Masken bzgl. einer Kleinigkeit ändern wollen. Das obige Beispiel &amp;quot;Hörerstatus&amp;quot; wäre also besser mit der zweiten Variante lösbar, weil es das Feld in vielen Masken gibt. Hier ein Beispiel wie man das macht:&lt;br /&gt;
&lt;br /&gt;
Ändern Sie die Feldvorbelegung über die Maske Administration-&amp;gt; Masken -&amp;gt; Felder -&amp;gt; &amp;quot;Feld suchen&amp;quot;, z.B. beim Feld &amp;quot;Hörerstatus&amp;quot; in der Maske &amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Bisheriger Wert in Spalte Defaultwert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr, eintrag from hoererstatus  where eintrag=&#039;alle&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Neuer Wert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr, eintrag from hoererstatus  where eintrag=&#039;Haupthörer&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Speichern Sie die Änderung, und testen Sie die Maske. Wenn das Ergebnis Sie zufrieden stellt, können Sie es wie folgt vor Änderungen durch Releases schützen:&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie eine Datei $SOS_PFAD/conf/customize.sql&lt;br /&gt;
&lt;br /&gt;
und schreiben Sie den Inhalt hinein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 --Änderung xx.xx.xxxx Maskenvorbelegung von Hörerstatus &amp;quot;alle&amp;quot; auf Haupthörer ändern:&lt;br /&gt;
update felderinfo&lt;br /&gt;
 set defaultwert=&lt;br /&gt;
     &#039;&amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr, eintrag from hoererstatus  where eintrag=&#039;&#039;Haupthörer&#039;&#039;&#039;&lt;br /&gt;
 where name=&#039;Hörerstatus&#039; and tid=16004;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit wird diese Änderung nach jedem Upgrade ausgeführt. Sie können die Änderung auch direkt für alle Masken vornehmen, indem Sie die Where-Bedingung &amp;quot;and tid=16004&amp;quot; entfernen.&lt;br /&gt;
&lt;br /&gt;
Hier noch ein Beispiel für das Feld &amp;quot;Status&amp;quot;: wir ändern den Default von &amp;quot;Alle ohne Beurl.&amp;quot; nach &amp;quot;Alle ohne Beurl., ohne Exmatr.&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 --Änderung xx.xx.xxxx: Standardwert für Feld Status im Bereich Studierende: alle ohne beurl., ohne exmatr.&lt;br /&gt;
update  felderinfo&lt;br /&gt;
 set defaultwert=&lt;br /&gt;
      &#039;&amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr,eintrag from sos_status where eintrag=&#039;&#039;Alle ohne Beurl., ohne Exmatr.&#039;&#039;&#039;&lt;br /&gt;
 where name=&#039;Status&#039;&lt;br /&gt;
 and tid between 16000 and 16999;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=Ergebnistabellen anpassen=&lt;br /&gt;
==Vorschau: Erweiterte Ergebnistabellen==&lt;br /&gt;
Im [[Masken-Tutorial]] wird erläutert wie Quellcodes für Masken erstellt werden. Damit werden grundlegende Tabellenlayouts erzeugt. Darüber hinaus gibt es viele weitere Möglichkeiten, diese Layouts anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die folgende Abbildung zeigt, was jenseits von &amp;quot;normalen&amp;quot; Ergebnistabellen so möglich ist, am Beispiel einer Tabelle aus dem Managementmodul:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_treetable2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Sie sehen&lt;br /&gt;
# Eine Baumdarstellung inkl. Autklappmöglichkeit für die Zeilen&lt;br /&gt;
# Dynamische Spalten z.B. bei Semesterzeitreihen&lt;br /&gt;
# Verschachtelte Spaltenüberschriften&lt;br /&gt;
# Einzelne Zellen werden mit CSS formatiert&lt;br /&gt;
Die folgende Abbildung zeigt den Quellcode, im letzten SELECT kann das Layout gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_treetable3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Dies wird unten näher erläutert. Aber dies ist nur ein Teil der Möglichkeiten, die es hier gibt. Sie können auch Hyperlinks in die Tabellenzellen legen, oder kleine Balkengrafiken einbauen.&lt;br /&gt;
&lt;br /&gt;
==Baumdarstellung==&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;ebene&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_treetable1.png|650px]]&lt;br /&gt;
&lt;br /&gt;
Zum Nachladen von Ergebniszeilen wird das Stylesheet tabelle_html_rows.xsl benutzt.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Baumdarstellung lässt sich auch dynamisch mit Sichtenzugriff erstellen. Dazu kann mit .elements auf Sichten zugegriffen werden. Für Studiengangssichten also Studiengang.elements:&lt;br /&gt;
&lt;br /&gt;
 create table tmp_aggr (&lt;br /&gt;
 	Ebene integer,&lt;br /&gt;
 	strukturStr varchar(255),&lt;br /&gt;
 	name varchar (255),&lt;br /&gt;
 	key varchar(255),&lt;br /&gt;
 	anzahl integer,&lt;br /&gt;
 	nextsem integer,&lt;br /&gt;
 	anteil float,&lt;br /&gt;
 	inzweisem integer,&lt;br /&gt;
 	anteilzwei float,&lt;br /&gt;
 	abschlussarbeit integer&lt;br /&gt;
 	);&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;#foreach einElement in Studiengang.elements&amp;gt;&lt;br /&gt;
 insert into tmp_aggr(Ebene,strukturStr, name, key,anzahl,nextsem,anteil,inzweisem,anteilzwei,abschlussarbeit) &lt;br /&gt;
 select&lt;br /&gt;
 	${einElement.level}::smallint,&lt;br /&gt;
 	&#039;${einElement.strukturStr}&#039;::char(50),&lt;br /&gt;
 	&#039;${einElement.name}&#039;::char(200), &lt;br /&gt;
 	&#039;${einElement.key}&#039;::char(10),&lt;br /&gt;
 	count(E.matrikel_nr),&lt;br /&gt;
 	sum(E.nextsem),&lt;br /&gt;
 	(sum(E.nextsem)*100/count(E.matrikel_nr))::integer,&lt;br /&gt;
 	sum(E.inzweisem),&lt;br /&gt;
 	(sum(E.inzweisem)*100/count(E.matrikel_nr))::integer,&lt;br /&gt;
  	sum(E.abschlussarbeit)&lt;br /&gt;
 from tmp_ergebnis E&lt;br /&gt;
 where E.tid in ${einElement.subkeys}&lt;br /&gt;
 order by 1,2,3,4&lt;br /&gt;
 ;&lt;br /&gt;
 &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Aufruf eines Stylesheets==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Stylesheet (egal ob JasperReport oder XSLT) der Maske als alleiniges [[Masken_für_das_XML-Frontend_vorbereiten#Zuordnung_eines_Stylsheets_zu_einer_Maske|Tabellenstylesheet zuweisen]], wird dieses direkt im Ergebnis aufgerufen. Wenn Sie dann noch in der Maske ein Feld &amp;quot;Ausgabeformat&amp;quot; integrieren, können die Anwender zwischen HTML, Excel, PDF etc. wählen (s.u.). &lt;br /&gt;
&lt;br /&gt;
Sie können auch eine Maske mit den Feldern   &amp;quot;Bericht&amp;quot; und &amp;quot;Ausgabeformat&amp;quot; versehen, in dem die Anwender das entsprechende Layout (d.h. den JasperReport) auswählen kann. Ein funktionierendes Beispiel wäre z.B. die Maske &amp;quot;Studierende Datenblatt&amp;quot;. Um so etwas zu erzeugen gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Es muss auf der Maske ein Feld der Feldart 1 geben mit dem Namen tablestylesheet und der relation&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select distinct filename,X.caption from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=&amp;lt;&amp;lt;Maskennummer&amp;gt;&amp;gt;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und zum Beispiel für Defaultwert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select distinct filename,X.caption&lt;br /&gt;
 from sx_stylesheets X,sx_mask_style S&lt;br /&gt;
 where X.tid=S.stylesheet_id&lt;br /&gt;
 and S.maskeninfo_id=&amp;lt;&amp;lt;Maskennummer&amp;gt;&amp;gt;&lt;br /&gt;
 and S.ord=2&lt;br /&gt;
 order by 2                                                                                                            &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für das Feld tablestylesheet wird automatisch eine Beschriftung hinterlegt, damit auf der Maske als Anzeige &amp;quot;Bericht&amp;quot; erscheint.&lt;br /&gt;
&lt;br /&gt;
Außerdem müssen Sie ein Feld &amp;quot;Ausgabeformat&amp;quot; in der Maske ergänzen, ebenfalls Feldart=1:&amp;lt;/br&amp;gt;&lt;br /&gt;
relation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and nature::smallint&amp;lt;100 order by nature::smallint&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Beispiel für Excel als defaultwert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and description=&#039;Excel&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Navigationsspalten==&lt;br /&gt;
=== Eigene Navigationsspalten zum Anklicken ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Ergebnistabelle an das XML-Frontend übergeben wird, dann können spezielle Spalten für die Navigation eingesetzt werden. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Navigationsspalten beispiel bearbeiten.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Die Spaltennamen werden im letzten select des select_stmt einer Maske übergeben, dabei kann bei mehreren Spalten Nummern angehängt werden.&lt;br /&gt;
&lt;br /&gt;
SQL für vorherigen Screenshot&lt;br /&gt;
  select benutzer,name,email,nexttable, nextedit,nextedit2 from tmp_ergebnis;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;nexttable&#039;&#039;&#039;: 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 &amp;quot;SuperXmlTabelle?tid=&amp;quot; ergänzt, d.h. dem Servlet wird als erster Parameter die maskeninfo-tid übergeben.&lt;br /&gt;
** So wird z.B. aus dem Inhalt: 20010&amp;amp;id=2044 &amp;lt;/br&amp;gt;der Link http://hostname/superx/servlet/SuperXmlTabelle?tid=20010&amp;amp;id=2044 &lt;br /&gt;
** Die Ergebnisseite wird dann um einen Button ergänzt.&lt;br /&gt;
*&#039;&#039;&#039;nextwindowtable&#039;&#039;&#039;: Das gleiche wie &amp;quot;nexttable&amp;quot;, nur es wird ein neues Fenster geöffnet. &lt;br /&gt;
*&#039;&#039;&#039;nextpage&#039;&#039;&#039;: Link auf eine andere SuperX-Tabelle wie &#039;&#039;&#039;nexttable&#039;&#039;&#039;, es wird nur ein anderes Icon und ein anderer Target genutzt. &lt;br /&gt;
*&#039;&#039;&#039;nextmask&#039;&#039;&#039;: 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 &amp;quot;SuperXmlMaske?tid=&amp;quot; ergänzt. &amp;lt;/br&amp;gt;So wird z.B. aus dem Inhalt: 20010&amp;amp;id=2044 &lt;br /&gt;
** der Link http://hostname/superx/servlet/SuperXmlMaske?tid=20010&amp;amp;id=2044 &amp;lt;/br&amp;gt;Die Ergebnisseite wird dann um einen Button ergänzt.&lt;br /&gt;
*&#039;&#039;&#039;nextdelete&#039;&#039;&#039;: Link auf eine andere SuperX-Maske; Im Unterschied zu nextmask wird hier ein anderes Icon gewählt: Auf der Ergbnisseite erscheint ein Delete-Button.&lt;br /&gt;
*&#039;&#039;&#039;nextedit&#039;&#039;&#039;: Link auf ein DBForms-Formular relativ zur URL des Servlets. Auf der Ergbnisseite erscheint ein Bearbeiten-Button.&lt;br /&gt;
*&#039;&#039;&#039;nextmail&#039;&#039;&#039;: Feldinhalte werden um einen Mailto-Tag ergänzt.&lt;br /&gt;
** z.B. info@superx-projekt.de wird zu &amp;lt;a mailto:&amp;quot;info@superx-projekt.de&amp;quot;&amp;gt; info@superx-projekt.de&amp;lt;/a&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;url&#039;&#039;&#039;: Feldinhalte werden um einen href-Tag, sowie wenn nötig um ein &amp;quot;http&amp;quot; ergänzt. &lt;br /&gt;
** z.B. www.superx-projekt.de wird zu &amp;lt;a href=&amp;quot;http://www.superx-projekt.de&amp;quot;&amp;gt;www.superx-projekt.de&amp;lt;/a&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;nextlink&#039;&#039;&#039;: 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 Link durch ein Trennzeichen &amp;quot;|&amp;quot; getrennt sind. &lt;br /&gt;
** So wird z.B. der Feldwert &amp;quot;SuperX-Projekt|http://www.superx-projekt.de&amp;quot; wie folgt ersetzt: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://www.superx-projekt.de&amp;quot;&amp;gt;SuperX-Projekt&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** Wenn nach dem Trennzeichen keine externe Web-Adresse angeboten wird (erkennbar am vorangestellten &amp;quot;http:&amp;quot;), dann wird der Inhalt des Feldes um den Pfad zum Tabellen-Servlet ergänzt&lt;br /&gt;
*** So wird z.B. aus dem Inhalt: Details zur Hochschule|20010&amp;amp;id=2044  der Link &amp;lt;a href=&amp;quot;../servlet/SuperXmlTabelle?tid=20010&amp;amp;id=2044&amp;quot;&amp;gt;Details zur Hochschule&amp;lt;/a&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;nextgenericlink&#039;&#039;&#039;: für generische Links mit Link-Text und Link-URL jeweils mit &amp;quot;|&amp;quot; getrennt.&lt;br /&gt;
*&#039;&#039;&#039;nextwindowgenericlink &#039;&#039;&#039;:wie nextgenericlink nur mit Target &amp;quot;_blank&amp;quot;, Zusatzfunktion (ab HisInOne 2023.06 bzw. Kernmodul 4.9)  ein img am Anfang stellt eine Grafik für den Link dar&lt;br /&gt;
** So wird z.B. aus dem Inhalt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
img:../images/pencil.svg|../edit/portal/portal_show.jsp?config=portal_config_gang_bearbeiten&amp;amp;layout=COLUMNS_2&amp;amp;idParam=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
der Link &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;../edit/portal/portal_show.jsp?config=portal_config_gang_bearbeiten&amp;amp;layout=COLUMNS_2&amp;amp;idParam=1&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;../images/pencil.svg&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;nextserverlink&#039;&#039;&#039;:Link auf eine andere Seite auf dem aktuellen Server&lt;br /&gt;
*&#039;&#039;&#039;nextdokulink&#039;&#039;&#039;:Link auf eine integrierte Wiki-Seite (nur HISinOne-BI)&lt;br /&gt;
&lt;br /&gt;
=== Ergebniszellen anklickbar machen ===&lt;br /&gt;
Statt eigener Navigationsspalten ist es auch möglich einzelne Zahlen bzw. Zellen in einem Bericht selbst anklickbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Dies kann z.B. genutzt werden, um per &amp;quot;DrillDown&amp;quot;&lt;br /&gt;
* von Kontoständen (wie 80.000 Euro) zu den zugehörigen Buchungen zu kommen,&lt;br /&gt;
* sich bei einer Summe von Studierenden die zugehörigen Matrikelnummern ausgeben zu lassen oder &lt;br /&gt;
* bei einem Flächenbericht mit Quadratmetern sich beim Anklicken der Quatdratmeterzahl die zugehörigen Räume anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
;Beispiel: In einem einfachen Flächenbericht gibt es eine Ergebnisspalte &amp;quot;flaeche&amp;quot;, die anklickbar gemacht werden soll und wenn eine Zahl angeklickt wird, soll ein Detailbericht mit den Räumen dazu (10250) aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Ergebnisspalte wie &lt;br /&gt;
  flaeche decimal(14,2) &lt;br /&gt;
muss es zusätzliches Feld in Ergebnistabelle geben &lt;br /&gt;
  hidden_flaeche text&lt;br /&gt;
-&amp;gt; durch das hidden wird erkannt, dass die Spalte selbst nicht dargestellt werden sol und auch nicht nach Excel/PDF exportiert werden soll , _flaeche sorgt für die Zuordnung zu Ergebnisspalte.&lt;br /&gt;
&lt;br /&gt;
Dann beim insert z.B.&lt;br /&gt;
  insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
  select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche)&lt;br /&gt;
   from tmp_rohdaten group by 1,2;&lt;br /&gt;
&lt;br /&gt;
Heißt: Für jede Ergebniszeile wird die Kostenstellennummer dargestellt und der Wert &amp;quot;flaeche&amp;quot; wird anklickbar gemacht (hidden_flaeche). Wenn die Flächenzahl in einer Ergebniszeile angeklickt wird, wird der Bericht 10250 mit dem Parameter z.B. Kostenstelle=1000 in einem neuen Tab aufgerufen.&lt;br /&gt;
&lt;br /&gt;
 Cachingcontrol=clearmask &lt;br /&gt;
sorgt dafür, dass die Maske neue geladen wird mit den Defaulteinstellungen und keine vorher auf anderen Masken getätigte Auswahl (z.B. Raumnutzungsart=500) eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
Aufpassen muss man noch, wenn man zusätzliche Felder auf der Maske hat.&lt;br /&gt;
&lt;br /&gt;
z.B: Flächenart.&lt;br /&gt;
&lt;br /&gt;
Wenn der User sich nicht die Gesamtfläche ausgeben lässt, sondern eine Einschränkung auf eine oder mehrere Flächenarten gemacht habt, muss diese Einschränkung ja auch an den Detailbericht mit übergeben werden.&lt;br /&gt;
&lt;br /&gt;
Im einfachsten Fall bei obligatorischen numerischen Feld mit einfacher Auswahl - da ja immer etwas ausgewählt sein muss, wird der Tag &amp;lt;&amp;lt;Flächenart&amp;gt;&amp;gt; auf jeden Fall ersetzt.&lt;br /&gt;
  insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
  select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;&amp;amp;Flächenart=&amp;lt;&amp;lt;Flächenart&amp;gt;&amp;gt;&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche) &lt;br /&gt;
  from tmp_rohdaten group by 1,2;&lt;br /&gt;
&lt;br /&gt;
Ist bei Flächenart eine Mehrfachauswahl oder ist nicht numerisch möglich, muss man evtl machen&lt;br /&gt;
  insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
  select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;&amp;amp;Flächenart=${Flächenart?replace(&amp;quot;|&amp;quot;,&amp;quot;,&amp;quot;)}&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche) &lt;br /&gt;
  from tmp_rohdaten group by 1,2;&lt;br /&gt;
Die Variable ${Flächenart} wird durch die Auswahl des Users gefüllt, dabei werden Pipezeichen bei Mehrfachauswahl durch das Replace mit Kommas ersetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn das Feld nicht obligatorisch ist oder für Gesamtsummenzeile nicht berücksichtigt werden soll, muss man etwas mit freemarker tricksen.&lt;br /&gt;
Man erstellt mit assign eine leere Freemarker-Variable für den Flächenartparameter (flart=&amp;quot;&amp;quot;), wenn etwas ausgewählt ist, wird die Variable mit Inhalt gefüllt, z:B. &amp;amp;Flächenart=NF1,NF2 - für die zwei ausgewählten Flächenarten NF1 und NF2. In den Link wird dann der Inhalt der FreemarkerVariable mit ${flart} eingebaut.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign flart=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
-- Wenn der User eine oder mehrere Flächenarten auf der Maske ausgewählt hat, &lt;br /&gt;
-- muss dies auch im LInk übergeben werden mit Komma statt Pipezeichen&lt;br /&gt;
&amp;lt;#if &amp;quot;&amp;lt;&amp;lt;Flächenart&amp;gt;&amp;gt;&amp;quot;!=&amp;quot;&amp;quot;&amp;gt;&amp;lt;#assign flart=&amp;quot;&amp;amp;Flächenart=&amp;quot;+Flächenart?replace(&amp;quot;|&amp;quot;,&amp;quot;,&amp;quot;)/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;${flart}&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche) from tmp_rohdaten group by 1,2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Beispielmaske (mit noch mehr Freemarker Tricks) ist der Bericht 10320 &amp;quot;Flächen nach Kostenstellen-Flächenarten-Gebäuden (Zeitreihe)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Rechteverwaltung für die Detailmaske ===&lt;br /&gt;
Wenn abgefragt werden soll, ob ein User Rechte für die Untermaske hat und nur in dem Fall die Navigationsspalte angezeigt werden soll oder die Zahl anklickbar gemacht werden soll, kann man dies mit einer Freemarkerfunktion machen&lt;br /&gt;
&lt;br /&gt;
z.B. im letzten Select-Statement&lt;br /&gt;
 select kostenstelle,name  &amp;lt;#if UserHasMaskRight(23230)&amp;gt; , nextedit &amp;lt;/#if&amp;gt; from tmp_erg&lt;br /&gt;
analog in der XIL-Proplist.&lt;br /&gt;
&lt;br /&gt;
Oder bei einer &amp;quot;Hidden&amp;quot;-spalte, bleibt diese leer außer wenn der Anwender Rechte für den Unterbericht hat&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;#if UserHasMaskRight(23230)&amp;gt;&lt;br /&gt;
  update tmp_erg set hidden_flaeche=&#039;.....&#039;;&lt;br /&gt;
  &amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Standardabfragen mit hochschulspezifischen Details versehen==&lt;br /&gt;
Bei Standardabfragen, bei denen nur Kleinigkeiten hochschulspezifisch angepasst werden sollen, wird ein Block eingebaut, z.B.&lt;br /&gt;
 &amp;lt;#if K_hs_nr=6850&amp;gt; --HFT Stuttgart&lt;br /&gt;
       update tmp_erg set fest=0 where jahr!=year(today()); --Festlegungen nur bei aktuellem Haushaltsjahr&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
Freemarker greift mit K_hs_nr auf die Hochschulnr. aus der Tabelle hochschulinfo zu, der update wird in diesem Beispiel also nur an der HFT Stuttgart gemacht. &lt;br /&gt;
&lt;br /&gt;
Dies ist erweiterbar, indem ein Repository-Objekt CUSTOM_xxxxxx (Maskennummer)  angelegt wird. Beispiel: FIN-Abfrage zeigt standardmäßig Festlegungen immer an, aber einige Hochschulen wollen Festlegungen nur für aktuelles Haushaltsjahr. Es wird in CUSTOM_xxxxxx eine Variable definiert:&lt;br /&gt;
 &amp;lt;#assign FestlegungenNurAktuellesJahr=true/&amp;gt; &lt;br /&gt;
Im masken-sql der Maske definiert man dann zunächst einen default-wert&lt;br /&gt;
 &amp;lt;#assign FestlegungenNurAktuellesJahr=false/&amp;gt; -- default alle festelegungen&lt;br /&gt;
 &amp;lt;#if CUSTOM_xxxxxx?exists&amp;gt; - falls custom_xxxxxx für die maske exisiert wird es aufgerufen&lt;br /&gt;
       &amp;lt;#assign inlineTemplate=CUSTOM_xxxxxx?interpret&amp;gt;&lt;br /&gt;
       &amp;lt;@inlineTemplate/&amp;gt;&lt;br /&gt;
       -- ausführen der Definition überschreibt default-wert von FestlegungenNurAktuellesJahr   mit &amp;lt;#assign FestlegungenNurAktuellesJahr=true/&amp;gt;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#if   FestlegungenNurAktuellesJahr&amp;gt;&lt;br /&gt;
       update tmp_erg set fest=0 where jahr!=year(today());&lt;br /&gt;
 &amp;lt;/#if&amp;gt; &lt;br /&gt;
&lt;br /&gt;
you#re welcome!&lt;br /&gt;
&lt;br /&gt;
==Spaltenlayout in Ergebnistabellen==&lt;br /&gt;
Wie im [[Masken-Tutorial#Abfragen_in_Maskendefinitionen|Tutorial]] gezeigt, wird das Spaltenlayout (Überschriften, Breite) in der sog. &amp;quot;xil_proplist&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
===Die Attribute in der xil_proplist===&lt;br /&gt;
Zunächst ein Beispiel: der Code für die Maske &amp;quot;Bewerbungsprozess nach Fach/Studiengang&amp;quot; im ZUL-Modul beginnt wie folgt:&lt;br /&gt;
&lt;br /&gt;
 XIL List&lt;br /&gt;
     sizable_columns horizontal_scrolling&lt;br /&gt;
   drop_and_delete movable_columns  &lt;br /&gt;
   white_space_color=COLOR_WHITE &#039;&#039;&#039;fixed_columns=2&#039;&#039;&#039;&lt;br /&gt;
     min_heading_height=55&lt;br /&gt;
 &#039;&#039;&#039;Column&#039;&#039;&#039; CID=0 &#039;&#039;&#039;heading_text=&amp;quot;Ebene&amp;quot;&#039;&#039;&#039; center_heading&lt;br /&gt;
     row_selectable heading_platform readonly&lt;br /&gt;
     &#039;&#039;&#039;width=5&#039;&#039;&#039; text_size=20 &#039;&#039;&#039;explanation=&amp;quot;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie die Ausgabe:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Bewerbungsprozess_Ergebnistabelle_1.png|width=600|caption=Ergebnistabelle Spalte &amp;quot;Ebene&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;Column&amp;quot; beginnt). Am Ende der gesamten Xil_proplist befindet sich die Endemarke &amp;quot;@@@&amp;quot; in einem neuen Absatz.&amp;lt;/br&amp;gt;&lt;br /&gt;
Hier eine Erläuterung der Attribute: &lt;br /&gt;
*&#039;&#039;&#039;fixed_columns&#039;&#039;&#039;: Das Attribut im Kopf steuert wie viele führende Spalten beim Scrollen nach rechts [[Masken-_und_Tabellengestaltung#Fixierte Spalten|fixiert]] bleiben.&lt;br /&gt;
*&#039;&#039;&#039;Column&#039;&#039;&#039;: Definiert eine neue Spalte. Achtung: die Anzahl der &amp;quot;Column&amp;quot;-Anweisungen muss mit der Anzahl der Spalten übereinstimmen, die beim select_stmt geliefert werden. &lt;br /&gt;
*&#039;&#039;&#039;heading_text&#039;&#039;&#039;: Die Spaltenüberschrift in der Ergebnistabelle. Hier sind noch spezielle Layoutanweisungen möglich (s.u.), außerdem können Sie [https://super-ics.de/superx/doku/entwicklerhandbuch/f_Glossare.htm Glossare] nutzen&lt;br /&gt;
*&#039;&#039;&#039;width&#039;&#039;&#039;:  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. &lt;br /&gt;
*&#039;&#039;&#039;explanation&#039;&#039;&#039;: 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.&lt;br /&gt;
&lt;br /&gt;
=== Fixierte Spalten ===&lt;br /&gt;
Bei breiten Tabellen ist es ggf. sinnvoll, die ersten X Spalten zu fixieren, damit sie beim Scrollen nach rechts stehen bleiben. Dies definieren Sie über &lt;br /&gt;
* eine [[Kern_Konfiguration#Konstanten|Konstante]] &amp;quot;fixed_columns_aktiv&amp;quot;, mit der Sie das Fixieren generell einschalten&lt;br /&gt;
* im Kopf der [[Masken-_und_Tabellengestaltung#Die_Attribute_in_der_xil_proplist|Spaltenbeschreibung]] (xil_proplist) mit dem Attribut &amp;quot;fixed_columns&amp;quot;.&lt;br /&gt;
Beispiel:&lt;br /&gt;
 &lt;br /&gt;
 XIL List&lt;br /&gt;
   sizable_columns horizontal_scrolling&lt;br /&gt;
 drop_and_delete movable_columns  &lt;br /&gt;
 white_space_color=COLOR_WHITE &#039;&#039;&#039;fixed_columns=3&#039;&#039;&#039;&lt;br /&gt;
   min_heading_height=40&lt;br /&gt;
 &lt;br /&gt;
Bei einer Ergebnistabelle in schmalem Viewport sieht die Originaltabelle so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bia_kern_fixed_columns2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Bei einer Ergebnistabelle in schmalem Viewport und Scrollen nach rechts sieht es das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bia_kern_fixed_columns3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Mehrzeilige Spaltenüberschriften ===&lt;br /&gt;
&lt;br /&gt;
Im Attribut &amp;quot;heading_text&amp;quot; können auch mehrzeilige Spaltenüberschriften definiert werden. Fügen Sie den Zeilenumbruch aber nicht direkt ein, sondern codieren Sie diesen als &amp;quot;\n&amp;quot;. Bei der Ausgabe wird dies als Umbruch umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der Code&lt;br /&gt;
&lt;br /&gt;
 Column CID=0 heading_text=&amp;quot;Art&#039;&#039;&#039;\n&#039;&#039;&#039;d.Ebene&amp;quot; center_heading&lt;br /&gt;
   row_selectable heading_platform readonly&lt;br /&gt;
   width=10 text_size=20 explanation=&amp;quot;@@@sos_ebene@@@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sieht in der Ausgabe so aus:&lt;br /&gt;
&lt;br /&gt;
[[Image:bsp_xil_proplist_2.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Verknüpfte Spaltenüberschriften===&lt;br /&gt;
Um Spaltenüberschriften zu verknüpfen, muss man wie folgt vorgehen:&amp;lt;/br&amp;gt;&lt;br /&gt;
Alle Zellen, die verknüpft werden sollen, müssen den gleichen Namen haben, und mit dem Steuerzeichen &amp;quot; \000 &amp;quot; sowie einem Zeilenumbruch &amp;quot; \n &amp;quot; enden.&amp;lt;/br&amp;gt;&lt;br /&gt;
Beispiel: Der Code&lt;br /&gt;
&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Bewerbungen &#039;&#039;&#039;\000\n&#039;&#039;&#039; gesamt&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10 explanation=&amp;quot;Bewerberanzahl &amp;quot;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Bewerbungen &#039;&#039;&#039;\000\n&#039;&#039;&#039; weiblich&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10 explanation=&amp;quot;&amp;quot;&lt;br /&gt;
 Column CID=5 heading_text=&amp;quot;Bewerbungen &#039;&#039;&#039;\000\n&#039;&#039;&#039; weibl. in %&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10 explanation=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sieht in der Ausgabe so aus: &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Bewerbungsprozess_Ergebnistabelle_2.png|width=600|caption=Verknüpfte Spaltenüberschriften}}&lt;br /&gt;
&lt;br /&gt;
===Dynamische Spaltenanzahl===&lt;br /&gt;
Kann mit Freemarker realisiert werden, Einfaches Beispiel:&amp;lt;/br&amp;gt;&lt;br /&gt;
Nur bei FIN_Quellsystem 1 (MBS) Soll Ansatz ausgegeben werden. &lt;br /&gt;
&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;Abschluss-Select im Masken-SQL:&#039;&#039;&lt;br /&gt;
 select name,&amp;lt;#if K_FIN_Quellsystem=1&amp;gt; hhans&amp;lt;/#if&amp;gt;, einnahmen, ausgaben from fin;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;XIL:&#039;&#039;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Name&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;#if K_FIN_Quellsystem=1&amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Ansatz&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Einnahmen&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Einnahmen&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel:&amp;lt;/br&amp;gt;&lt;br /&gt;
Spalte Bewilligung soll nur angezeigt werden, wenn werte größer 0 &lt;br /&gt;
&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;Im Masken-SQL:&#039;&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;sqlvars&amp;gt;&lt;br /&gt;
 &amp;lt;sqlvar bewilligungen&amp;gt;select sum(bewill) from fin where ins=&amp;lt;&amp;amp;lt;Ins&amp;gt;&amp;gt; &amp;lt;/sqlvar&amp;gt;&lt;br /&gt;
 &amp;lt;/sqlvars&amp;gt; &lt;br /&gt;
 ...&lt;br /&gt;
Die im Masken-SQL definierten sqlvars (in diesem Falle bewilligungen) sind auch in der XIL-Proplist zur verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Abschluss-Select im Masken-SQL:&#039;&#039;&lt;br /&gt;
 select name,ansatz&amp;lt;#if bewilligungen&amp;amp;gt;0&amp;gt; , bewill, &amp;lt;/#if&amp;gt; , ausgaben,verfuegbar from tmp_erg;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;XIL:&#039;&#039;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Name&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;#if   bewilligungen&amp;amp;gt&amp;gt;0 &amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;bewill&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Ausgaben&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;verfügbar&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
&lt;br /&gt;
===Hochschulspezifische Einstellmöglichkeit===&lt;br /&gt;
Ein Bericht sollte nur so viel Spalten haben wie maximal benötigt werden. In der Standardauslieferung werden alle Spalten gezeigt. Ein Beispiel für ein Standard-Schluss-select:&lt;br /&gt;
 select name, akt_soll,einnahmen,aus,fest,verfuegbar from tmp_erg &lt;br /&gt;
Wenn eine Hochschule nicht alle Spalten oder die Spalten in einer anderen Reihenfolge sehen möchte, wird in x_repository eine Variable CUSTOM_XXXXXX (Maskennummer) angelegt, welche einen customize-Hash und in diesem die Felder, welche angezeigt werden sollen, definiert.  field ist Feldname in der tmp_erg-tabelle, caption Spaltenüberschrift, width für xil-proplist und bei Bedarf kann auch explanation ergänzt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign customize={&amp;quot;resulttable&amp;quot;:[&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Gliederung&amp;quot;,&amp;quot;width&amp;quot;:14},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;akt_soll&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Ansatz&amp;quot;,&amp;quot;width&amp;quot;:15,&amp;quot;explanation&amp;quot;:&amp;quot;Haushaltsansatz inkl.Einnahmen und Reste (Haushalterisch: Aktuelles Soll)&amp;quot;},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;einnahmen&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Einnahmen&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;aus&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Ausgaben&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;fest&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Festgelegt&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;verfuegbar&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;verfügbar&amp;quot;,&amp;quot;width&amp;quot;:12,&amp;quot;explanation&amp;quot;:&amp;quot;@@@fin_verfuegbar@@@&amp;quot;}&lt;br /&gt;
 ]}/&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Dies wäre die gleich Ausgabe wie im Standard.&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Nach Eingabe/Änderung den Manager-Chache leeren}}&lt;br /&gt;
&lt;br /&gt;
Möchte eine Hochschule beispielsweise verfügbar weiter vorne stehen haben und akt_soll gar nicht sehen, wird der Eintrag folgendermaßen geändert:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign customize={&amp;quot;resulttable&amp;quot;:[&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Gliederung&amp;quot;,&amp;quot;width&amp;quot;:14},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;verfuegbar&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;verfügbar&amp;quot;,&amp;quot;width&amp;quot;:12,&amp;quot;explanation&amp;quot;:&amp;quot;@@@fin_verfuegbar@@@&amp;quot;},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;einnahmen&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Einnahmen&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;aus&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Ausgaben&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;fest&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Festgelegt&amp;quot;,&amp;quot;width&amp;quot;:10}&lt;br /&gt;
 ]}/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Masken-sql gegen Ende baut man ein&lt;br /&gt;
 &amp;lt;#if CUSTOM_xxxxxx?exists&amp;gt;&lt;br /&gt;
       &amp;lt;#assign inlineTemplate=CUSTOM_xxxxxx?interpret&amp;gt;&lt;br /&gt;
       &amp;lt;@inlineTemplate/&amp;gt;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls eine Hochschule ein custom_xxxxxx angelegt hat, wird der Inhalt interpretiert und ein customize-Hash steht zur Verfügung.Das Abschluss-select prüft also&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#if customize?exists&amp;gt; --customize existiert, abschluss select daraus aufbauen&lt;br /&gt;
       select &lt;br /&gt;
             &amp;lt;#foreach f in customize.resulttable&amp;gt;&lt;br /&gt;
                   ${f.field} &amp;lt;#if h_has_next&amp;gt;,&amp;lt;/#if&amp;gt;&lt;br /&gt;
             &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
       from tmp_erg2 ;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;#else&amp;gt; -- kein customize objekt existiert, standard abschluss select&lt;br /&gt;
       select name,akt_soll,einnahmen,ausgaben,fest,verfügbar from tmp_erg;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die XIL-Proplist muss es genauso laufen:&lt;br /&gt;
&lt;br /&gt;
 XIL List&lt;br /&gt;
 --freemarker template&lt;br /&gt;
 &amp;lt;#if CUSTOM_xxxx?exists&amp;gt;&lt;br /&gt;
       &amp;lt;#assign inlineTemplate=CUSTOM_xxxx?interpret&amp;gt;&lt;br /&gt;
       &amp;lt;@inlineTemplate/&amp;gt;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#if customize?exists&amp;gt;--wenn Hochschul-customizeobjekt exixtiert, dann xil dynamisch aufbauen&lt;br /&gt;
       &amp;lt;#foreach f in customize.resulttable&amp;gt;&lt;br /&gt;
             Column CID=0 heading_text=&amp;quot;${f.caption}&amp;quot;   center_heading explanation=&amp;quot;&amp;lt;#if f.explanation?exists&amp;gt;${f.explanation}&amp;lt;/#if&amp;gt;&amp;quot;&lt;br /&gt;
             row_selectable col_selectable heading_platform readonly width=${f.width}&lt;br /&gt;
       &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
 &amp;lt;#else&amp;gt; --standard xil list&lt;br /&gt;
 Column CID=0 heading_text=&amp;quot;Name explanation=&amp;quot;&amp;quot; center_heading     row_selectable col_selectable heading_platform readonly width=9 text_size=0&lt;br /&gt;
 Column CID=0 heading_text=&amp;quot;aktsoll explanation=&amp;quot;&amp;quot; center_heading     row_selectable col_selectable&lt;br /&gt;
 ..&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
complex, but coool, &amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for the super nerds,&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technik kann man sogar mit eigenen Freemarker-Funktionen verbinden, z.B. dynamsiche Spalten nach customizing und Link-Spalten zur Einzelbuchung nur anzeigen, wenn Rechte für Einzelbuchungen da sind. Aus dem Kontext, XIL:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#function isWanted field&amp;gt;&lt;br /&gt;
 &amp;lt;#assign result=true&amp;gt;&lt;br /&gt;
 &amp;lt;#if field?starts_with(&#039;linkbuch&#039;)&amp;amp;&amp;amp;Einzelbuchrecht?exists&amp;amp;&amp;amp;Einzelbuchrecht?is_number&amp;amp;&amp;amp;Einzelbuchrecht=0&amp;gt;&amp;lt;#assign result=false/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#if (field=&#039;einnahmen&#039;||field?starts_with(&#039;linkbuchein&#039;)||field=&#039;offsoll_e&#039;||field?starts_with(&#039;linkbuchoffsolle&#039;))&amp;amp;&amp;amp;&amp;quot;&amp;lt;&amp;lt;Einnahmen anzeigen&amp;gt;&amp;gt;&amp;quot;=&amp;quot;&#039;nein&#039;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;#assign result=false/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#return result&amp;gt;&lt;br /&gt;
 &amp;lt;#if customize?exists&amp;gt;&lt;br /&gt;
 &amp;lt;#foreach f in customize.resulttable&amp;gt;&lt;br /&gt;
 &amp;lt;#if isWanted(f.field)&amp;gt;&lt;br /&gt;
 Column CID=2 heading_text=&amp;quot;${f.caption}&amp;quot;   center_heading explanation=&amp;quot;&amp;lt;#if f.explanation?exists&amp;gt;${f.explanation}&amp;lt;/#if&amp;gt;&amp;quot;&lt;br /&gt;
 row_selectable col_selectable heading_platform readonly width=${f.width}&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
 &amp;lt;#else&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
===Dezimalstellen variieren===&lt;br /&gt;
Normalerweise werden Werte mit Dezimalstellen immer zweistellig wiedergegeben. Im Ausnahmefall kann man dies ändern, indem man eine Spalte mit dem Namensschema &amp;quot;hidden&amp;quot;+Spaltenname+&amp;quot;dp&amp;quot; hinter die jeweilige Spalte setzt, und der Inhalt der Spalte enthält die Zahl der Nachkommastellen (0-6 möglich):&lt;br /&gt;
&lt;br /&gt;
 select ... plan_soll ,&lt;br /&gt;
 1::integer as hiddenplan_solldp,...&lt;br /&gt;
&lt;br /&gt;
bewirkt, dass die Spalte plan_soll einstellig dargestellt wird.&lt;br /&gt;
{{Achtung|Dies klappt nicht bei verschachtelten Spaltenlayouts}}&lt;br /&gt;
=== Einzelne Zellen oder Spalten formatieren (CSS) ===&lt;br /&gt;
&lt;br /&gt;
Wenn im Masken-Resultset zum Beispiel eine Spalte &amp;quot;verfuegbar&amp;quot; existiert, kann über eine zusätzliche Spalte nach dem Muster&lt;br /&gt;
 hidden - Spaltenname - css&lt;br /&gt;
Also hier z.B.  eine versteckte Spalte &#039;&#039;&#039;hiddenverfuegbarcss&#039;&#039;&#039; mit dem Inhalt des css-Klassennamens, z.B. neu in kern44 &#039;&#039;td.boldnumber&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Auszug&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create temp table tmp_erg&lt;br /&gt;
(&lt;br /&gt;
titel char(5),titelbez varchar(255),sort smallint,&lt;br /&gt;
hhans decimal (14,2),&lt;br /&gt;
sperre decimal (14,2),&lt;br /&gt;
reste decimal(14,2),&lt;br /&gt;
akts decimal(14,2),&lt;br /&gt;
einnahmen decimal(14,2),&lt;br /&gt;
ausgaben decimal (14,2),&lt;br /&gt;
fest decimal (14,2),&lt;br /&gt;
verfuegbar decimal (14,2),&lt;br /&gt;
hiddenverfuegbarcss varchar(200)&lt;br /&gt;
) &amp;lt;@informixnolog/&amp;gt;;&lt;br /&gt;
…&lt;br /&gt;
&lt;br /&gt;
update tmp_erg set hiddenverfuegbarcss=&#039;boldnumber&#039; where sort=0;&lt;br /&gt;
select titelbez, hhans,sperre ,reste,akts,einnahmen,ausgaben,fest,verfuegbar+fest,verfuegbar,&lt;br /&gt;
hiddenverfuegbarcss from tmp_erg order by sort,titel;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine entsprechende XIL_proplist-Definition der &amp;quot;column&amp;quot; muss es auch geben, hier ist der Name allerdings beliebig, sollte aber eindeutlig sein, d.h. eine Tabelle sollte nicht zwei gleiche Spaltenüberschriften haben.&lt;br /&gt;
&lt;br /&gt;
===Detailansicht verlinken===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Links_in_Ergebnistabelle.png|width=600|caption=Links in Ergebnistabelle}}&lt;br /&gt;
&lt;br /&gt;
Nach Klick auf einen der Links erscheint eine weitere Tabelle, welche statt der Anzahl die einzelnen Matrikelnummern inklusive Studiengang ausgibt:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Detailansicht.png|width=600|caption=Detailansicht}}&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &#039;?tid=30610360&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
&lt;br /&gt;
&#039;||pktxt||&#039; wird ersetzt durch den Wert des Feldes pktxt derselben Zeile:&lt;br /&gt;
&lt;br /&gt;
 select &lt;br /&gt;
 	pktxt,&lt;br /&gt;
 	pdtxt,&lt;br /&gt;
 	(case when pstatus=&#039;AN&#039; then 1 else 0 end) as anmeldung,&lt;br /&gt;
 	(case when pversuch=3 then 1 else 0 end) as drittversuch,&lt;br /&gt;
 	&#039;?tid=30610360&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
 into temp tmp_ergebnis&lt;br /&gt;
&lt;br /&gt;
Werden beim Maskenaufruf der Detailansicht weitere Felder benötigt, wird für diese eine Variable angelegt:&lt;br /&gt;
&lt;br /&gt;
 #assign stg=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;#if &amp;quot;&amp;lt;&amp;lt;Studiengang&amp;gt;&amp;gt;&amp;quot;!=&amp;quot;&amp;quot;&amp;gt;&amp;lt;#assign stg=&amp;quot;&amp;amp;Studiengang=&amp;lt;&amp;lt;Studiengang&amp;gt;&amp;gt;&amp;quot;?replace(&amp;quot;&#039;&amp;quot;,&amp;quot;&amp;quot;)?replace(&amp;quot;|&amp;quot;,&amp;quot;,&amp;quot;)/&amp;gt;&amp;lt;/#if&amp;gt; &lt;br /&gt;
&lt;br /&gt;
So ist gewährleistet, dass der Parameter nicht in die URL übernommen wird, falls das Maskenfeld leer ist. Zudem werden einfache Hochkommata &#039; und Pipes | ersetzt, um zugewährleisten, dass die URL funktioniert. Einfache Hochkommata &#039; 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:&lt;br /&gt;
&lt;br /&gt;
 &#039;?tid=30610360&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;${stg}&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
&lt;br /&gt;
Sonderfall: Falls eine Maske in einem Link auf sich selbst verweist wird empfohlen statt der Maskennummer die automatisch gefüllte Freemarker-Variable ${Maskennummer} zu benutzen:&lt;br /&gt;
&lt;br /&gt;
 &#039;?tid=${Maskennummer}&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;${stg}&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
&lt;br /&gt;
Hintergrund: Falls man eine Kopie des entsprechenden Berichtes angelegt hat, um diesen mit eingeschränkten Funktionen (bspw. für User mit eingeschränkten Rechten) bereitzustellen, bietet sich die [https://wiki.his.de/mediawiki/index.php/SXimport_zur_Maskengestaltung_verwerden-HISinOne-BI sximport-Funktion] an. Würde dann statt ${Maskennummer} die tid verwandt, so würde der Link in der Berichtskopie auf den Hauptbericht verweisen, was für User mit eingeschränkten Rechten nicht erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
===Datenbalken===&lt;br /&gt;
====Datenbalken in Standardberichten allgemein====&lt;br /&gt;
Es gibt die Möglichkeit, in der Ergebnistabelle horizontale Balken (In Excel nennt man dies &amp;quot;Datenbalken&amp;quot;) anzeigen zu lassen. Dies kann z.B. dazu genutzt werden,  ein Balkendiagramm darzustellen. &lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel: Maske Administration -&amp;gt; Benutzer -&amp;gt; Gruppe suchen -&amp;gt; dort im Ergebnis die Spalte &amp;quot;Anteil Benutzer an Gesamtzahl (in %) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_1.png|width=500px|caption=Datenbalken Beispiel}}&lt;br /&gt;
&lt;br /&gt;
Voreingestellt ist auch, dass beim MouseOver ein Tooltip mit der Zahl angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit, die Datenbalken zu variiieren:&lt;br /&gt;
* Balken links- oder rechtsbündig&lt;br /&gt;
* Die Breite der Balken wird in Pixel angegeben, Sie können die Breite aber anpassen&lt;br /&gt;
** Der jew. Balken kann relativ zu einem Gesamtwert dargestellt werden&lt;br /&gt;
** Der gesamte Balken kann in der Breite angepaßt werden&lt;br /&gt;
* Auch Balken mit Serien sind möglich&lt;br /&gt;
=====Datenbalken linksbündig=====&lt;br /&gt;
Der Default des Datenbalkens ist linksbündig, wenn sie also &amp;quot;_graph&amp;quot; als Spaltenüberschrift nehmen, wird der Balken linksbündig gezeichnet. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_2.png|width=500px|caption=Datenbalken linksbündig}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Datenbalken rechtsbündig=====&lt;br /&gt;
Wenn sie &amp;quot;_graphbarright&amp;quot; als Spaltenüberschrift nehmen, wird der Balken rechtsbündig gezeichnet. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_3.png|width=500px|caption=Datenbalken rechtsbündig}}&lt;br /&gt;
&lt;br /&gt;
=====Datenbalken Breite=====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_4_breite.png|width=500px|caption=Datenbalken breiter}}&lt;br /&gt;
&lt;br /&gt;
Wenn der Wert für den  Datenbalken kein Prozentwert ist (also nicht die Skala 1-100 hat), können Sie den Gesamtwert mit &amp;quot;|&amp;quot; dahinter setzen. Dadurch wird die Breite anteilig berechnet. Beispiel:&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
 select ..., &#039;44|50&#039; as _graph2 ...&lt;br /&gt;
Damit wird der Datenbalken mit der Hälfte der Gesamtbreite angezeigt.&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_5_relativ.png|width=500px|caption=Datenbalken relativ}}&lt;br /&gt;
&lt;br /&gt;
=====Datenbalken mit Beschriftung=====&lt;br /&gt;
Sie können den Datenbalken auch mit einer Beschriftung versehen, indem Sie als Spaltenname &amp;quot;_graphbarwithlabel&amp;quot; nutzen:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_6_label.png|width=500px|caption=Datenbalken mit Beschriftung}}&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Je nach Länge der Zahl und Breite des Balkens kann es zu unschönen Darstellungen kommen.}}&lt;br /&gt;
=====Datenbalken mit Serien=====&lt;br /&gt;
Wenn Sie den Spaltennamen beginnend mit &amp;quot;_graphbarxseries&amp;quot; liefern werden Datenbalken mit Serien ausgegeben. Dazu wird als Wert eine Liste mit Komma-getrennten Ganzzahlen erwartet, normiert auf die Breite der Spalte in der &#039;&#039;&#039;_xil_proplist&#039;&#039;&#039;. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken 7 xseries.png|width=500px|caption=Datenbalken mit Serien}}&lt;br /&gt;
&lt;br /&gt;
Die Farben der Serie können Sie im Template &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template name=&amp;quot;myBarColorFg&amp;quot; &amp;gt;...&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in der Datei /superx/xml/pageComponents_html_final.xsl überlagern. Die Auslieferung befindet sich in der Datei /superx/xml/graphtools.xsl.&lt;br /&gt;
&lt;br /&gt;
====Datenbalken in xCube====&lt;br /&gt;
Da in xCube die Masken nicht änderbar sind, können Sie die Funktion über die Maske bzw. das Maskenfeld &amp;quot;Spaltenvisualisierung&amp;quot; direkt nutzen.&lt;br /&gt;
* Siehe in [[Modul_xCube_Nutzungshandbuch#Spaltenvisualisierung_als_Ansichtsoption|xCube]]&lt;br /&gt;
&lt;br /&gt;
=Exporte anpassen=&lt;br /&gt;
== Exportformate ==&lt;br /&gt;
Im XML-Frontend können Abfragen direkt nach html (Druckversion), XML, PDF oder XLS (-&amp;gt;Excel) exportiert werden. Die zugehörigen Stylesheets lauten:&lt;br /&gt;
* &#039;&#039;&#039;html (Druckversion)&#039;&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt; $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_html_p.xls  &amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;PDF &#039;&#039;&#039; &lt;br /&gt;
** &amp;lt;code&amp;gt; $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_fo_pdf.xsl   &amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;XLS &#039;&#039;&#039; &lt;br /&gt;
** &amp;lt;code&amp;gt; $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_xls.xsl &amp;lt;/code&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Der PDF-Export funktioniert zwar technisch, aber leider sehen die Ergebnisse oft nicht &amp;quot;schön&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Der XLS-Export wurde mit MS Excel &amp;lt;!--(95-2003)--&amp;gt; und OpenOffice&amp;lt;!-- (1.1.3-2.x)--&amp;gt; getestet. Da die Produkte automatisch auf Seitenbreite skalieren können, sieht der Export hier deutlich besser aus.&lt;br /&gt;
&lt;br /&gt;
Außerdem können grundlegende Layoutelemente wie Kopf- und Fußzeilen und Seitenzahlen individuell angepasst werden, ohne zwingend XSLT-Kenntnisse zu haben.&lt;br /&gt;
&lt;br /&gt;
== PDF-Export ==&lt;br /&gt;
&lt;br /&gt;
Kurz ein paar Hinweise:&lt;br /&gt;
&lt;br /&gt;
Am besten nimmt man zur Bearbeitung eine bestehende PDF-Vorlage.&lt;br /&gt;
&lt;br /&gt;
Tabellen:&lt;br /&gt;
&lt;br /&gt;
Für jede Spalte muss direkt unter fo:table fin table-column ein Knoten mit der Breite kommen (im mm)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fo:table&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-column column-width=”30mm”&amp;gt;&lt;br /&gt;
&amp;lt;fo:block font-size=”10pt” text-align=”start/end” font-weight=”bold” font-family=”serif” line-height=”9pt”&lt;br /&gt;
space-before.optimum=”6pt” space-after.optimum=”6pt” language=”en” hyphente=”true”&amp;gt;&lt;br /&gt;
&amp;lt;xsl:value-if select=”format-number(/ergebnisse…,’#.###.##0,00,’German’)”/&amp;gt;&lt;br /&gt;
German groß ist wichtig!!!&lt;br /&gt;
&amp;lt;/fo:block&amp;gt;&lt;br /&gt;
&amp;lt;/fo:table-column&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-header&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-row&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-cell border-width=”0.1mm” border-style=”solid” padding-left=”0.5mm” padding-right=”0.5mm”&amp;gt;..&lt;br /&gt;
&amp;lt;fo:table-body&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-row&amp;gt;&amp;lt;fo:table-cell&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;fo:block text-align=”center” font-size=”9pt” font-weight=”bold” hyphenate=”false”&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Blöcke zusammenhalten&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fo:block keep-together.within-page=”always”&amp;gt;&lt;br /&gt;
Block1&lt;br /&gt;
Block2&lt;br /&gt;
&amp;lt;/fo:block&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Um lokal zu testen gibt es die Java-Klasse de.superx.bin.ExcelPdfCreator&lt;br /&gt;
Params&lt;br /&gt;
&lt;br /&gt;
 -in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_fo_pdf_xxxx.xsl -out/home/superx/test.pdf&lt;br /&gt;
&lt;br /&gt;
(Dateiendung legt fest, dass ein PDF erzeugt werden soll).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schriftgröße des PDF-Exportes anpassen==&lt;br /&gt;
Bei Bedarf kann man die Schriftgröße des PDF-Exportes anpassen. Dazu einfach beim letzten Select des &amp;quot;select_stmts&amp;quot; der Maske noch angeben&lt;br /&gt;
&lt;br /&gt;
 select ...... , &#039;&#039;&#039;6::smallint as hidden_pdf_fontsize&#039;&#039;&#039; from tmp_erg order by ...;&lt;br /&gt;
&lt;br /&gt;
und in der XIL-Proplist als Spalte &amp;quot;hidden_pdf_fontsize&amp;quot; hinterlegen. &lt;br /&gt;
&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
Oder falls die Spalten über eine CUSTOM_ Variable im Repository definiert werden, kann man einfach ergänzen:&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;#assign CUSTOM_1234={&amp;quot;resulttable&amp;quot;:[&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_invnr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Inventarnr&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_sernr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Seriennummer&amp;quot;,&amp;quot;width&amp;quot;:9},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_gerbez&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Bezeichnung&amp;quot;,&amp;quot;width&amp;quot;:14},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;lieferant&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Lieferant&amp;quot;,&amp;quot;width&amp;quot;:10},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_hh_j&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Jahr&amp;quot;,&amp;quot;width&amp;quot;:6},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_betrdat&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Inbetriebname&amp;quot;,&amp;quot;width&amp;quot;:9},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_nutzd&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Nutzungs-\ndauer&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_auftnr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Auftrags-\nnummer&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_preis&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Preis&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_inst&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Kosten-\nstelle&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;splitktr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Kosten-\nträger&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_nutzer&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Nutzer&amp;quot;,&amp;quot;width&amp;quot;:7},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_raum&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Raum&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{&amp;quot;field&amp;quot;:&amp;quot;8::smallint as hidden_pdf_fontsize&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;hidden_pdf_fontsize&amp;quot;,&amp;quot;width&amp;quot;:1}&#039;&#039;&#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
]}/&amp;gt;&lt;br /&gt;
== Excelexport ==&lt;br /&gt;
{{Hinweis|Es wird nicht vorausgesetzt, dass Sie Microsoft Excel nutzen. Es wird zwar das Excel-Format erzeugt (*.xslx), aber in der Regel sind diese Dateien auch für andere Softwareprodukte, z.B. LibreOffice, nutzbar. }}&lt;br /&gt;
===Performance-optimiertes Excel===&lt;br /&gt;
Man kann einen Performance-optimierten Excelexport anstoßen, indem man im Berichtskopf den Kommentar &amp;quot;--ram excelexport&amp;quot; setzt.&lt;br /&gt;
Dies ist z.B. bei Datenblattberichten standardmäßig der Fall.&lt;br /&gt;
&lt;br /&gt;
===Excel-Vorlagen===&lt;br /&gt;
{{Achtung|Diese Funktionalität wird derzeit überarbeitet, weil sie nur mit dem alten Excel Format (*.xls) funktioniert. }}&lt;br /&gt;
Am besten nimmt man zur Bearbeitung eine bestehende xsl-Vorlage.&lt;br /&gt;
&lt;br /&gt;
Man kann eine bestehende Excel-Datei als Vorlage nehmen (attribut Vorlage des xls_workbook Knotens).&lt;br /&gt;
&lt;br /&gt;
Dies ist praktisch, um nicht direkt erzeugbare Einstellungen zu hinterlegen, z. B.&lt;br /&gt;
* Skalierung auf 70%&lt;br /&gt;
* wiederholende Tabellenüberschrift (Seite einrichten/Tabelle)&lt;br /&gt;
* Extras/Schutz/Blattschutz (Poi kann man trotzdem reinschreiben!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xls_workbook vorlage=&amp;quot;vorlage1.xls&amp;quot; removeAdditionalSheets=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Tabellen auf Vorrat angelegt hat, kann man mit dem Tag removeAdditionalSheets=true überflüssige Tabellen entfernen.&lt;br /&gt;
&lt;br /&gt;
Es werden alle Zellen neu erzeugt, man kann jedoch einzelne Zeilen oder Zellen überspringen, um in der Excel-Vorlage enthaltenes nicht zu überschreiben:&lt;br /&gt;
 &amp;lt;xls_row jumpover=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xls_cell jumpover=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/xls_cell&amp;gt;&lt;br /&gt;
Tabellenblatt&lt;br /&gt;
 &amp;lt;xsl_sheet&amp;gt;&lt;br /&gt;
Zelle kann Attribute haben ebene=summe&lt;br /&gt;
&amp;lt;xsl_row&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Zellen&lt;br /&gt;
Für Zahlen &lt;br /&gt;
 &amp;lt;xls_cell style=&amp;quot;body_dec&amp;quot; numeric=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mögliche Attribute: width (gilt logischerweise für ganze Spalte)&lt;br /&gt;
&lt;br /&gt;
Um lokal zu testen gibt es Java-Klasse de.superx.bin.ExcelPdfCreator&lt;br /&gt;
Params&lt;br /&gt;
&lt;br /&gt;
 -in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_xls_xxxxxx.xsl -out/home/superx/test.xls&lt;br /&gt;
&lt;br /&gt;
(Dateiendung legt fest, dass eine Excel-Datei erzeugt werden soll)&lt;br /&gt;
&lt;br /&gt;
==Export als Mediawiki-Quellcode==&lt;br /&gt;
Wenn sie die Software Mediawiki nutzen, können Sie Tabellenexporte auch direkt als Quellcode exportieren:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_wiki1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Der Quellcode wird im Browser in einem neuen Fenster ausgegeben:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_wiki2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_wiki3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=Masken- und Tabellenlayouts mit XSLT=&lt;br /&gt;
==Stylesheets verwalten==&lt;br /&gt;
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 &lt;br /&gt;
 $WEBAPP/xml/maske_html.xsl &lt;br /&gt;
verwenden. Für Ergebnistabellen können Sie das Muster-Stylesheet &lt;br /&gt;
 $WEBAPP/xml/tabelle_html.xsl &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
[[Bild:sx_stylesheets_access.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Das Beispiel zeigt einige Stylesheets, das erste ist bereits Teil des Kernmoduls, das fünfte befindet sich im COB-Modul. Zu den Feldern:&lt;br /&gt;
* &#039;&#039;filename&#039;&#039; kennzeichnet den Dateinamen relativ zum Verzeichnis $SUPERX_DIR/webserver/tomcat/webapps/superx/xml.&lt;br /&gt;
* &#039;&#039;caption&#039;&#039; dient als Kurzüberschrift, die im Ergebnisblatt als Button angezeigt wird.&lt;br /&gt;
* &#039;&#039;description&#039;&#039; stellt einen Erläuterungstext für den Button dar.&lt;br /&gt;
* &#039;&#039;relation&#039;&#039; bezieht sich auf die Beziehung des Stylesheets; mögliche Werte sind &amp;quot;mask&amp;quot; für eine Maske und &amp;quot;table&amp;quot; für Tabelle. &lt;br /&gt;
* &#039;&#039; useragent&#039;&#039; bietet die Möglichkeit, ein Stylesheet für spezielle Lesegeräte anzubieten, z.B. WAP-Hanys oder Braille-Zeilen. &lt;br /&gt;
* &#039;&#039;contenttype&#039;&#039; 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).&lt;br /&gt;
* &#039;&#039;is_generic&#039;&#039;. Generisches Stylesheet für alle Ergebnistabellen (1=ja)&lt;br /&gt;
* &#039;&#039;usage_resultset_data&#039;&#039;. 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.&lt;br /&gt;
* &#039;&#039;stylesheet_type&#039;&#039;. 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)&lt;br /&gt;
* &#039;&#039;jr_datasource&#039;&#039;. 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.&lt;br /&gt;
Im Browser können Sie die Daten mit dieser Maske bearbeiten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:stylesheets_suchen_bearbeiten.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Zuordnung eines Stylesheets zu einer Maske==&lt;br /&gt;
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. &amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Stylesheet_Zuordnung_2.png|width=400|caption=MaskenfeldSemester}}&lt;br /&gt;
&lt;br /&gt;
Das Feld Sortiernummer (ord) kennzeichnet die Reihenfolge der anzubietenden Stylesheets. Wir sehen hier, dass zuerst das generische Standard-Stylesheet angezeigt wird und dann ein [https://superxhosting.de/superx/edit/kb/kb_media_ansehen.jsp?id=12 JasperReport als weiteres Stylesheet].&lt;br /&gt;
{{ImagePara |imgsrc=Stylesheet_Zuordnung.png|width=400|caption=MaskenfeldSemester}}&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
== Einzelne Templates anpassen ==&lt;br /&gt;
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 &#039;&#039;&#039;maske_html/pdf/xls.xsl bzw tabelle_html/pdf/xls.xsl&#039;&#039;&#039; machte und darin Änderungen vornahm.&lt;br /&gt;
&lt;br /&gt;
Da inzwischen immer wieder Erweiterungen an den Standardstylesheets vorgenommen werden, kommen diese Erweiterungen dann jedoch nicht in die kopierten Spezialstylesheets.&lt;br /&gt;
&lt;br /&gt;
Daher sind die Stylesheets inzwischen etwas „objektorientierter&amp;quot; und kleine Änderungen kann man auch in der Datei&lt;br /&gt;
 .../webapps/superx/xml/page_components_final.xsl &lt;br /&gt;
vornehmen.&lt;br /&gt;
&lt;br /&gt;
Beispiel aus der Praxis, bei 2-3 Masken sollte unter dem Maskennamen noch ein Link zu PDF-Dateien erscheinen.&lt;br /&gt;
&lt;br /&gt;
In der Standard maske_html.xsl ist nach dem Titel ein template-Aufruf definiert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;maskentitel&amp;quot;&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;maske/@name&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;xsl:call-template name=&amp;quot;pccustomize&amp;quot;&amp;gt; &amp;lt;xsl:with-param name=&amp;quot;position&amp;quot; select=&amp;quot;&#039;mask_post_title&#039;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:with-param&amp;gt; &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Template ist als leer in Page-Components.xsl definiert. Man kann es in &amp;lt;code&amp;gt;pageComponents_final.xsl&amp;lt;/code&amp;gt; definieren, dann wird es überschrieben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template name=&amp;quot;pccustomize&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;position&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:if test=&amp;quot;$position=&#039;mask_post_title&#039;&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;!-- hier kommt der individuelle Inhalt rein --&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Links werden nur bei den entsprechenden Masken eingebaut.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Beispiel für das Entfernen des PDF-Export-Buttons für die Masken mit der tid 16000 und 17000:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:template name=&amp;quot;exportButtons&amp;quot; &amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;xsl:if test=&amp;quot;/ergebnisse/ergebnis/maskenname/@id!=&#039;16000&#039; and /ergebnisse/ergebnis/maskenname/@id!=&#039;17000&#039;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;!-- hier kommt der PDF-Button --&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;xsl_functions.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;resultset_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;interLinks_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;pageComponents_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;tabelle_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;pageComponents_html_final.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als weiteres braucht man nur das Template von tabelle_html.xsl zu überlagern, was geändert werden soll.&lt;br /&gt;
&lt;br /&gt;
Einfachstes Beispiel - keine Erläuterungslinks anzeigen:&lt;br /&gt;
&lt;br /&gt;
Template explanation wird überlagert&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:template name=&amp;quot;explanation&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei Bedarf kann man auch die standardmäßig leeren Funktionen wie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:call-template name=&amp;quot;tablecustomize&amp;quot;&amp;gt;&amp;lt;xsl:with-param name=&amp;quot;position&amp;quot;&lt;br /&gt;
select=&amp;quot;&#039;table_post_center&#039;&amp;quot;&amp;gt;&amp;lt;/xsl:with-param&amp;gt;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
überlagern.&lt;br /&gt;
&lt;br /&gt;
Am Ende folgt dann, um die Tabelle aufzubauen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:call-template name=&amp;quot;table&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Besonderes XML zu ALLEN Masken hinzufügen ==&lt;br /&gt;
&lt;br /&gt;
Für das Management-Modul gibt es eine ganz besondere Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Anwendungsfall: ein Navigationsmenü soll in allen Masken bereitgestellt werden, es soll aber auch möglich sein, ganz normale SuperX-Masken einzubinden.&lt;br /&gt;
&lt;br /&gt;
also Aufruf z.B.&lt;br /&gt;
  http://localhost:8080/superx/servlet/SuperXmlTabelle?tid=xxy&amp;amp;param=1&amp;amp;stylesheet=tabelle_html_man.xsl&lt;br /&gt;
&lt;br /&gt;
Legen Sie dazu in Repository ein Feld ID=CUSTOMXMLADD an. Da kann fester XML drin stehen, der wird zu allen Tabellen-xmls hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
zB..&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;navigation&amp;gt;&lt;br /&gt;
&amp;lt;item1 .../&amp;gt;&lt;br /&gt;
&amp;lt;item2 ../&amp;gt;&lt;br /&gt;
&amp;lt;/navigation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der wird dann in Tabellen XML unter ergebnisse/ergebniselement hinzufügt und kann ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
z.B:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Navigation&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:for-each select=&amp;quot;/ergebnisse/ergebnis/ergebniselement/navigation/item&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;ebene0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;ebene1&amp;quot; target=&amp;quot;_self&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:attribute name=&amp;quot;href&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:value-of select=&amp;quot;concat(HtmlUtils:encodeURL(&#039;SuperXmlTabelle&#039;,/ergebnisse/@jsessionid ),&#039;?tid=&#039;,href)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;![CDATA[]]&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;caption&amp;quot; /&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&lt;br /&gt;
              &amp;lt;/a&amp;gt;&lt;br /&gt;
              &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der hinzuzufügende XML wird dynamisch mit Freemarker generiert, z.B.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xupdate&amp;gt;&lt;br /&gt;
 &amp;lt;text table=&amp;quot;sx_repository&amp;quot; field=&amp;quot;content&amp;quot; where=&amp;quot;id=&#039;CUSTOMXMLADD&#039;&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;![CDATA[&amp;lt;#include &amp;quot;MAN_MAKROS&amp;quot;/&amp;gt;&amp;lt;sqlvars&amp;gt; &amp;lt;sqlvar name=&amp;quot;entries&amp;quot; type=&amp;quot;hash&amp;quot;&amp;gt;&lt;br /&gt;
select R.catalogue_id,K.shortname,sqlchunk,calcratio,decimalplaces,linksub,linktimeline&lt;br /&gt;
from man_catalogue K,man_catalogue_rpt R&lt;br /&gt;
where&lt;br /&gt;
K.id=R.catalogue_id and R.active=1 order by R.sortnr, R.sortnr2 &amp;lt;/sqlvar&amp;gt; &amp;lt;/sqlvars&amp;gt; &lt;br /&gt;
&amp;lt;#if !Semester?exists&amp;gt;&amp;lt;#assign Semester=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !Bezugssemester?exists&amp;gt;&amp;lt;#assign Bezugssemester=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !Jahr?exists&amp;gt;&amp;lt;#assign Jahr=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !faecherkeys?exists&amp;gt;&amp;lt;#assign faecherkeys=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !Fächer?exists&amp;gt;&amp;lt;#assign Fächer={&amp;quot;selectedKey&amp;quot;:&amp;quot;&amp;quot;}&amp;gt;&amp;lt;/#if&amp;gt; &lt;br /&gt;
&amp;lt;#if !Kostenstelle?exists&amp;gt;&amp;lt;#assign Kostenstelle={&amp;quot;selectedKey&amp;quot;:&amp;quot;&amp;quot;}&amp;gt;&amp;lt;/#if&amp;gt; &lt;br /&gt;
&amp;lt;#if !(.vars[&amp;quot;Datum (Personal)&amp;quot;]?exists)&amp;gt;&amp;lt;#assign &amp;quot;Datum (Personal)&amp;quot;=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;   &lt;br /&gt;
&amp;lt;#if !(.vars[&amp;quot;Beschäftigungsstelle (Person)&amp;quot;]?exists)&amp;gt;&amp;lt;#assign &amp;quot;Beschäftigungsstelle (Person)&amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/#if&amp;gt;&amp;lt;navigation&amp;gt;&amp;lt;item&amp;gt;&amp;lt;href&amp;gt;CDATASTART888880190&amp;amp;Jahr=${Jahr}&amp;amp;Semester=${Semester}&amp;amp;Datum%20(Personal)=${.vars[&amp;quot;Datum (Personal)&amp;quot;]}&lt;br /&gt;
CDATAEND&amp;lt;/href&amp;gt;&amp;lt;caption&amp;gt;Start&amp;lt;/caption&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;#if entries?is_sequence&amp;gt;&amp;lt;#foreach e in entries&amp;gt; &amp;lt;#assign linktimeline=e.linktimeline?interpret/&amp;gt;&lt;br /&gt;
 &amp;lt;#assign linkt&amp;gt;&amp;lt;@linktimeline/&amp;gt;&amp;lt;/#assign&amp;gt; &amp;lt;#assign linksub=e.linksub?interpret/&amp;gt;&lt;br /&gt;
 &amp;lt;#assign links&amp;gt;&amp;lt;@linksub/&amp;gt;&amp;lt;/#assign&amp;gt;  &amp;lt;doubleitem id=&amp;quot;${e.id}&amp;quot;&amp;gt; &amp;lt;aktuell&amp;gt;CDATASTART${links?replace(&#039;Fakultäten|&#039;,&#039;&#039;)}CDATAEND&amp;lt;/aktuell&amp;gt;&lt;br /&gt;
 &amp;lt;zeitreihe&amp;gt;CDATASTART${linkt?replace(&#039;Zeitreihe|&#039;,&#039;&#039;)}CDATAEND&amp;lt;/zeitreihe&amp;gt;&lt;br /&gt;
 &amp;lt;caption&amp;gt;CDATASTART${e.shortname}&lt;br /&gt;
CDATAEND&amp;lt;/caption&amp;gt; &amp;lt;/doubleitem&amp;gt; &amp;lt;/#foreach&amp;gt; &amp;lt;/#if&amp;gt;&amp;lt;/navigation&amp;gt;]]&amp;gt;&lt;br /&gt;
  &amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xupdate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danielq</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Masken-_und_Tabellengestaltung&amp;diff=16616</id>
		<title>Masken- und Tabellengestaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Masken-_und_Tabellengestaltung&amp;diff=16616"/>
		<updated>2026-09-14T19:25:44Z</updated>

		<summary type="html">&lt;p&gt;Danielq: /* Eigene Navigationsspalten zum Anklicken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Vorbemerkung SuperX/HISinOne-BI=&lt;br /&gt;
;Vorbemerkung:Die im folgenden vorgestellten Techniken funktionieren in SuperX und in der HISinOne-BI in der Oberfläche &amp;quot;Business Intelligence&amp;quot;-&amp;gt; &amp;quot;Standardberichte&amp;quot; (ggf. mit dem Zusatz &amp;quot;konfigurieren&amp;quot; oder &amp;quot;klassisch&amp;quot;). Nicht alle der im Folgenden dargestellten Möglichkeiten funktionieren in der Angular Oberfläche von HISinOne-BI.&lt;br /&gt;
&lt;br /&gt;
=Selektionsmasken anpassen=&lt;br /&gt;
==Checkboxen und Querabhängigkeiten==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;UserID&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
steht, ist es wichtig, dass auch für Checkboxen in relation und default datenbanktypische Definitionen der auswählbaren Werte stehen, z.B.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select &#039;true&#039;,&#039;Ja&#039; from xdummy union select &#039;false&#039;,&#039;Nein&#039; from xdummy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und im Defaultwert:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select &#039;false&#039;,&#039;Nein&#039; from xdummy;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Felder auf der Maske verstecken==&lt;br /&gt;
&lt;br /&gt;
Wenn Felder auf der Maske versteckt werden sollen, gibt es zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
*Feldart 13 -&amp;gt; das Feld ist versteckt und wird intern nicht aufgebaut, im Masken-XML ist es aber enthalten &lt;br /&gt;
&lt;br /&gt;
* Feldart beliebig, Eintrag in Spalte attribut: hidden &amp;lt;/br&amp;gt; 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) &lt;br /&gt;
&lt;br /&gt;
* Feldart 999 (ab SuperX3.5rc2): Feld wird gar nicht erst aus Datenbank eingelesen, also ob nicht existent &lt;br /&gt;
&lt;br /&gt;
Bei Benutzung der erweiterten kameralen Rechte SxFinRechte:&amp;lt;/br&amp;gt;&lt;br /&gt;
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(..,&amp;quot;&amp;lt;&amp;lt;Titel&amp;gt;&amp;gt;&amp;quot;,....) aufgelöst werden können!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
==Felder zum Verarbeiten von Eingaben per Javascript==&lt;br /&gt;
;Vorbemerkung:Diese Auswertung wird mit Release Kernmodul 5.1 bzw. HISinOne-BI 2024.06 ausgeliefert.&lt;br /&gt;
&lt;br /&gt;
Ab  können Sie vor dem Abschicken einer Maske benutzerdefiniterte Scripte ausführen, die z.B.&lt;br /&gt;
* bei Feldinhalt a von Feld x das Feld y mit dem Inhalt b befüllen&lt;br /&gt;
** Beispiel fürs Land Sachsen: wenn im Feld &amp;quot;Bericht&amp;quot; der Wert &amp;quot;Stellenbewirtschaftungsbericht (Excel)&amp;quot; ausgewählt wird, wird&lt;br /&gt;
*** das Feld &amp;quot;tablestylesheet&amp;quot; mit dem entsprechenden JasperReport befüllt&lt;br /&gt;
*** das Feld &amp;quot;Ausgabeformat&amp;quot; mit dem Wert für Excel befüllt.&lt;br /&gt;
* Es gibt noch viele andere Szenarien, z.B. können bestimmte Eingaben geprüft und, bei Warnungen, entsprechende Meldungen ausgegeben werden, und das Abschicken wird verhindert.&lt;br /&gt;
&lt;br /&gt;
Technisch ist das wie folgt umgesetzt: Wenn eine Maske ein Feld mit dem Namen &amp;quot;_customValidation&amp;quot; hat, wird &lt;br /&gt;
* der defaultwert des Feldes ausgewertet, dieser enthält den Namene einer Javascript-Methode&lt;br /&gt;
* diese Methode wird &#039;&#039;vor&#039;&#039; dem Abschicken einer Maske ausgeführt und je nachdem ob &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; zurückgeliefert wird, wird die Maske tatsächlich abgeschickt oder nicht.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel:&lt;br /&gt;
* Die Maske &amp;quot;Maske kopieren&amp;quot; ermöglicht es, Maskenkopien anzulegen. Die Zielnummer sollte nach den Konventionen von SuperX in einem 10er oder 20er Nummernkreis bestehen. Wenn eine andere Zahl eingegeben wird, sollte eine Warnung erscheinen.&lt;br /&gt;
* das Maskenfeld sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:masken_kopieren_custom_validation_feld.png|600px]]&lt;br /&gt;
&lt;br /&gt;
* Im Maskenfeld befindet sich eine Referenz auf die Javascript-Funktion &#039;&#039;validiereNeueMaskennr&#039;&#039;. Dieser Funktion wird vom Server immer der Parameter des Formulars und der Plattform (superx oder HISinOne-BI) übergeben. Hier der Quellcode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 function validiereNeueMaskennr(frm,platform)&lt;br /&gt;
{&lt;br /&gt;
	var neueNr=frm.elements[&amp;quot;Neue tid&amp;quot;].value;&lt;br /&gt;
	if(neueNr.indexOf(&amp;quot;0&amp;quot;, neueNr.length - 1) == -1)&lt;br /&gt;
	{&lt;br /&gt;
		var meldung=&amp;quot;&amp;lt;p&amp;gt;Achtung: bitte w&amp;amp;auml;hlen Sie eine Maskennummer, die mit 0 endet. Zu Nummernkreisen &amp;quot;;&lt;br /&gt;
		if(platform==&amp;quot;his1&amp;quot;)&lt;br /&gt;
			meldung +=&amp;quot;siehe &amp;lt;a href=&#039;https://wiki.his.de/mediawiki/index.php/Masken_entladen_und_einspielen_-_HISinOne-BI&#039; target=&#039;_blank&#039;&amp;gt;Leitfaden&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
			else&lt;br /&gt;
			meldung +=&amp;quot;siehe &amp;lt;a href=&#039;http://www.superx-projekt.de/doku/entwicklung/masken/f_MaskenerstellenausKopien.htm&#039; target=&#039;_blank&#039;&amp;gt;Leitfaden&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
				&lt;br /&gt;
		document.getElementById(&#039;validation&#039;).innerHTML = meldung;&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Im Ergebnis passiert nun folgendes, wenn man eine &amp;quot;ungerade&amp;quot; Maskennummer als &amp;quot;Neue Tid&amp;quot; eingibt und abschickt:&lt;br /&gt;
&lt;br /&gt;
[[Bild:masken_kopieren_custom_validation.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Es erscheint eine Warnung, und die Maske wird nicht abgeschickt.&lt;br /&gt;
&lt;br /&gt;
== Felder für Benutzergruppen verstecken ==&lt;br /&gt;
Es ist möglich, auf einzelnen Masken Felder für einzelne Gruppen zu verstecken. Dies dient z. B. dazu, das Feld &amp;quot;Hörerstatus&amp;quot; für die Gruppe &amp;quot;Externe Anwender&amp;quot; auszublenden, d.h. es würde immer &amp;quot;Alle&amp;quot; selektiert. Um dies zu realisieren geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
# Ermitteln Sie zunächst die Feldnummer unter Administration-&amp;gt;Masken -&amp;gt; Felder -&amp;gt; Feld suchen.&lt;br /&gt;
# Nutzen Sie die Selektionsparameter, um das gewünschte Feld zu suchen.&lt;br /&gt;
# Klicken Sie auf &amp;quot;Abschicken&amp;quot;. Die Nummer steht in der Spalte &amp;quot;tid&amp;quot;.&lt;br /&gt;
# Öffnen Sie Administration-&amp;gt; Tabelle suchen&lt;br /&gt;
#Geben Sie als Stichwort &amp;quot;pref&amp;quot; ein.&lt;br /&gt;
#Es erscheinen ein Listen- und ein Detailformular für die Tabelle.&lt;br /&gt;
#Klicken Sie auf &amp;quot;Bearbeiten&amp;quot;. Es öffnet sich ein Detailformular.&lt;br /&gt;
# Wählen Sie die gewünschte &amp;quot;Gruppe&amp;quot; sowie das &amp;quot;Feld&amp;quot; aus.&lt;br /&gt;
#Wählen Sie unter Voreinstellung &amp;quot;Versteckt&amp;quot;, damit wird das Feld für die jeweilige Gruppe ausgeblendet.&lt;br /&gt;
# Klicken Sie auf &amp;quot;Neuen Datensatz einfügen&amp;quot; bzw. &amp;quot;Speichern&amp;quot; .&lt;br /&gt;
# Nach dem Speichern können Sie diesen Datensatz &amp;quot;kopieren&amp;quot; oder einen &amp;quot;Neuen Datensatz anlegen&amp;quot; . Auch ein Blättern durch die angelegten Datensätze ist nun möglich.&lt;br /&gt;
&lt;br /&gt;
== Anpassung von Feld-Vorbelegungen ==&lt;br /&gt;
Manche Masken haben Vorbelegungen, die bei der Hochschule nicht passen, z.B. Hörerstatus &amp;quot;Alle&amp;quot; im Bereich Studierende. Die in den jeweiligen Komponenten ausgelieferten Masken lassen sich zwar ändern, aber beim Einspielen eines neuen Releases würden diese überschrieben. Um dies zu vermeiden gibt es zwei Wege:&lt;br /&gt;
&lt;br /&gt;
* Sie kopieren die Maske in einen eigenen Nummernkreis, dann ist sie vor Upgrades &amp;quot;geschützt&amp;quot;.&lt;br /&gt;
* Sie ändern die Maske, und führen danach eine [Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung| Customize]-Regel ein, die nach jedem Upgrade ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Beide Varianten haben Vor- und Nachteile. Die erste Variante ist besser, wenn Sie nur eine Maske ändern wollen, und ggf. auch noch andere Layouts (z.B. auch Spaltenlayouts der Ergebnistabelle) ändern wollen. Die zweite Variante ist besser, wenn Sie auf einen Schlag mehrere Masken bzgl. einer Kleinigkeit ändern wollen. Das obige Beispiel &amp;quot;Hörerstatus&amp;quot; wäre also besser mit der zweiten Variante lösbar, weil es das Feld in vielen Masken gibt. Hier ein Beispiel wie man das macht:&lt;br /&gt;
&lt;br /&gt;
Ändern Sie die Feldvorbelegung über die Maske Administration-&amp;gt; Masken -&amp;gt; Felder -&amp;gt; &amp;quot;Feld suchen&amp;quot;, z.B. beim Feld &amp;quot;Hörerstatus&amp;quot; in der Maske &amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Bisheriger Wert in Spalte Defaultwert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr, eintrag from hoererstatus  where eintrag=&#039;alle&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Neuer Wert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr, eintrag from hoererstatus  where eintrag=&#039;Haupthörer&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Speichern Sie die Änderung, und testen Sie die Maske. Wenn das Ergebnis Sie zufrieden stellt, können Sie es wie folgt vor Änderungen durch Releases schützen:&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie eine Datei $SOS_PFAD/conf/customize.sql&lt;br /&gt;
&lt;br /&gt;
und schreiben Sie den Inhalt hinein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 --Änderung xx.xx.xxxx Maskenvorbelegung von Hörerstatus &amp;quot;alle&amp;quot; auf Haupthörer ändern:&lt;br /&gt;
update felderinfo&lt;br /&gt;
 set defaultwert=&lt;br /&gt;
     &#039;&amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr, eintrag from hoererstatus  where eintrag=&#039;&#039;Haupthörer&#039;&#039;&#039;&lt;br /&gt;
 where name=&#039;Hörerstatus&#039; and tid=16004;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit wird diese Änderung nach jedem Upgrade ausgeführt. Sie können die Änderung auch direkt für alle Masken vornehmen, indem Sie die Where-Bedingung &amp;quot;and tid=16004&amp;quot; entfernen.&lt;br /&gt;
&lt;br /&gt;
Hier noch ein Beispiel für das Feld &amp;quot;Status&amp;quot;: wir ändern den Default von &amp;quot;Alle ohne Beurl.&amp;quot; nach &amp;quot;Alle ohne Beurl., ohne Exmatr.&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 --Änderung xx.xx.xxxx: Standardwert für Feld Status im Bereich Studierende: alle ohne beurl., ohne exmatr.&lt;br /&gt;
update  felderinfo&lt;br /&gt;
 set defaultwert=&lt;br /&gt;
      &#039;&amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select apnr,eintrag from sos_status where eintrag=&#039;&#039;Alle ohne Beurl., ohne Exmatr.&#039;&#039;&#039;&lt;br /&gt;
 where name=&#039;Status&#039;&lt;br /&gt;
 and tid between 16000 and 16999;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=Ergebnistabellen anpassen=&lt;br /&gt;
==Vorschau: Erweiterte Ergebnistabellen==&lt;br /&gt;
Im [[Masken-Tutorial]] wird erläutert wie Quellcodes für Masken erstellt werden. Damit werden grundlegende Tabellenlayouts erzeugt. Darüber hinaus gibt es viele weitere Möglichkeiten, diese Layouts anzupassen.&lt;br /&gt;
&lt;br /&gt;
Die folgende Abbildung zeigt, was jenseits von &amp;quot;normalen&amp;quot; Ergebnistabellen so möglich ist, am Beispiel einer Tabelle aus dem Managementmodul:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_treetable2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Sie sehen&lt;br /&gt;
# Eine Baumdarstellung inkl. Autklappmöglichkeit für die Zeilen&lt;br /&gt;
# Dynamische Spalten z.B. bei Semesterzeitreihen&lt;br /&gt;
# Verschachtelte Spaltenüberschriften&lt;br /&gt;
# Einzelne Zellen werden mit CSS formatiert&lt;br /&gt;
Die folgende Abbildung zeigt den Quellcode, im letzten SELECT kann das Layout gesteuert werden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_treetable3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Dies wird unten näher erläutert. Aber dies ist nur ein Teil der Möglichkeiten, die es hier gibt. Sie können auch Hyperlinks in die Tabellenzellen legen, oder kleine Balkengrafiken einbauen.&lt;br /&gt;
&lt;br /&gt;
==Baumdarstellung==&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;ebene&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_treetable1.png|650px]]&lt;br /&gt;
&lt;br /&gt;
Zum Nachladen von Ergebniszeilen wird das Stylesheet tabelle_html_rows.xsl benutzt.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Baumdarstellung lässt sich auch dynamisch mit Sichtenzugriff erstellen. Dazu kann mit .elements auf Sichten zugegriffen werden. Für Studiengangssichten also Studiengang.elements:&lt;br /&gt;
&lt;br /&gt;
 create table tmp_aggr (&lt;br /&gt;
 	Ebene integer,&lt;br /&gt;
 	strukturStr varchar(255),&lt;br /&gt;
 	name varchar (255),&lt;br /&gt;
 	key varchar(255),&lt;br /&gt;
 	anzahl integer,&lt;br /&gt;
 	nextsem integer,&lt;br /&gt;
 	anteil float,&lt;br /&gt;
 	inzweisem integer,&lt;br /&gt;
 	anteilzwei float,&lt;br /&gt;
 	abschlussarbeit integer&lt;br /&gt;
 	);&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;#foreach einElement in Studiengang.elements&amp;gt;&lt;br /&gt;
 insert into tmp_aggr(Ebene,strukturStr, name, key,anzahl,nextsem,anteil,inzweisem,anteilzwei,abschlussarbeit) &lt;br /&gt;
 select&lt;br /&gt;
 	${einElement.level}::smallint,&lt;br /&gt;
 	&#039;${einElement.strukturStr}&#039;::char(50),&lt;br /&gt;
 	&#039;${einElement.name}&#039;::char(200), &lt;br /&gt;
 	&#039;${einElement.key}&#039;::char(10),&lt;br /&gt;
 	count(E.matrikel_nr),&lt;br /&gt;
 	sum(E.nextsem),&lt;br /&gt;
 	(sum(E.nextsem)*100/count(E.matrikel_nr))::integer,&lt;br /&gt;
 	sum(E.inzweisem),&lt;br /&gt;
 	(sum(E.inzweisem)*100/count(E.matrikel_nr))::integer,&lt;br /&gt;
  	sum(E.abschlussarbeit)&lt;br /&gt;
 from tmp_ergebnis E&lt;br /&gt;
 where E.tid in ${einElement.subkeys}&lt;br /&gt;
 order by 1,2,3,4&lt;br /&gt;
 ;&lt;br /&gt;
 &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Aufruf eines Stylesheets==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Stylesheet (egal ob JasperReport oder XSLT) der Maske als alleiniges [[Masken_für_das_XML-Frontend_vorbereiten#Zuordnung_eines_Stylsheets_zu_einer_Maske|Tabellenstylesheet zuweisen]], wird dieses direkt im Ergebnis aufgerufen. Wenn Sie dann noch in der Maske ein Feld &amp;quot;Ausgabeformat&amp;quot; integrieren, können die Anwender zwischen HTML, Excel, PDF etc. wählen (s.u.). &lt;br /&gt;
&lt;br /&gt;
Sie können auch eine Maske mit den Feldern   &amp;quot;Bericht&amp;quot; und &amp;quot;Ausgabeformat&amp;quot; versehen, in dem die Anwender das entsprechende Layout (d.h. den JasperReport) auswählen kann. Ein funktionierendes Beispiel wäre z.B. die Maske &amp;quot;Studierende Datenblatt&amp;quot;. Um so etwas zu erzeugen gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Es muss auf der Maske ein Feld der Feldart 1 geben mit dem Namen tablestylesheet und der relation&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select distinct filename,X.caption from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=&amp;lt;&amp;lt;Maskennummer&amp;gt;&amp;gt;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und zum Beispiel für Defaultwert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select distinct filename,X.caption&lt;br /&gt;
 from sx_stylesheets X,sx_mask_style S&lt;br /&gt;
 where X.tid=S.stylesheet_id&lt;br /&gt;
 and S.maskeninfo_id=&amp;lt;&amp;lt;Maskennummer&amp;gt;&amp;gt;&lt;br /&gt;
 and S.ord=2&lt;br /&gt;
 order by 2                                                                                                            &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für das Feld tablestylesheet wird automatisch eine Beschriftung hinterlegt, damit auf der Maske als Anzeige &amp;quot;Bericht&amp;quot; erscheint.&lt;br /&gt;
&lt;br /&gt;
Außerdem müssen Sie ein Feld &amp;quot;Ausgabeformat&amp;quot; in der Maske ergänzen, ebenfalls Feldart=1:&amp;lt;/br&amp;gt;&lt;br /&gt;
relation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and nature::smallint&amp;lt;100 order by nature::smallint&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Beispiel für Excel als defaultwert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;SQL&amp;gt;&amp;gt; select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and description=&#039;Excel&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Navigationsspalten==&lt;br /&gt;
=== Eigene Navigationsspalten zum Anklicken ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Ergebnistabelle an das XML-Frontend übergeben wird, dann können spezielle Spalten für die Navigation eingesetzt werden. &lt;br /&gt;
&lt;br /&gt;
[[Bild:Navigationsspalten beispiel bearbeiten.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Die Spaltennamen werden im letzten select des select_stmt einer Maske übergeben, dabei kann bei mehreren Spalten Nummern angehängt werden.&lt;br /&gt;
&lt;br /&gt;
SQL für vorherigen Screenshot&lt;br /&gt;
  select benutzer,name,email,nexttable, nextedit,nextedit2 from tmp_ergebnis;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;nexttable&#039;&#039;&#039;: 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 &amp;quot;SuperXmlTabelle?tid=&amp;quot; ergänzt, d.h. dem Servlet wird als erster Parameter die maskeninfo-tid übergeben.&lt;br /&gt;
** So wird z.B. aus dem Inhalt: 20010&amp;amp;id=2044 &amp;lt;/br&amp;gt;der Link http://hostname/superx/servlet/SuperXmlTabelle?tid=20010&amp;amp;id=2044 &lt;br /&gt;
** Die Ergebnisseite wird dann um einen Button ergänzt.&lt;br /&gt;
*&#039;&#039;&#039;nextwindowtable&#039;&#039;&#039;: Das gleiche wie &amp;quot;nexttable&amp;quot;, nur es wird ein neues Fenster geöffnet. &lt;br /&gt;
*&#039;&#039;&#039;nextpage&#039;&#039;&#039;: Link auf eine andere SuperX-Tabelle wie &#039;&#039;&#039;nexttable&#039;&#039;&#039;, es wird nur ein anderes Icon und ein anderer Target genutzt. &lt;br /&gt;
*&#039;&#039;&#039;nextmask&#039;&#039;&#039;: 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 &amp;quot;SuperXmlMaske?tid=&amp;quot; ergänzt. &amp;lt;/br&amp;gt;So wird z.B. aus dem Inhalt: 20010&amp;amp;id=2044 &lt;br /&gt;
** der Link http://hostname/superx/servlet/SuperXmlMaske?tid=20010&amp;amp;id=2044 &amp;lt;/br&amp;gt;Die Ergebnisseite wird dann um einen Button ergänzt.&lt;br /&gt;
*&#039;&#039;&#039;nextdelete&#039;&#039;&#039;: Link auf eine andere SuperX-Maske; Im Unterschied zu nextmask wird hier ein anderes Icon gewählt: Auf der Ergbnisseite erscheint ein Delete-Button.&lt;br /&gt;
*&#039;&#039;&#039;nextedit&#039;&#039;&#039;: Link auf ein DBForms-Formular relativ zur URL des Servlets. Auf der Ergbnisseite erscheint ein Bearbeiten-Button.&lt;br /&gt;
*&#039;&#039;&#039;nextmail&#039;&#039;&#039;: Feldinhalte werden um einen Mailto-Tag ergänzt.&lt;br /&gt;
** z.B. info@superx-projekt.de wird zu &amp;lt;a mailto:&amp;quot;info@superx-projekt.de&amp;quot;&amp;gt; info@superx-projekt.de&amp;lt;/a&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;url&#039;&#039;&#039;: Feldinhalte werden um einen href-Tag, sowie wenn nötig um ein &amp;quot;http&amp;quot; ergänzt. &lt;br /&gt;
** z.B. www.superx-projekt.de wird zu &amp;lt;a href=&amp;quot;http://www.superx-projekt.de&amp;quot;&amp;gt;www.superx-projekt.de&amp;lt;/a&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;nextlink&#039;&#039;&#039;: 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 Link durch ein Trennzeichen &amp;quot;|&amp;quot; getrennt sind. &lt;br /&gt;
** So wird z.B. der Feldwert &amp;quot;SuperX-Projekt|http://www.superx-projekt.de&amp;quot; wie folgt ersetzt: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://www.superx-projekt.de&amp;quot;&amp;gt;SuperX-Projekt&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** Wenn nach dem Trennzeichen keine externe Web-Adresse angeboten wird (erkennbar am vorangestellten &amp;quot;http:&amp;quot;), dann wird der Inhalt des Feldes um den Pfad zum Tabellen-Servlet ergänzt&lt;br /&gt;
*** So wird z.B. aus dem Inhalt: Details zur Hochschule|20010&amp;amp;id=2044  der Link &amp;lt;a href=&amp;quot;../servlet/SuperXmlTabelle?tid=20010&amp;amp;id=2044&amp;quot;&amp;gt;Details zur Hochschule&amp;lt;/a&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;nextgenericlink&#039;&#039;&#039;: für generische Links mit Link-Text und Link-URL jeweils mit &amp;quot;|&amp;quot; getrennt.&lt;br /&gt;
*&#039;&#039;&#039;nextwindowgenericlink &#039;&#039;&#039;:wie nextgenericlink nur mit Target &amp;quot;_blank&amp;quot;, Zusatzfunktion (ab HisInOne 2023.06 bzw. Kernmodul 4.9)  ein img am Anfang stellt eine Grafik für den Link dar&lt;br /&gt;
** So wird z.B. aus dem Inhalt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
img:../images/pencil.svg|  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
der Link &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;../edit/portal/portal_show.jsp?config=portal_config_gang_bearbeiten&amp;amp;layout=COLUMNS_2&amp;amp;idParam=1&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;../images/pencil.svg&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;nextserverlink&#039;&#039;&#039;:Link auf eine andere Seite auf dem aktuellen Server&lt;br /&gt;
*&#039;&#039;&#039;nextdokulink&#039;&#039;&#039;:Link auf eine integrierte Wiki-Seite (nur HISinOne-BI)&lt;br /&gt;
&lt;br /&gt;
=== Ergebniszellen anklickbar machen ===&lt;br /&gt;
Statt eigener Navigationsspalten ist es auch möglich einzelne Zahlen bzw. Zellen in einem Bericht selbst anklickbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Dies kann z.B. genutzt werden, um per &amp;quot;DrillDown&amp;quot;&lt;br /&gt;
* von Kontoständen (wie 80.000 Euro) zu den zugehörigen Buchungen zu kommen,&lt;br /&gt;
* sich bei einer Summe von Studierenden die zugehörigen Matrikelnummern ausgeben zu lassen oder &lt;br /&gt;
* bei einem Flächenbericht mit Quadratmetern sich beim Anklicken der Quatdratmeterzahl die zugehörigen Räume anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
;Beispiel: In einem einfachen Flächenbericht gibt es eine Ergebnisspalte &amp;quot;flaeche&amp;quot;, die anklickbar gemacht werden soll und wenn eine Zahl angeklickt wird, soll ein Detailbericht mit den Räumen dazu (10250) aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
Für die Ergebnisspalte wie &lt;br /&gt;
  flaeche decimal(14,2) &lt;br /&gt;
muss es zusätzliches Feld in Ergebnistabelle geben &lt;br /&gt;
  hidden_flaeche text&lt;br /&gt;
-&amp;gt; durch das hidden wird erkannt, dass die Spalte selbst nicht dargestellt werden sol und auch nicht nach Excel/PDF exportiert werden soll , _flaeche sorgt für die Zuordnung zu Ergebnisspalte.&lt;br /&gt;
&lt;br /&gt;
Dann beim insert z.B.&lt;br /&gt;
  insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
  select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche)&lt;br /&gt;
   from tmp_rohdaten group by 1,2;&lt;br /&gt;
&lt;br /&gt;
Heißt: Für jede Ergebniszeile wird die Kostenstellennummer dargestellt und der Wert &amp;quot;flaeche&amp;quot; wird anklickbar gemacht (hidden_flaeche). Wenn die Flächenzahl in einer Ergebniszeile angeklickt wird, wird der Bericht 10250 mit dem Parameter z.B. Kostenstelle=1000 in einem neuen Tab aufgerufen.&lt;br /&gt;
&lt;br /&gt;
 Cachingcontrol=clearmask &lt;br /&gt;
sorgt dafür, dass die Maske neue geladen wird mit den Defaulteinstellungen und keine vorher auf anderen Masken getätigte Auswahl (z.B. Raumnutzungsart=500) eingetragen wird.&lt;br /&gt;
&lt;br /&gt;
Aufpassen muss man noch, wenn man zusätzliche Felder auf der Maske hat.&lt;br /&gt;
&lt;br /&gt;
z.B: Flächenart.&lt;br /&gt;
&lt;br /&gt;
Wenn der User sich nicht die Gesamtfläche ausgeben lässt, sondern eine Einschränkung auf eine oder mehrere Flächenarten gemacht habt, muss diese Einschränkung ja auch an den Detailbericht mit übergeben werden.&lt;br /&gt;
&lt;br /&gt;
Im einfachsten Fall bei obligatorischen numerischen Feld mit einfacher Auswahl - da ja immer etwas ausgewählt sein muss, wird der Tag &amp;lt;&amp;lt;Flächenart&amp;gt;&amp;gt; auf jeden Fall ersetzt.&lt;br /&gt;
  insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
  select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;&amp;amp;Flächenart=&amp;lt;&amp;lt;Flächenart&amp;gt;&amp;gt;&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche) &lt;br /&gt;
  from tmp_rohdaten group by 1,2;&lt;br /&gt;
&lt;br /&gt;
Ist bei Flächenart eine Mehrfachauswahl oder ist nicht numerisch möglich, muss man evtl machen&lt;br /&gt;
  insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
  select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;&amp;amp;Flächenart=${Flächenart?replace(&amp;quot;|&amp;quot;,&amp;quot;,&amp;quot;)}&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche) &lt;br /&gt;
  from tmp_rohdaten group by 1,2;&lt;br /&gt;
Die Variable ${Flächenart} wird durch die Auswahl des Users gefüllt, dabei werden Pipezeichen bei Mehrfachauswahl durch das Replace mit Kommas ersetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn das Feld nicht obligatorisch ist oder für Gesamtsummenzeile nicht berücksichtigt werden soll, muss man etwas mit freemarker tricksen.&lt;br /&gt;
Man erstellt mit assign eine leere Freemarker-Variable für den Flächenartparameter (flart=&amp;quot;&amp;quot;), wenn etwas ausgewählt ist, wird die Variable mit Inhalt gefüllt, z:B. &amp;amp;Flächenart=NF1,NF2 - für die zwei ausgewählten Flächenarten NF1 und NF2. In den Link wird dann der Inhalt der FreemarkerVariable mit ${flart} eingebaut.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign flart=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
-- Wenn der User eine oder mehrere Flächenarten auf der Maske ausgewählt hat, &lt;br /&gt;
-- muss dies auch im LInk übergeben werden mit Komma statt Pipezeichen&lt;br /&gt;
&amp;lt;#if &amp;quot;&amp;lt;&amp;lt;Flächenart&amp;gt;&amp;gt;&amp;quot;!=&amp;quot;&amp;quot;&amp;gt;&amp;lt;#assign flart=&amp;quot;&amp;amp;Flächenart=&amp;quot;+Flächenart?replace(&amp;quot;|&amp;quot;,&amp;quot;,&amp;quot;)/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
insert into tmp_erg (kostenstelle,hidden_flaeche,flaeche)&lt;br /&gt;
select kostenstelle,&#039;?tid=10250&amp;amp;Kostenstelle=&#039;||kostenstelle||&#039;${flart}&amp;amp;cachingcontrol=clearmask&#039;,sum(flaeche) from tmp_rohdaten group by 1,2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Beispielmaske (mit noch mehr Freemarker Tricks) ist der Bericht 10320 &amp;quot;Flächen nach Kostenstellen-Flächenarten-Gebäuden (Zeitreihe)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Rechteverwaltung für die Detailmaske ===&lt;br /&gt;
Wenn abgefragt werden soll, ob ein User Rechte für die Untermaske hat und nur in dem Fall die Navigationsspalte angezeigt werden soll oder die Zahl anklickbar gemacht werden soll, kann man dies mit einer Freemarkerfunktion machen&lt;br /&gt;
&lt;br /&gt;
z.B. im letzten Select-Statement&lt;br /&gt;
 select kostenstelle,name  &amp;lt;#if UserHasMaskRight(23230)&amp;gt; , nextedit &amp;lt;/#if&amp;gt; from tmp_erg&lt;br /&gt;
analog in der XIL-Proplist.&lt;br /&gt;
&lt;br /&gt;
Oder bei einer &amp;quot;Hidden&amp;quot;-spalte, bleibt diese leer außer wenn der Anwender Rechte für den Unterbericht hat&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;#if UserHasMaskRight(23230)&amp;gt;&lt;br /&gt;
  update tmp_erg set hidden_flaeche=&#039;.....&#039;;&lt;br /&gt;
  &amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Standardabfragen mit hochschulspezifischen Details versehen==&lt;br /&gt;
Bei Standardabfragen, bei denen nur Kleinigkeiten hochschulspezifisch angepasst werden sollen, wird ein Block eingebaut, z.B.&lt;br /&gt;
 &amp;lt;#if K_hs_nr=6850&amp;gt; --HFT Stuttgart&lt;br /&gt;
       update tmp_erg set fest=0 where jahr!=year(today()); --Festlegungen nur bei aktuellem Haushaltsjahr&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
Freemarker greift mit K_hs_nr auf die Hochschulnr. aus der Tabelle hochschulinfo zu, der update wird in diesem Beispiel also nur an der HFT Stuttgart gemacht. &lt;br /&gt;
&lt;br /&gt;
Dies ist erweiterbar, indem ein Repository-Objekt CUSTOM_xxxxxx (Maskennummer)  angelegt wird. Beispiel: FIN-Abfrage zeigt standardmäßig Festlegungen immer an, aber einige Hochschulen wollen Festlegungen nur für aktuelles Haushaltsjahr. Es wird in CUSTOM_xxxxxx eine Variable definiert:&lt;br /&gt;
 &amp;lt;#assign FestlegungenNurAktuellesJahr=true/&amp;gt; &lt;br /&gt;
Im masken-sql der Maske definiert man dann zunächst einen default-wert&lt;br /&gt;
 &amp;lt;#assign FestlegungenNurAktuellesJahr=false/&amp;gt; -- default alle festelegungen&lt;br /&gt;
 &amp;lt;#if CUSTOM_xxxxxx?exists&amp;gt; - falls custom_xxxxxx für die maske exisiert wird es aufgerufen&lt;br /&gt;
       &amp;lt;#assign inlineTemplate=CUSTOM_xxxxxx?interpret&amp;gt;&lt;br /&gt;
       &amp;lt;@inlineTemplate/&amp;gt;&lt;br /&gt;
       -- ausführen der Definition überschreibt default-wert von FestlegungenNurAktuellesJahr   mit &amp;lt;#assign FestlegungenNurAktuellesJahr=true/&amp;gt;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#if   FestlegungenNurAktuellesJahr&amp;gt;&lt;br /&gt;
       update tmp_erg set fest=0 where jahr!=year(today());&lt;br /&gt;
 &amp;lt;/#if&amp;gt; &lt;br /&gt;
&lt;br /&gt;
you#re welcome!&lt;br /&gt;
&lt;br /&gt;
==Spaltenlayout in Ergebnistabellen==&lt;br /&gt;
Wie im [[Masken-Tutorial#Abfragen_in_Maskendefinitionen|Tutorial]] gezeigt, wird das Spaltenlayout (Überschriften, Breite) in der sog. &amp;quot;xil_proplist&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
===Die Attribute in der xil_proplist===&lt;br /&gt;
Zunächst ein Beispiel: der Code für die Maske &amp;quot;Bewerbungsprozess nach Fach/Studiengang&amp;quot; im ZUL-Modul beginnt wie folgt:&lt;br /&gt;
&lt;br /&gt;
 XIL List&lt;br /&gt;
     sizable_columns horizontal_scrolling&lt;br /&gt;
   drop_and_delete movable_columns  &lt;br /&gt;
   white_space_color=COLOR_WHITE &#039;&#039;&#039;fixed_columns=2&#039;&#039;&#039;&lt;br /&gt;
     min_heading_height=55&lt;br /&gt;
 &#039;&#039;&#039;Column&#039;&#039;&#039; CID=0 &#039;&#039;&#039;heading_text=&amp;quot;Ebene&amp;quot;&#039;&#039;&#039; center_heading&lt;br /&gt;
     row_selectable heading_platform readonly&lt;br /&gt;
     &#039;&#039;&#039;width=5&#039;&#039;&#039; text_size=20 &#039;&#039;&#039;explanation=&amp;quot;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie die Ausgabe:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Bewerbungsprozess_Ergebnistabelle_1.png|width=600|caption=Ergebnistabelle Spalte &amp;quot;Ebene&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;Column&amp;quot; beginnt). Am Ende der gesamten Xil_proplist befindet sich die Endemarke &amp;quot;@@@&amp;quot; in einem neuen Absatz.&amp;lt;/br&amp;gt;&lt;br /&gt;
Hier eine Erläuterung der Attribute: &lt;br /&gt;
*&#039;&#039;&#039;fixed_columns&#039;&#039;&#039;: Das Attribut im Kopf steuert wie viele führende Spalten beim Scrollen nach rechts [[Masken-_und_Tabellengestaltung#Fixierte Spalten|fixiert]] bleiben.&lt;br /&gt;
*&#039;&#039;&#039;Column&#039;&#039;&#039;: Definiert eine neue Spalte. Achtung: die Anzahl der &amp;quot;Column&amp;quot;-Anweisungen muss mit der Anzahl der Spalten übereinstimmen, die beim select_stmt geliefert werden. &lt;br /&gt;
*&#039;&#039;&#039;heading_text&#039;&#039;&#039;: Die Spaltenüberschrift in der Ergebnistabelle. Hier sind noch spezielle Layoutanweisungen möglich (s.u.), außerdem können Sie [https://super-ics.de/superx/doku/entwicklerhandbuch/f_Glossare.htm Glossare] nutzen&lt;br /&gt;
*&#039;&#039;&#039;width&#039;&#039;&#039;:  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. &lt;br /&gt;
*&#039;&#039;&#039;explanation&#039;&#039;&#039;: 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.&lt;br /&gt;
&lt;br /&gt;
=== Fixierte Spalten ===&lt;br /&gt;
Bei breiten Tabellen ist es ggf. sinnvoll, die ersten X Spalten zu fixieren, damit sie beim Scrollen nach rechts stehen bleiben. Dies definieren Sie über &lt;br /&gt;
* eine [[Kern_Konfiguration#Konstanten|Konstante]] &amp;quot;fixed_columns_aktiv&amp;quot;, mit der Sie das Fixieren generell einschalten&lt;br /&gt;
* im Kopf der [[Masken-_und_Tabellengestaltung#Die_Attribute_in_der_xil_proplist|Spaltenbeschreibung]] (xil_proplist) mit dem Attribut &amp;quot;fixed_columns&amp;quot;.&lt;br /&gt;
Beispiel:&lt;br /&gt;
 &lt;br /&gt;
 XIL List&lt;br /&gt;
   sizable_columns horizontal_scrolling&lt;br /&gt;
 drop_and_delete movable_columns  &lt;br /&gt;
 white_space_color=COLOR_WHITE &#039;&#039;&#039;fixed_columns=3&#039;&#039;&#039;&lt;br /&gt;
   min_heading_height=40&lt;br /&gt;
 &lt;br /&gt;
Bei einer Ergebnistabelle in schmalem Viewport sieht die Originaltabelle so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bia_kern_fixed_columns2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Bei einer Ergebnistabelle in schmalem Viewport und Scrollen nach rechts sieht es das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bia_kern_fixed_columns3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Mehrzeilige Spaltenüberschriften ===&lt;br /&gt;
&lt;br /&gt;
Im Attribut &amp;quot;heading_text&amp;quot; können auch mehrzeilige Spaltenüberschriften definiert werden. Fügen Sie den Zeilenumbruch aber nicht direkt ein, sondern codieren Sie diesen als &amp;quot;\n&amp;quot;. Bei der Ausgabe wird dies als Umbruch umgesetzt.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Der Code&lt;br /&gt;
&lt;br /&gt;
 Column CID=0 heading_text=&amp;quot;Art&#039;&#039;&#039;\n&#039;&#039;&#039;d.Ebene&amp;quot; center_heading&lt;br /&gt;
   row_selectable heading_platform readonly&lt;br /&gt;
   width=10 text_size=20 explanation=&amp;quot;@@@sos_ebene@@@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sieht in der Ausgabe so aus:&lt;br /&gt;
&lt;br /&gt;
[[Image:bsp_xil_proplist_2.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Verknüpfte Spaltenüberschriften===&lt;br /&gt;
Um Spaltenüberschriften zu verknüpfen, muss man wie folgt vorgehen:&amp;lt;/br&amp;gt;&lt;br /&gt;
Alle Zellen, die verknüpft werden sollen, müssen den gleichen Namen haben, und mit dem Steuerzeichen &amp;quot; \000 &amp;quot; sowie einem Zeilenumbruch &amp;quot; \n &amp;quot; enden.&amp;lt;/br&amp;gt;&lt;br /&gt;
Beispiel: Der Code&lt;br /&gt;
&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Bewerbungen &#039;&#039;&#039;\000\n&#039;&#039;&#039; gesamt&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10 explanation=&amp;quot;Bewerberanzahl &amp;quot;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Bewerbungen &#039;&#039;&#039;\000\n&#039;&#039;&#039; weiblich&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10 explanation=&amp;quot;&amp;quot;&lt;br /&gt;
 Column CID=5 heading_text=&amp;quot;Bewerbungen &#039;&#039;&#039;\000\n&#039;&#039;&#039; weibl. in %&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10 explanation=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sieht in der Ausgabe so aus: &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Bewerbungsprozess_Ergebnistabelle_2.png|width=600|caption=Verknüpfte Spaltenüberschriften}}&lt;br /&gt;
&lt;br /&gt;
===Dynamische Spaltenanzahl===&lt;br /&gt;
Kann mit Freemarker realisiert werden, Einfaches Beispiel:&amp;lt;/br&amp;gt;&lt;br /&gt;
Nur bei FIN_Quellsystem 1 (MBS) Soll Ansatz ausgegeben werden. &lt;br /&gt;
&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;Abschluss-Select im Masken-SQL:&#039;&#039;&lt;br /&gt;
 select name,&amp;lt;#if K_FIN_Quellsystem=1&amp;gt; hhans&amp;lt;/#if&amp;gt;, einnahmen, ausgaben from fin;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;XIL:&#039;&#039;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Name&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;#if K_FIN_Quellsystem=1&amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Ansatz&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Einnahmen&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Einnahmen&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel:&amp;lt;/br&amp;gt;&lt;br /&gt;
Spalte Bewilligung soll nur angezeigt werden, wenn werte größer 0 &lt;br /&gt;
&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;Im Masken-SQL:&#039;&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;sqlvars&amp;gt;&lt;br /&gt;
 &amp;lt;sqlvar bewilligungen&amp;gt;select sum(bewill) from fin where ins=&amp;lt;&amp;amp;lt;Ins&amp;gt;&amp;gt; &amp;lt;/sqlvar&amp;gt;&lt;br /&gt;
 &amp;lt;/sqlvars&amp;gt; &lt;br /&gt;
 ...&lt;br /&gt;
Die im Masken-SQL definierten sqlvars (in diesem Falle bewilligungen) sind auch in der XIL-Proplist zur verfügbar.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Abschluss-Select im Masken-SQL:&#039;&#039;&lt;br /&gt;
 select name,ansatz&amp;lt;#if bewilligungen&amp;amp;gt;0&amp;gt; , bewill, &amp;lt;/#if&amp;gt; , ausgaben,verfuegbar from tmp_erg;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;XIL:&#039;&#039;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Name&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;#if   bewilligungen&amp;amp;gt&amp;gt;0 &amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;bewill&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;Ausgaben&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
 Column CID=4 heading_text=&amp;quot;verfügbar&amp;quot;   center_heading&lt;br /&gt;
     row_selectable col_selectable rightJust heading_platform readonly&lt;br /&gt;
     width=10&lt;br /&gt;
&lt;br /&gt;
===Hochschulspezifische Einstellmöglichkeit===&lt;br /&gt;
Ein Bericht sollte nur so viel Spalten haben wie maximal benötigt werden. In der Standardauslieferung werden alle Spalten gezeigt. Ein Beispiel für ein Standard-Schluss-select:&lt;br /&gt;
 select name, akt_soll,einnahmen,aus,fest,verfuegbar from tmp_erg &lt;br /&gt;
Wenn eine Hochschule nicht alle Spalten oder die Spalten in einer anderen Reihenfolge sehen möchte, wird in x_repository eine Variable CUSTOM_XXXXXX (Maskennummer) angelegt, welche einen customize-Hash und in diesem die Felder, welche angezeigt werden sollen, definiert.  field ist Feldname in der tmp_erg-tabelle, caption Spaltenüberschrift, width für xil-proplist und bei Bedarf kann auch explanation ergänzt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign customize={&amp;quot;resulttable&amp;quot;:[&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Gliederung&amp;quot;,&amp;quot;width&amp;quot;:14},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;akt_soll&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Ansatz&amp;quot;,&amp;quot;width&amp;quot;:15,&amp;quot;explanation&amp;quot;:&amp;quot;Haushaltsansatz inkl.Einnahmen und Reste (Haushalterisch: Aktuelles Soll)&amp;quot;},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;einnahmen&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Einnahmen&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;aus&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Ausgaben&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;fest&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Festgelegt&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;verfuegbar&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;verfügbar&amp;quot;,&amp;quot;width&amp;quot;:12,&amp;quot;explanation&amp;quot;:&amp;quot;@@@fin_verfuegbar@@@&amp;quot;}&lt;br /&gt;
 ]}/&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Dies wäre die gleich Ausgabe wie im Standard.&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Nach Eingabe/Änderung den Manager-Chache leeren}}&lt;br /&gt;
&lt;br /&gt;
Möchte eine Hochschule beispielsweise verfügbar weiter vorne stehen haben und akt_soll gar nicht sehen, wird der Eintrag folgendermaßen geändert:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#assign customize={&amp;quot;resulttable&amp;quot;:[&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Gliederung&amp;quot;,&amp;quot;width&amp;quot;:14},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;verfuegbar&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;verfügbar&amp;quot;,&amp;quot;width&amp;quot;:12,&amp;quot;explanation&amp;quot;:&amp;quot;@@@fin_verfuegbar@@@&amp;quot;},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;einnahmen&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Einnahmen&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;aus&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Ausgaben&amp;quot;,&amp;quot;width&amp;quot;:10},&lt;br /&gt;
 {&amp;quot;field&amp;quot;:&amp;quot;fest&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Festgelegt&amp;quot;,&amp;quot;width&amp;quot;:10}&lt;br /&gt;
 ]}/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Masken-sql gegen Ende baut man ein&lt;br /&gt;
 &amp;lt;#if CUSTOM_xxxxxx?exists&amp;gt;&lt;br /&gt;
       &amp;lt;#assign inlineTemplate=CUSTOM_xxxxxx?interpret&amp;gt;&lt;br /&gt;
       &amp;lt;@inlineTemplate/&amp;gt;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls eine Hochschule ein custom_xxxxxx angelegt hat, wird der Inhalt interpretiert und ein customize-Hash steht zur Verfügung.Das Abschluss-select prüft also&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#if customize?exists&amp;gt; --customize existiert, abschluss select daraus aufbauen&lt;br /&gt;
       select &lt;br /&gt;
             &amp;lt;#foreach f in customize.resulttable&amp;gt;&lt;br /&gt;
                   ${f.field} &amp;lt;#if h_has_next&amp;gt;,&amp;lt;/#if&amp;gt;&lt;br /&gt;
             &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
       from tmp_erg2 ;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;#else&amp;gt; -- kein customize objekt existiert, standard abschluss select&lt;br /&gt;
       select name,akt_soll,einnahmen,ausgaben,fest,verfügbar from tmp_erg;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die XIL-Proplist muss es genauso laufen:&lt;br /&gt;
&lt;br /&gt;
 XIL List&lt;br /&gt;
 --freemarker template&lt;br /&gt;
 &amp;lt;#if CUSTOM_xxxx?exists&amp;gt;&lt;br /&gt;
       &amp;lt;#assign inlineTemplate=CUSTOM_xxxx?interpret&amp;gt;&lt;br /&gt;
       &amp;lt;@inlineTemplate/&amp;gt;&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#if customize?exists&amp;gt;--wenn Hochschul-customizeobjekt exixtiert, dann xil dynamisch aufbauen&lt;br /&gt;
       &amp;lt;#foreach f in customize.resulttable&amp;gt;&lt;br /&gt;
             Column CID=0 heading_text=&amp;quot;${f.caption}&amp;quot;   center_heading explanation=&amp;quot;&amp;lt;#if f.explanation?exists&amp;gt;${f.explanation}&amp;lt;/#if&amp;gt;&amp;quot;&lt;br /&gt;
             row_selectable col_selectable heading_platform readonly width=${f.width}&lt;br /&gt;
       &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
 &amp;lt;#else&amp;gt; --standard xil list&lt;br /&gt;
 Column CID=0 heading_text=&amp;quot;Name explanation=&amp;quot;&amp;quot; center_heading     row_selectable col_selectable heading_platform readonly width=9 text_size=0&lt;br /&gt;
 Column CID=0 heading_text=&amp;quot;aktsoll explanation=&amp;quot;&amp;quot; center_heading     row_selectable col_selectable&lt;br /&gt;
 ..&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
complex, but coool, &amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for the super nerds,&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technik kann man sogar mit eigenen Freemarker-Funktionen verbinden, z.B. dynamsiche Spalten nach customizing und Link-Spalten zur Einzelbuchung nur anzeigen, wenn Rechte für Einzelbuchungen da sind. Aus dem Kontext, XIL:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;#function isWanted field&amp;gt;&lt;br /&gt;
 &amp;lt;#assign result=true&amp;gt;&lt;br /&gt;
 &amp;lt;#if field?starts_with(&#039;linkbuch&#039;)&amp;amp;&amp;amp;Einzelbuchrecht?exists&amp;amp;&amp;amp;Einzelbuchrecht?is_number&amp;amp;&amp;amp;Einzelbuchrecht=0&amp;gt;&amp;lt;#assign result=false/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#if (field=&#039;einnahmen&#039;||field?starts_with(&#039;linkbuchein&#039;)||field=&#039;offsoll_e&#039;||field?starts_with(&#039;linkbuchoffsolle&#039;))&amp;amp;&amp;amp;&amp;quot;&amp;lt;&amp;lt;Einnahmen anzeigen&amp;gt;&amp;gt;&amp;quot;=&amp;quot;&#039;nein&#039;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;#assign result=false/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;#return result&amp;gt;&lt;br /&gt;
 &amp;lt;#if customize?exists&amp;gt;&lt;br /&gt;
 &amp;lt;#foreach f in customize.resulttable&amp;gt;&lt;br /&gt;
 &amp;lt;#if isWanted(f.field)&amp;gt;&lt;br /&gt;
 Column CID=2 heading_text=&amp;quot;${f.caption}&amp;quot;   center_heading explanation=&amp;quot;&amp;lt;#if f.explanation?exists&amp;gt;${f.explanation}&amp;lt;/#if&amp;gt;&amp;quot;&lt;br /&gt;
 row_selectable col_selectable heading_platform readonly width=${f.width}&lt;br /&gt;
 &amp;lt;/#if&amp;gt;&lt;br /&gt;
 &amp;lt;/#foreach&amp;gt;&lt;br /&gt;
 &amp;lt;#else&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
===Dezimalstellen variieren===&lt;br /&gt;
Normalerweise werden Werte mit Dezimalstellen immer zweistellig wiedergegeben. Im Ausnahmefall kann man dies ändern, indem man eine Spalte mit dem Namensschema &amp;quot;hidden&amp;quot;+Spaltenname+&amp;quot;dp&amp;quot; hinter die jeweilige Spalte setzt, und der Inhalt der Spalte enthält die Zahl der Nachkommastellen (0-6 möglich):&lt;br /&gt;
&lt;br /&gt;
 select ... plan_soll ,&lt;br /&gt;
 1::integer as hiddenplan_solldp,...&lt;br /&gt;
&lt;br /&gt;
bewirkt, dass die Spalte plan_soll einstellig dargestellt wird.&lt;br /&gt;
{{Achtung|Dies klappt nicht bei verschachtelten Spaltenlayouts}}&lt;br /&gt;
=== Einzelne Zellen oder Spalten formatieren (CSS) ===&lt;br /&gt;
&lt;br /&gt;
Wenn im Masken-Resultset zum Beispiel eine Spalte &amp;quot;verfuegbar&amp;quot; existiert, kann über eine zusätzliche Spalte nach dem Muster&lt;br /&gt;
 hidden - Spaltenname - css&lt;br /&gt;
Also hier z.B.  eine versteckte Spalte &#039;&#039;&#039;hiddenverfuegbarcss&#039;&#039;&#039; mit dem Inhalt des css-Klassennamens, z.B. neu in kern44 &#039;&#039;td.boldnumber&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Auszug&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create temp table tmp_erg&lt;br /&gt;
(&lt;br /&gt;
titel char(5),titelbez varchar(255),sort smallint,&lt;br /&gt;
hhans decimal (14,2),&lt;br /&gt;
sperre decimal (14,2),&lt;br /&gt;
reste decimal(14,2),&lt;br /&gt;
akts decimal(14,2),&lt;br /&gt;
einnahmen decimal(14,2),&lt;br /&gt;
ausgaben decimal (14,2),&lt;br /&gt;
fest decimal (14,2),&lt;br /&gt;
verfuegbar decimal (14,2),&lt;br /&gt;
hiddenverfuegbarcss varchar(200)&lt;br /&gt;
) &amp;lt;@informixnolog/&amp;gt;;&lt;br /&gt;
…&lt;br /&gt;
&lt;br /&gt;
update tmp_erg set hiddenverfuegbarcss=&#039;boldnumber&#039; where sort=0;&lt;br /&gt;
select titelbez, hhans,sperre ,reste,akts,einnahmen,ausgaben,fest,verfuegbar+fest,verfuegbar,&lt;br /&gt;
hiddenverfuegbarcss from tmp_erg order by sort,titel;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine entsprechende XIL_proplist-Definition der &amp;quot;column&amp;quot; muss es auch geben, hier ist der Name allerdings beliebig, sollte aber eindeutlig sein, d.h. eine Tabelle sollte nicht zwei gleiche Spaltenüberschriften haben.&lt;br /&gt;
&lt;br /&gt;
===Detailansicht verlinken===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Links_in_Ergebnistabelle.png|width=600|caption=Links in Ergebnistabelle}}&lt;br /&gt;
&lt;br /&gt;
Nach Klick auf einen der Links erscheint eine weitere Tabelle, welche statt der Anzahl die einzelnen Matrikelnummern inklusive Studiengang ausgibt:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Detailansicht.png|width=600|caption=Detailansicht}}&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &#039;?tid=30610360&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
&lt;br /&gt;
&#039;||pktxt||&#039; wird ersetzt durch den Wert des Feldes pktxt derselben Zeile:&lt;br /&gt;
&lt;br /&gt;
 select &lt;br /&gt;
 	pktxt,&lt;br /&gt;
 	pdtxt,&lt;br /&gt;
 	(case when pstatus=&#039;AN&#039; then 1 else 0 end) as anmeldung,&lt;br /&gt;
 	(case when pversuch=3 then 1 else 0 end) as drittversuch,&lt;br /&gt;
 	&#039;?tid=30610360&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
 into temp tmp_ergebnis&lt;br /&gt;
&lt;br /&gt;
Werden beim Maskenaufruf der Detailansicht weitere Felder benötigt, wird für diese eine Variable angelegt:&lt;br /&gt;
&lt;br /&gt;
 #assign stg=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;#if &amp;quot;&amp;lt;&amp;lt;Studiengang&amp;gt;&amp;gt;&amp;quot;!=&amp;quot;&amp;quot;&amp;gt;&amp;lt;#assign stg=&amp;quot;&amp;amp;Studiengang=&amp;lt;&amp;lt;Studiengang&amp;gt;&amp;gt;&amp;quot;?replace(&amp;quot;&#039;&amp;quot;,&amp;quot;&amp;quot;)?replace(&amp;quot;|&amp;quot;,&amp;quot;,&amp;quot;)/&amp;gt;&amp;lt;/#if&amp;gt; &lt;br /&gt;
&lt;br /&gt;
So ist gewährleistet, dass der Parameter nicht in die URL übernommen wird, falls das Maskenfeld leer ist. Zudem werden einfache Hochkommata &#039; und Pipes | ersetzt, um zugewährleisten, dass die URL funktioniert. Einfache Hochkommata &#039; 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:&lt;br /&gt;
&lt;br /&gt;
 &#039;?tid=30610360&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;${stg}&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
&lt;br /&gt;
Sonderfall: Falls eine Maske in einem Link auf sich selbst verweist wird empfohlen statt der Maskennummer die automatisch gefüllte Freemarker-Variable ${Maskennummer} zu benutzen:&lt;br /&gt;
&lt;br /&gt;
 &#039;?tid=${Maskennummer}&amp;amp;Prüfungskurztext=&#039;||pktxt||&#039;${stg}&amp;amp;&amp;amp;cachingcontrol=clearmask&#039; as hidden_drittversuch&lt;br /&gt;
&lt;br /&gt;
Hintergrund: Falls man eine Kopie des entsprechenden Berichtes angelegt hat, um diesen mit eingeschränkten Funktionen (bspw. für User mit eingeschränkten Rechten) bereitzustellen, bietet sich die [https://wiki.his.de/mediawiki/index.php/SXimport_zur_Maskengestaltung_verwerden-HISinOne-BI sximport-Funktion] an. Würde dann statt ${Maskennummer} die tid verwandt, so würde der Link in der Berichtskopie auf den Hauptbericht verweisen, was für User mit eingeschränkten Rechten nicht erwünscht ist.&lt;br /&gt;
&lt;br /&gt;
===Datenbalken===&lt;br /&gt;
====Datenbalken in Standardberichten allgemein====&lt;br /&gt;
Es gibt die Möglichkeit, in der Ergebnistabelle horizontale Balken (In Excel nennt man dies &amp;quot;Datenbalken&amp;quot;) anzeigen zu lassen. Dies kann z.B. dazu genutzt werden,  ein Balkendiagramm darzustellen. &lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel: Maske Administration -&amp;gt; Benutzer -&amp;gt; Gruppe suchen -&amp;gt; dort im Ergebnis die Spalte &amp;quot;Anteil Benutzer an Gesamtzahl (in %) &amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_1.png|width=500px|caption=Datenbalken Beispiel}}&lt;br /&gt;
&lt;br /&gt;
Voreingestellt ist auch, dass beim MouseOver ein Tooltip mit der Zahl angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit, die Datenbalken zu variiieren:&lt;br /&gt;
* Balken links- oder rechtsbündig&lt;br /&gt;
* Die Breite der Balken wird in Pixel angegeben, Sie können die Breite aber anpassen&lt;br /&gt;
** Der jew. Balken kann relativ zu einem Gesamtwert dargestellt werden&lt;br /&gt;
** Der gesamte Balken kann in der Breite angepaßt werden&lt;br /&gt;
* Auch Balken mit Serien sind möglich&lt;br /&gt;
=====Datenbalken linksbündig=====&lt;br /&gt;
Der Default des Datenbalkens ist linksbündig, wenn sie also &amp;quot;_graph&amp;quot; als Spaltenüberschrift nehmen, wird der Balken linksbündig gezeichnet. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_2.png|width=500px|caption=Datenbalken linksbündig}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Datenbalken rechtsbündig=====&lt;br /&gt;
Wenn sie &amp;quot;_graphbarright&amp;quot; als Spaltenüberschrift nehmen, wird der Balken rechtsbündig gezeichnet. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_3.png|width=500px|caption=Datenbalken rechtsbündig}}&lt;br /&gt;
&lt;br /&gt;
=====Datenbalken Breite=====&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_4_breite.png|width=500px|caption=Datenbalken breiter}}&lt;br /&gt;
&lt;br /&gt;
Wenn der Wert für den  Datenbalken kein Prozentwert ist (also nicht die Skala 1-100 hat), können Sie den Gesamtwert mit &amp;quot;|&amp;quot; dahinter setzen. Dadurch wird die Breite anteilig berechnet. Beispiel:&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
 select ..., &#039;44|50&#039; as _graph2 ...&lt;br /&gt;
Damit wird der Datenbalken mit der Hälfte der Gesamtbreite angezeigt.&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_5_relativ.png|width=500px|caption=Datenbalken relativ}}&lt;br /&gt;
&lt;br /&gt;
=====Datenbalken mit Beschriftung=====&lt;br /&gt;
Sie können den Datenbalken auch mit einer Beschriftung versehen, indem Sie als Spaltenname &amp;quot;_graphbarwithlabel&amp;quot; nutzen:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken_6_label.png|width=500px|caption=Datenbalken mit Beschriftung}}&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Je nach Länge der Zahl und Breite des Balkens kann es zu unschönen Darstellungen kommen.}}&lt;br /&gt;
=====Datenbalken mit Serien=====&lt;br /&gt;
Wenn Sie den Spaltennamen beginnend mit &amp;quot;_graphbarxseries&amp;quot; liefern werden Datenbalken mit Serien ausgegeben. Dazu wird als Wert eine Liste mit Komma-getrennten Ganzzahlen erwartet, normiert auf die Breite der Spalte in der &#039;&#039;&#039;_xil_proplist&#039;&#039;&#039;. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=datenbalken 7 xseries.png|width=500px|caption=Datenbalken mit Serien}}&lt;br /&gt;
&lt;br /&gt;
Die Farben der Serie können Sie im Template &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template name=&amp;quot;myBarColorFg&amp;quot; &amp;gt;...&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in der Datei /superx/xml/pageComponents_html_final.xsl überlagern. Die Auslieferung befindet sich in der Datei /superx/xml/graphtools.xsl.&lt;br /&gt;
&lt;br /&gt;
====Datenbalken in xCube====&lt;br /&gt;
Da in xCube die Masken nicht änderbar sind, können Sie die Funktion über die Maske bzw. das Maskenfeld &amp;quot;Spaltenvisualisierung&amp;quot; direkt nutzen.&lt;br /&gt;
* Siehe in [[Modul_xCube_Nutzungshandbuch#Spaltenvisualisierung_als_Ansichtsoption|xCube]]&lt;br /&gt;
&lt;br /&gt;
=Exporte anpassen=&lt;br /&gt;
== Exportformate ==&lt;br /&gt;
Im XML-Frontend können Abfragen direkt nach html (Druckversion), XML, PDF oder XLS (-&amp;gt;Excel) exportiert werden. Die zugehörigen Stylesheets lauten:&lt;br /&gt;
* &#039;&#039;&#039;html (Druckversion)&#039;&#039;&#039;&lt;br /&gt;
** &amp;lt;code&amp;gt; $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_html_p.xls  &amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;PDF &#039;&#039;&#039; &lt;br /&gt;
** &amp;lt;code&amp;gt; $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_fo_pdf.xsl   &amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;XLS &#039;&#039;&#039; &lt;br /&gt;
** &amp;lt;code&amp;gt; $SUPERX_DIR/webserver/tomcat/webapps/superx/xml/tabelle_xls.xsl &amp;lt;/code&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Der PDF-Export funktioniert zwar technisch, aber leider sehen die Ergebnisse oft nicht &amp;quot;schön&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Der XLS-Export wurde mit MS Excel &amp;lt;!--(95-2003)--&amp;gt; und OpenOffice&amp;lt;!-- (1.1.3-2.x)--&amp;gt; getestet. Da die Produkte automatisch auf Seitenbreite skalieren können, sieht der Export hier deutlich besser aus.&lt;br /&gt;
&lt;br /&gt;
Außerdem können grundlegende Layoutelemente wie Kopf- und Fußzeilen und Seitenzahlen individuell angepasst werden, ohne zwingend XSLT-Kenntnisse zu haben.&lt;br /&gt;
&lt;br /&gt;
== PDF-Export ==&lt;br /&gt;
&lt;br /&gt;
Kurz ein paar Hinweise:&lt;br /&gt;
&lt;br /&gt;
Am besten nimmt man zur Bearbeitung eine bestehende PDF-Vorlage.&lt;br /&gt;
&lt;br /&gt;
Tabellen:&lt;br /&gt;
&lt;br /&gt;
Für jede Spalte muss direkt unter fo:table fin table-column ein Knoten mit der Breite kommen (im mm)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fo:table&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-column column-width=”30mm”&amp;gt;&lt;br /&gt;
&amp;lt;fo:block font-size=”10pt” text-align=”start/end” font-weight=”bold” font-family=”serif” line-height=”9pt”&lt;br /&gt;
space-before.optimum=”6pt” space-after.optimum=”6pt” language=”en” hyphente=”true”&amp;gt;&lt;br /&gt;
&amp;lt;xsl:value-if select=”format-number(/ergebnisse…,’#.###.##0,00,’German’)”/&amp;gt;&lt;br /&gt;
German groß ist wichtig!!!&lt;br /&gt;
&amp;lt;/fo:block&amp;gt;&lt;br /&gt;
&amp;lt;/fo:table-column&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-header&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-row&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-cell border-width=”0.1mm” border-style=”solid” padding-left=”0.5mm” padding-right=”0.5mm”&amp;gt;..&lt;br /&gt;
&amp;lt;fo:table-body&amp;gt;&lt;br /&gt;
&amp;lt;fo:table-row&amp;gt;&amp;lt;fo:table-cell&amp;gt;..&lt;br /&gt;
&lt;br /&gt;
&amp;lt;fo:block text-align=”center” font-size=”9pt” font-weight=”bold” hyphenate=”false”&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Blöcke zusammenhalten&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fo:block keep-together.within-page=”always”&amp;gt;&lt;br /&gt;
Block1&lt;br /&gt;
Block2&lt;br /&gt;
&amp;lt;/fo:block&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Um lokal zu testen gibt es die Java-Klasse de.superx.bin.ExcelPdfCreator&lt;br /&gt;
Params&lt;br /&gt;
&lt;br /&gt;
 -in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_fo_pdf_xxxx.xsl -out/home/superx/test.pdf&lt;br /&gt;
&lt;br /&gt;
(Dateiendung legt fest, dass ein PDF erzeugt werden soll).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Schriftgröße des PDF-Exportes anpassen==&lt;br /&gt;
Bei Bedarf kann man die Schriftgröße des PDF-Exportes anpassen. Dazu einfach beim letzten Select des &amp;quot;select_stmts&amp;quot; der Maske noch angeben&lt;br /&gt;
&lt;br /&gt;
 select ...... , &#039;&#039;&#039;6::smallint as hidden_pdf_fontsize&#039;&#039;&#039; from tmp_erg order by ...;&lt;br /&gt;
&lt;br /&gt;
und in der XIL-Proplist als Spalte &amp;quot;hidden_pdf_fontsize&amp;quot; hinterlegen. &lt;br /&gt;
&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
Oder falls die Spalten über eine CUSTOM_ Variable im Repository definiert werden, kann man einfach ergänzen:&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;#assign CUSTOM_1234={&amp;quot;resulttable&amp;quot;:[&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_invnr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Inventarnr&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_sernr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Seriennummer&amp;quot;,&amp;quot;width&amp;quot;:9},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_gerbez&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Bezeichnung&amp;quot;,&amp;quot;width&amp;quot;:14},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;lieferant&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Lieferant&amp;quot;,&amp;quot;width&amp;quot;:10},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_hh_j&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Jahr&amp;quot;,&amp;quot;width&amp;quot;:6},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_betrdat&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Inbetriebname&amp;quot;,&amp;quot;width&amp;quot;:9},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_nutzd&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Nutzungs-\ndauer&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_auftnr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Auftrags-\nnummer&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_preis&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Preis&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_inst&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Kosten-\nstelle&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;splitktr&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Kosten-\nträger&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_nutzer&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Nutzer&amp;quot;,&amp;quot;width&amp;quot;:7},&amp;lt;/br&amp;gt;&lt;br /&gt;
{&amp;quot;field&amp;quot;:&amp;quot;ivst_raum&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;Raum&amp;quot;,&amp;quot;width&amp;quot;:8},&amp;lt;/br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{&amp;quot;field&amp;quot;:&amp;quot;8::smallint as hidden_pdf_fontsize&amp;quot;,&amp;quot;caption&amp;quot;:&amp;quot;hidden_pdf_fontsize&amp;quot;,&amp;quot;width&amp;quot;:1}&#039;&#039;&#039;&amp;lt;/br&amp;gt;&lt;br /&gt;
]}/&amp;gt;&lt;br /&gt;
== Excelexport ==&lt;br /&gt;
{{Hinweis|Es wird nicht vorausgesetzt, dass Sie Microsoft Excel nutzen. Es wird zwar das Excel-Format erzeugt (*.xslx), aber in der Regel sind diese Dateien auch für andere Softwareprodukte, z.B. LibreOffice, nutzbar. }}&lt;br /&gt;
===Performance-optimiertes Excel===&lt;br /&gt;
Man kann einen Performance-optimierten Excelexport anstoßen, indem man im Berichtskopf den Kommentar &amp;quot;--ram excelexport&amp;quot; setzt.&lt;br /&gt;
Dies ist z.B. bei Datenblattberichten standardmäßig der Fall.&lt;br /&gt;
&lt;br /&gt;
===Excel-Vorlagen===&lt;br /&gt;
{{Achtung|Diese Funktionalität wird derzeit überarbeitet, weil sie nur mit dem alten Excel Format (*.xls) funktioniert. }}&lt;br /&gt;
Am besten nimmt man zur Bearbeitung eine bestehende xsl-Vorlage.&lt;br /&gt;
&lt;br /&gt;
Man kann eine bestehende Excel-Datei als Vorlage nehmen (attribut Vorlage des xls_workbook Knotens).&lt;br /&gt;
&lt;br /&gt;
Dies ist praktisch, um nicht direkt erzeugbare Einstellungen zu hinterlegen, z. B.&lt;br /&gt;
* Skalierung auf 70%&lt;br /&gt;
* wiederholende Tabellenüberschrift (Seite einrichten/Tabelle)&lt;br /&gt;
* Extras/Schutz/Blattschutz (Poi kann man trotzdem reinschreiben!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xls_workbook vorlage=&amp;quot;vorlage1.xls&amp;quot; removeAdditionalSheets=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man Tabellen auf Vorrat angelegt hat, kann man mit dem Tag removeAdditionalSheets=true überflüssige Tabellen entfernen.&lt;br /&gt;
&lt;br /&gt;
Es werden alle Zellen neu erzeugt, man kann jedoch einzelne Zeilen oder Zellen überspringen, um in der Excel-Vorlage enthaltenes nicht zu überschreiben:&lt;br /&gt;
 &amp;lt;xls_row jumpover=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xls_cell jumpover=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/xls_cell&amp;gt;&lt;br /&gt;
Tabellenblatt&lt;br /&gt;
 &amp;lt;xsl_sheet&amp;gt;&lt;br /&gt;
Zelle kann Attribute haben ebene=summe&lt;br /&gt;
&amp;lt;xsl_row&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Zellen&lt;br /&gt;
Für Zahlen &lt;br /&gt;
 &amp;lt;xls_cell style=&amp;quot;body_dec&amp;quot; numeric=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mögliche Attribute: width (gilt logischerweise für ganze Spalte)&lt;br /&gt;
&lt;br /&gt;
Um lokal zu testen gibt es Java-Klasse de.superx.bin.ExcelPdfCreator&lt;br /&gt;
Params&lt;br /&gt;
&lt;br /&gt;
 -in/home/superx/iaf-ausgaben.xml -xsl/home/superx/tabelle_xls_xxxxxx.xsl -out/home/superx/test.xls&lt;br /&gt;
&lt;br /&gt;
(Dateiendung legt fest, dass eine Excel-Datei erzeugt werden soll)&lt;br /&gt;
&lt;br /&gt;
==Export als Mediawiki-Quellcode==&lt;br /&gt;
Wenn sie die Software Mediawiki nutzen, können Sie Tabellenexporte auch direkt als Quellcode exportieren:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_wiki1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Der Quellcode wird im Browser in einem neuen Fenster ausgegeben:&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_wiki2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:tabelle_html_wiki3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=Masken- und Tabellenlayouts mit XSLT=&lt;br /&gt;
==Stylesheets verwalten==&lt;br /&gt;
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 &lt;br /&gt;
 $WEBAPP/xml/maske_html.xsl &lt;br /&gt;
verwenden. Für Ergebnistabellen können Sie das Muster-Stylesheet &lt;br /&gt;
 $WEBAPP/xml/tabelle_html.xsl &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
[[Bild:sx_stylesheets_access.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Das Beispiel zeigt einige Stylesheets, das erste ist bereits Teil des Kernmoduls, das fünfte befindet sich im COB-Modul. Zu den Feldern:&lt;br /&gt;
* &#039;&#039;filename&#039;&#039; kennzeichnet den Dateinamen relativ zum Verzeichnis $SUPERX_DIR/webserver/tomcat/webapps/superx/xml.&lt;br /&gt;
* &#039;&#039;caption&#039;&#039; dient als Kurzüberschrift, die im Ergebnisblatt als Button angezeigt wird.&lt;br /&gt;
* &#039;&#039;description&#039;&#039; stellt einen Erläuterungstext für den Button dar.&lt;br /&gt;
* &#039;&#039;relation&#039;&#039; bezieht sich auf die Beziehung des Stylesheets; mögliche Werte sind &amp;quot;mask&amp;quot; für eine Maske und &amp;quot;table&amp;quot; für Tabelle. &lt;br /&gt;
* &#039;&#039; useragent&#039;&#039; bietet die Möglichkeit, ein Stylesheet für spezielle Lesegeräte anzubieten, z.B. WAP-Hanys oder Braille-Zeilen. &lt;br /&gt;
* &#039;&#039;contenttype&#039;&#039; 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).&lt;br /&gt;
* &#039;&#039;is_generic&#039;&#039;. Generisches Stylesheet für alle Ergebnistabellen (1=ja)&lt;br /&gt;
* &#039;&#039;usage_resultset_data&#039;&#039;. 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.&lt;br /&gt;
* &#039;&#039;stylesheet_type&#039;&#039;. 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)&lt;br /&gt;
* &#039;&#039;jr_datasource&#039;&#039;. 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.&lt;br /&gt;
Im Browser können Sie die Daten mit dieser Maske bearbeiten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:stylesheets_suchen_bearbeiten.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Zuordnung eines Stylesheets zu einer Maske==&lt;br /&gt;
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. &amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=Stylesheet_Zuordnung_2.png|width=400|caption=MaskenfeldSemester}}&lt;br /&gt;
&lt;br /&gt;
Das Feld Sortiernummer (ord) kennzeichnet die Reihenfolge der anzubietenden Stylesheets. Wir sehen hier, dass zuerst das generische Standard-Stylesheet angezeigt wird und dann ein [https://superxhosting.de/superx/edit/kb/kb_media_ansehen.jsp?id=12 JasperReport als weiteres Stylesheet].&lt;br /&gt;
{{ImagePara |imgsrc=Stylesheet_Zuordnung.png|width=400|caption=MaskenfeldSemester}}&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
== Einzelne Templates anpassen ==&lt;br /&gt;
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 &#039;&#039;&#039;maske_html/pdf/xls.xsl bzw tabelle_html/pdf/xls.xsl&#039;&#039;&#039; machte und darin Änderungen vornahm.&lt;br /&gt;
&lt;br /&gt;
Da inzwischen immer wieder Erweiterungen an den Standardstylesheets vorgenommen werden, kommen diese Erweiterungen dann jedoch nicht in die kopierten Spezialstylesheets.&lt;br /&gt;
&lt;br /&gt;
Daher sind die Stylesheets inzwischen etwas „objektorientierter&amp;quot; und kleine Änderungen kann man auch in der Datei&lt;br /&gt;
 .../webapps/superx/xml/page_components_final.xsl &lt;br /&gt;
vornehmen.&lt;br /&gt;
&lt;br /&gt;
Beispiel aus der Praxis, bei 2-3 Masken sollte unter dem Maskennamen noch ein Link zu PDF-Dateien erscheinen.&lt;br /&gt;
&lt;br /&gt;
In der Standard maske_html.xsl ist nach dem Titel ein template-Aufruf definiert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;maskentitel&amp;quot;&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;maske/@name&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;xsl:call-template name=&amp;quot;pccustomize&amp;quot;&amp;gt; &amp;lt;xsl:with-param name=&amp;quot;position&amp;quot; select=&amp;quot;&#039;mask_post_title&#039;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:with-param&amp;gt; &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Template ist als leer in Page-Components.xsl definiert. Man kann es in &amp;lt;code&amp;gt;pageComponents_final.xsl&amp;lt;/code&amp;gt; definieren, dann wird es überschrieben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template name=&amp;quot;pccustomize&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;position&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:if test=&amp;quot;$position=&#039;mask_post_title&#039;&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;!-- hier kommt der individuelle Inhalt rein --&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Links werden nur bei den entsprechenden Masken eingebaut.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Beispiel für das Entfernen des PDF-Export-Buttons für die Masken mit der tid 16000 und 17000:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:template name=&amp;quot;exportButtons&amp;quot; &amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;xsl:if test=&amp;quot;/ergebnisse/ergebnis/maskenname/@id!=&#039;16000&#039; and /ergebnisse/ergebnis/maskenname/@id!=&#039;17000&#039;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;!-- hier kommt der PDF-Button --&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;xsl_functions.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;resultset_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;interLinks_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;pageComponents_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;tabelle_html.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;xsl:import href=&amp;quot;pageComponents_html_final.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
als weiteres braucht man nur das Template von tabelle_html.xsl zu überlagern, was geändert werden soll.&lt;br /&gt;
&lt;br /&gt;
Einfachstes Beispiel - keine Erläuterungslinks anzeigen:&lt;br /&gt;
&lt;br /&gt;
Template explanation wird überlagert&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:template name=&amp;quot;explanation&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Bei Bedarf kann man auch die standardmäßig leeren Funktionen wie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:call-template name=&amp;quot;tablecustomize&amp;quot;&amp;gt;&amp;lt;xsl:with-param name=&amp;quot;position&amp;quot;&lt;br /&gt;
select=&amp;quot;&#039;table_post_center&#039;&amp;quot;&amp;gt;&amp;lt;/xsl:with-param&amp;gt;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
überlagern.&lt;br /&gt;
&lt;br /&gt;
Am Ende folgt dann, um die Tabelle aufzubauen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:call-template name=&amp;quot;table&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Besonderes XML zu ALLEN Masken hinzufügen ==&lt;br /&gt;
&lt;br /&gt;
Für das Management-Modul gibt es eine ganz besondere Erweiterung.&lt;br /&gt;
&lt;br /&gt;
Anwendungsfall: ein Navigationsmenü soll in allen Masken bereitgestellt werden, es soll aber auch möglich sein, ganz normale SuperX-Masken einzubinden.&lt;br /&gt;
&lt;br /&gt;
also Aufruf z.B.&lt;br /&gt;
  http://localhost:8080/superx/servlet/SuperXmlTabelle?tid=xxy&amp;amp;param=1&amp;amp;stylesheet=tabelle_html_man.xsl&lt;br /&gt;
&lt;br /&gt;
Legen Sie dazu in Repository ein Feld ID=CUSTOMXMLADD an. Da kann fester XML drin stehen, der wird zu allen Tabellen-xmls hinzugefügt.&lt;br /&gt;
&lt;br /&gt;
zB..&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;navigation&amp;gt;&lt;br /&gt;
&amp;lt;item1 .../&amp;gt;&lt;br /&gt;
&amp;lt;item2 ../&amp;gt;&lt;br /&gt;
&amp;lt;/navigation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der wird dann in Tabellen XML unter ergebnisse/ergebniselement hinzufügt und kann ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
z.B:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Navigation&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:for-each select=&amp;quot;/ergebnisse/ergebnis/ergebniselement/navigation/item&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;ebene0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;ebene1&amp;quot; target=&amp;quot;_self&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:attribute name=&amp;quot;href&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:value-of select=&amp;quot;concat(HtmlUtils:encodeURL(&#039;SuperXmlTabelle&#039;,/ergebnisse/@jsessionid ),&#039;?tid=&#039;,href)&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;![CDATA[]]&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;caption&amp;quot; /&amp;gt;&amp;lt;![CDATA[]]&amp;gt;&lt;br /&gt;
              &amp;lt;/a&amp;gt;&lt;br /&gt;
              &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der hinzuzufügende XML wird dynamisch mit Freemarker generiert, z.B.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xupdate&amp;gt;&lt;br /&gt;
 &amp;lt;text table=&amp;quot;sx_repository&amp;quot; field=&amp;quot;content&amp;quot; where=&amp;quot;id=&#039;CUSTOMXMLADD&#039;&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;![CDATA[&amp;lt;#include &amp;quot;MAN_MAKROS&amp;quot;/&amp;gt;&amp;lt;sqlvars&amp;gt; &amp;lt;sqlvar name=&amp;quot;entries&amp;quot; type=&amp;quot;hash&amp;quot;&amp;gt;&lt;br /&gt;
select R.catalogue_id,K.shortname,sqlchunk,calcratio,decimalplaces,linksub,linktimeline&lt;br /&gt;
from man_catalogue K,man_catalogue_rpt R&lt;br /&gt;
where&lt;br /&gt;
K.id=R.catalogue_id and R.active=1 order by R.sortnr, R.sortnr2 &amp;lt;/sqlvar&amp;gt; &amp;lt;/sqlvars&amp;gt; &lt;br /&gt;
&amp;lt;#if !Semester?exists&amp;gt;&amp;lt;#assign Semester=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !Bezugssemester?exists&amp;gt;&amp;lt;#assign Bezugssemester=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !Jahr?exists&amp;gt;&amp;lt;#assign Jahr=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !faecherkeys?exists&amp;gt;&amp;lt;#assign faecherkeys=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;&lt;br /&gt;
&amp;lt;#if !Fächer?exists&amp;gt;&amp;lt;#assign Fächer={&amp;quot;selectedKey&amp;quot;:&amp;quot;&amp;quot;}&amp;gt;&amp;lt;/#if&amp;gt; &lt;br /&gt;
&amp;lt;#if !Kostenstelle?exists&amp;gt;&amp;lt;#assign Kostenstelle={&amp;quot;selectedKey&amp;quot;:&amp;quot;&amp;quot;}&amp;gt;&amp;lt;/#if&amp;gt; &lt;br /&gt;
&amp;lt;#if !(.vars[&amp;quot;Datum (Personal)&amp;quot;]?exists)&amp;gt;&amp;lt;#assign &amp;quot;Datum (Personal)&amp;quot;=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/#if&amp;gt;   &lt;br /&gt;
&amp;lt;#if !(.vars[&amp;quot;Beschäftigungsstelle (Person)&amp;quot;]?exists)&amp;gt;&amp;lt;#assign &amp;quot;Beschäftigungsstelle (Person)&amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/#if&amp;gt;&amp;lt;navigation&amp;gt;&amp;lt;item&amp;gt;&amp;lt;href&amp;gt;CDATASTART888880190&amp;amp;Jahr=${Jahr}&amp;amp;Semester=${Semester}&amp;amp;Datum%20(Personal)=${.vars[&amp;quot;Datum (Personal)&amp;quot;]}&lt;br /&gt;
CDATAEND&amp;lt;/href&amp;gt;&amp;lt;caption&amp;gt;Start&amp;lt;/caption&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;#if entries?is_sequence&amp;gt;&amp;lt;#foreach e in entries&amp;gt; &amp;lt;#assign linktimeline=e.linktimeline?interpret/&amp;gt;&lt;br /&gt;
 &amp;lt;#assign linkt&amp;gt;&amp;lt;@linktimeline/&amp;gt;&amp;lt;/#assign&amp;gt; &amp;lt;#assign linksub=e.linksub?interpret/&amp;gt;&lt;br /&gt;
 &amp;lt;#assign links&amp;gt;&amp;lt;@linksub/&amp;gt;&amp;lt;/#assign&amp;gt;  &amp;lt;doubleitem id=&amp;quot;${e.id}&amp;quot;&amp;gt; &amp;lt;aktuell&amp;gt;CDATASTART${links?replace(&#039;Fakultäten|&#039;,&#039;&#039;)}CDATAEND&amp;lt;/aktuell&amp;gt;&lt;br /&gt;
 &amp;lt;zeitreihe&amp;gt;CDATASTART${linkt?replace(&#039;Zeitreihe|&#039;,&#039;&#039;)}CDATAEND&amp;lt;/zeitreihe&amp;gt;&lt;br /&gt;
 &amp;lt;caption&amp;gt;CDATASTART${e.shortname}&lt;br /&gt;
CDATAEND&amp;lt;/caption&amp;gt; &amp;lt;/doubleitem&amp;gt; &amp;lt;/#foreach&amp;gt; &amp;lt;/#if&amp;gt;&amp;lt;/navigation&amp;gt;]]&amp;gt;&lt;br /&gt;
  &amp;lt;/text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xupdate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danielq</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Moduldokumentation&amp;diff=16559</id>
		<title>Moduldokumentation</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Moduldokumentation&amp;diff=16559"/>
		<updated>2026-09-03T19:30:44Z</updated>

		<summary type="html">&lt;p&gt;Danielq: /* SuperX.Technologie und Qualitätssicherung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SuperX.Nummernkreise=&lt;br /&gt;
* [[Nummernkreise|Nummernkreise Masken]]&lt;br /&gt;
* [[Nummernkreise Sachgebiete und Komponenten]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Kern=&lt;br /&gt;
* [[Moduldokumentation Kernmodul|Kernmodul]]&lt;br /&gt;
* [[Kern_Installation_Upgrade|Installation / Upgrade]]&lt;br /&gt;
* [[Kernmodul_Tomcat-Einrichtung|Tomcat-Einrichtung]]&lt;br /&gt;
* [[Kernmodul_LDAP-Einrichtung|LDAP-Einrichtung (obsolet?)]]&lt;br /&gt;
* [[Kern_Konfiguration|Konfiguration]]&lt;br /&gt;
* [[Kern_Oberflaeche|Anpassung der Oberfläche]]&lt;br /&gt;
* [[Kernmodul_Komponentenverwaltung|Komponentenverwaltung]]&lt;br /&gt;
* [[Kernmodul_Regelbetrieb|BI Regelbetrieb]]&lt;br /&gt;
* [[Kernmodul_Shellscripte|Shellscripte]]&lt;br /&gt;
* [[Kern_Bestandteile|Bestandteile]]&lt;br /&gt;
* [[Kern_Clientwerkzeuge|Client-Werkzeuge]]&lt;br /&gt;
* [https://wiki.his.de/mediawiki/index.php/Administration_-_HISinOne-BI Administrationsmasken (HISWIKI)]&lt;br /&gt;
* [[Kern_Benutzerverwaltung|Benutzerverwaltung]]&lt;br /&gt;
&lt;br /&gt;
=SuperX-Entwicklung=&lt;br /&gt;
* [[SuperX-Entwicklung|Übersicht]]&lt;br /&gt;
* [[Masken-Tutorial]]&lt;br /&gt;
* [[Erweiterte Maskenprogrammierung: Freemarker Templates]]&lt;br /&gt;
* [[Masken- und Tabellengestaltung]]&lt;br /&gt;
* [[Masken für das XML-Frontend vorbereiten]] (obsolet)&lt;br /&gt;
* [[Masken für externe Datenbanken (operatives Berichtswesen)]]&lt;br /&gt;
* [[Hochschuleigene Laderoutinen]]&lt;br /&gt;
* [[Abfragemakros (einschl. Schleifen u. Grafiken)]]&lt;br /&gt;
* [https://wiki.his.de/mediawiki/index.php/SXimport_zur_Maskengestaltung_verwerden-HISinOne-BI Teile aus anderen Masken oder externen Tabellen importieren]&lt;br /&gt;
* [[Neue Layouts in SuperX 5.1]] (obsolet)&lt;br /&gt;
* [[Neue Layouts in SuperX 5.2]]&lt;br /&gt;
* [[Entwicklerschulung]]&lt;br /&gt;
* HISWIKI&lt;br /&gt;
** [https://wiki.his.de/mediawiki/index.php/Entwicklerdokumentation_HISinOne Leitfäden für Entwickler]&lt;br /&gt;
** [https://wiki.his.de/mediawiki/index.php/Leitf%C3%A4den_f%C3%BCr_Entwickler_der_HISinOne-BI Leitfäden für Entwickler (BI)]&lt;br /&gt;
* [[Maschinenlesbare Schnittstellen für Ergebnistabellen]]&lt;br /&gt;
* [[Kettle-Grundlagen]]&lt;br /&gt;
* [[Kettle Kurs Teil 2]]&lt;br /&gt;
* [[Kettle Automat. Berichtsausführung und Mailversand]]&lt;br /&gt;
* [[LM-Modul validieren (Abgleich mit EXA)]]&lt;br /&gt;
* [[Dashboards erstellen]]&lt;br /&gt;
* [[Entwicklerhandbuch_xcube]]&lt;br /&gt;
* [[Gxstage-Standalone]]&lt;br /&gt;
* [[SuperX REST Schnittstelle]]&lt;br /&gt;
* [[Berichtsdesign mit JasperReports]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Campus-Management=&lt;br /&gt;
&lt;br /&gt;
* [[Moduldokumentation Bewerbung_Zulassung|Bewerbungen, Zulassungen]]&lt;br /&gt;
** [[Leitfaden Bewerberstammdaten]]&lt;br /&gt;
** [[Auswertungsuebersicht_Bereich_Bewerbung_Zulassung | Auswertungsübersicht]]&lt;br /&gt;
** [[Anwendungshandbuch Bewerbung, Zulassung]]&lt;br /&gt;
** [[Konfigurationshandbuch Bewerbung, Zulassung]]&lt;br /&gt;
* [[Moduldokumentation Studierende_Pruefungen|Studierende, Prüfungen]]&lt;br /&gt;
** [[Auswertungsuebersicht_Bereich_Studierende_Pruefungen | Auswertungsübersicht]]&lt;br /&gt;
** [[Anwendungshandbuch Studierende]]&lt;br /&gt;
** [[Anwendungshandbuch Pruefungen|Anwendungshandbuch Prüfungen]]&lt;br /&gt;
** [[Konfigurationshandbuch Studierenden-Komponente|Konfigurationshandbuch Studierende]]&lt;br /&gt;
** [[Konfiguration Studierende, Pruefungen|Konfiguration Studierende, Prüfungen]]&lt;br /&gt;
** [[Konfiguration Studierende_Pruefungen_Stichtage|Konfiguration Studierende, Prüfungen Stichtage]]&lt;br /&gt;
* [[Moduldokumentation Studienerfolg|Studienerfolg]]&lt;br /&gt;
** [[Studienerfolg_Akkreditierungsberichte|Akkreditierungsberichte]]&lt;br /&gt;
** [[Studienerfolg Bachelor-Master Übergang|Bachelor-Master Übergang]]&lt;br /&gt;
** [[Anwendungshandbuch_Studienverlauf|Anwendungshandbuch Studienverlauf]]&lt;br /&gt;
** [[Konfigurationshandbuch_Studienverlauf|Konfigurationshandbuch Studienverlauf]]&lt;br /&gt;
* [[Moduldokumentation Leistungsmonitoring|Leistungsmonitoring]]&lt;br /&gt;
** [[Konfigurationshanbuch Leistungsmonitoring|Konfigurationshandbuch]]&lt;br /&gt;
** [[Nutzungshandbuch Leistungsmonitoring|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Studiengaenge|Studiengänge]]&lt;br /&gt;
** [[Konfigurationshandbuch Studiengaenge|Konfigurationshandbuch]]&lt;br /&gt;
** [[Anwendungshandbuch_Studiengaenge|Anwendungshandbuch Studiengänge]]&lt;br /&gt;
* [[Moduldokumentation COSTAGE| COStage (TU Graz CampusOnline)]]&lt;br /&gt;
** [[Modul_COSTAGE_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_COSTAGE_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
** [[COSTAGE_in_Deutschland|COStage in Deutschland]]&lt;br /&gt;
* [[Moduldokumentation Mehrfachstudiengaenge| Mehrfachstudiengänge]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Ressourcen-Management=&lt;br /&gt;
* [[Moduldokumentation Personal, Stellen|Personal, Stellen]]&lt;br /&gt;
** [[Konfigurationshandbuch Personal und Stellen|Konfigurationshandbuch]]&lt;br /&gt;
&amp;lt;!--** [[Nutzungshandbuch Personal und Stellen|Nutzungshandbuch]]--&amp;gt;&lt;br /&gt;
** Benutzungshandbücher&lt;br /&gt;
*** Personal im [http://www.superx-projekt.de/doku/sva_modul/benutzer/pers/main.htm html]/[http://www.superx-projekt.de/doku/sva_modul/benutzer/pers/main.pdf pdf]-Format.&lt;br /&gt;
*** Stellen im [http://www.superx-projekt.de/doku/sva_modul/benutzer/stell/main.htm html]/[http://www.superx-projekt.de/doku/sva_modul/benutzer/stell/main.pdf pdf]-Format.&lt;br /&gt;
*** Besetzung im [http://www.superx-projekt.de/doku/sva_modul/benutzer/bes/main.htm html]/[http://www.superx-projekt.de/doku/sva_modul/benutzer/bes/main.pdf pdf]-Format.&lt;br /&gt;
* [[Moduldokumentation Finanzrechnung|Finanzen]]&lt;br /&gt;
* [[Moduldokumentation Kostenrechnung|Kostenrechnung]]&lt;br /&gt;
* [[Moduldokumentation Inventar|Inventar]]&lt;br /&gt;
* [[Moduldokumentation Bau|Flächen, Räume]]&lt;br /&gt;
* [[Moduldokumentation GXStage|GXStage]]&lt;br /&gt;
** [[Modul_GXStage_Konfigurationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_GXStage_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
** [[Modul_GXStage_Nutzungshandbuch_KI|Nutzungshandbuch von KI]]&lt;br /&gt;
* [[Moduldokumentation HRStage|HRStage]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Campus-Ressourcen-Übergreifend=&lt;br /&gt;
* [[Moduldokumentation Managementkennzahlen|Managementkennzahlen (MAN)]]&lt;br /&gt;
**[[Modul_Managementkennzahlen_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
**[[Modul_Managementkennzahlen_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Grunddaten und Kennzahlen|Landeskennzahlen (KENN/KENNX)]]&lt;br /&gt;
** [[Modul_KENN_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[SuperX-Connect|SuperX-Connect (SXC)]]&lt;br /&gt;
** [[Modul_SuperXConnect_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_SuperXConnect_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Wissensbasis|Wissensbasis (KB)]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Technologie und Qualitätssicherung=&lt;br /&gt;
* [[Heartbeat|Moduldokumentation Heartbeat]]&lt;br /&gt;
* [[Moduldokumentation Laderoutinen| Moduldokumentation Laderoutinen (ETL)]]&lt;br /&gt;
**[[Modul_ETL_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
**[[Modul_ETL_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Qualitätssicherung |Moduldokumentation Qualitätssicherung (QA)]]&lt;br /&gt;
** [[Modul_Qualitätssicherung Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Qualitätssicherung Benutzerhandbuch|Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_Visualisierung|Moduldokumentation Visualisierung (VIZ)]]&lt;br /&gt;
** [[Modul_Visualisierung_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Visualisierung_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_xCube|Moduldokumentation Kreuztabellen (Xcube)]]&lt;br /&gt;
** [[Modul_xCube_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_xCube_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
**[[Entwicklerhandbuch_xcube|Entwicklerhandbuch]]&lt;br /&gt;
*[[Modul_Berichtsassistent|Moduldokumentation Berichtsassistent (RPTA)]]&lt;br /&gt;
** [[Modul_Berichtsassistent_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Berichtsassistent_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
** [[RPTA_TODOs|TODOs (Intern)]]&lt;br /&gt;
*[[Modul_Nutzungsantraege|Moduldokumentation Nutzungsanträge (USERANTRAG)]]&lt;br /&gt;
**[[Modul_Nutzungsantraege_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_Portalkonfiguration|Moduldokumentation Portalkonfiguration (PORTAL)]]&lt;br /&gt;
** [[Modul_Portalkonfiguration_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Bedienung=&lt;br /&gt;
* [[SuperX-Benutzungshandbuch_Basics|SuperX-Benutzungshandbuch: Basics]]&lt;br /&gt;
* [[SuperX_barrierefrei | SuperX barrierefrei?]]&lt;/div&gt;</summary>
		<author><name>Danielq</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Aufbau_eines_SuperX-Moduls&amp;diff=16554</id>
		<title>Aufbau eines SuperX-Moduls</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Aufbau_eines_SuperX-Moduls&amp;diff=16554"/>
		<updated>2026-09-03T09:14:48Z</updated>

		<summary type="html">&lt;p&gt;Danielq: /* Gestaltung der Formulare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=Einleitung=&lt;br /&gt;
Dieser Artikel beschreibt den Aufbau eines Moduls in SuperX. Es wird erläutert welche Dateien ein Modul umfasst, wo sie abgelegt und wie sie aufgebaut sind. &lt;br /&gt;
&lt;br /&gt;
== Begriffsklärung ==&lt;br /&gt;
* Installation: SuperX stellt eine Menge von Modulen zur Verfügung, die je nach Bedarf einzeln installiert werden können. Eine Installation ist einmal bei der Installation der HISinOne-BI notwendig.&lt;br /&gt;
* Upgrade: Ein Upgrade eines Moduls ist notwendig, wenn eine Neue Version oder ein Patch vorhanden ist und die BI-Komponente technisch auf den aktuellen Stand gebracht werden soll. Ein Upgrade ist bei jeder neuen Version, jedem Release, jedem ServicePack und jedem Patch notwendig.&lt;br /&gt;
* Update: Ein Update eines Moduls sorgt dafür, dass aktuelle Daten aus dem Quellsystem in die BI überführt werden. Ein Update wird jede Nacht automatisiert durchgeführt.&lt;br /&gt;
* Laderoutine: Eine Laderoutine führt ein Update durch.&lt;br /&gt;
* In HISinOne-BI wird ein Modul als &amp;quot;BI-Komponente&amp;quot; bezeichnet&lt;br /&gt;
&lt;br /&gt;
= Modul-XML-Datei =&lt;br /&gt;
Es existiert zu jedem Modul eine zentrale Datei:&lt;br /&gt;
 superx/WEB-INF/conf/edustore/db/module/&amp;lt;&amp;lt;modulname&amp;gt;&amp;gt;/conf/&amp;lt;&amp;lt;modulname&amp;gt;&amp;gt;.xml&lt;br /&gt;
Diese Datei enthält das Datenmodell. Aus ihr werden mit XSLT alle Skripte erzeugt, die für die Installation, Deinstallation, das Upgrade und die Laderoutine (Update) einer Komponente benötigt werden. Das XML-Format hat den Vorteil, dass die Skripte dynamisch für PostgreSQL und Informix erzeugt werden können, und dass die Skripte vereinheitlicht werden. Aus dieser Datei werden die Skripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| Die Modul-Dateien sind sehr groß und daher unübersichtlich. In Eclipse hilft die View &#039;&#039;Outline&#039;&#039; den Überblick zu behalten.}}&lt;br /&gt;
Grundsätzlich ist wichtig, dass zwischen Groß- und Kleinschreibung bei Tabellen- und Feldnamen unterschieden wird, d.h. &amp;quot;Gang&amp;quot; ist nicht gleich &amp;quot;gang&amp;quot;. Außerdem sind zusätzliche Leerzeichen eine häufige Fehlerquelle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
	&amp;lt;database&amp;gt;&amp;lt;/database&amp;gt;&lt;br /&gt;
	&amp;lt;install&amp;gt;&amp;lt;/install&amp;gt;&lt;br /&gt;
    &amp;lt;uninstall-step&amp;gt;&amp;lt;/uninstall-step&amp;gt;&lt;br /&gt;
    &amp;lt;upgrade&amp;gt;&amp;lt;/upgrade&amp;gt;&lt;br /&gt;
    &amp;lt;etl&amp;gt;&amp;lt;/etl&amp;gt;&lt;br /&gt;
    &amp;lt;olap-system&amp;gt;&amp;lt;/olap-system&amp;gt;&lt;br /&gt;
    &amp;lt;dbforms&amp;gt;&amp;lt;/dbforms&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;modul&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name:&lt;br /&gt;
* version:&lt;br /&gt;
* sachgebiet_id:&lt;br /&gt;
* systeminfo_id:&lt;br /&gt;
* system:&lt;br /&gt;
* thema:&lt;br /&gt;
* thema_parent:&lt;br /&gt;
&lt;br /&gt;
==Unterbereich database==&lt;br /&gt;
In diesem Unterbereich werden die Tabellen, Views, Themen und Masken integriert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;database&amp;gt;&lt;br /&gt;
   &amp;lt;sachgebiet&amp;gt;&amp;lt;/sachgebiet&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
   &amp;lt;views&amp;gt;&amp;lt;/views&amp;gt;&lt;br /&gt;
   &amp;lt;functions&amp;gt;&amp;lt;/functions&amp;gt;&lt;br /&gt;
   &amp;lt;themen&amp;gt;&amp;lt;/themen&amp;gt;&lt;br /&gt;
   &amp;lt;masken&amp;gt;&amp;lt;/masken&amp;gt;&lt;br /&gt;
   &amp;lt;data-integrity&amp;gt;&amp;lt;/data-integrity&amp;gt;&lt;br /&gt;
&amp;lt;/database&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;database&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name:&lt;br /&gt;
* version:&lt;br /&gt;
* system:&lt;br /&gt;
&lt;br /&gt;
===Tabellen===&lt;br /&gt;
Dies ist der Kernbereich.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;columns&amp;gt;&lt;br /&gt;
      &amp;lt;column&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
      ...      &lt;br /&gt;
      &amp;lt;column&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
   &amp;lt;/columns&amp;gt;&lt;br /&gt;
   &amp;lt;primaryKeys&amp;gt;&amp;lt;/primaryKeys&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name: Tabellenname&lt;br /&gt;
* caption: Beschreibung&lt;br /&gt;
* version: Version der Tabelle&lt;br /&gt;
* thema: Das Thema, dem die Tabelle zugeordnet werden kann.&lt;br /&gt;
* typ: Art der Tabelle&lt;br /&gt;
* datenquelle:&lt;br /&gt;
&lt;br /&gt;
Art der Tabelle: &lt;br /&gt;
Per Konvention folgen die meisten Tabellen einem gewissen Schema, darin erfüllen sie eine bestimmte Funktion und sind an der Namensgebung zu erkennen. Beispielhafte Tabellen:&lt;br /&gt;
*Stagingtabelle: zum Sammeln von Daten, die ins Vorsystem geladen wurden&lt;br /&gt;
**Beispielname: tabelle_neu.sql&lt;br /&gt;
*Datentabelle: zur Datenhaltung&lt;br /&gt;
**Beispielname: tabelle.sql&lt;br /&gt;
*Aggregationstabelle: gehören zur Präsentationsschicht, für Berichte&lt;br /&gt;
**Beispielname: tabelle_aggr.sql&lt;br /&gt;
*Cubetabelle: bauen normalerweise auf Aggregationstabellen auf und überführen diese in eine numerische Verschlüsselung, für OLAP&lt;br /&gt;
**Beispielname: tabelle_cube.sql&lt;br /&gt;
*Dimensionstabelle: für Datenblätter, (OLAP)&lt;br /&gt;
**Beispielname: tabelle_cif.sql&lt;br /&gt;
:::tabelle_cifx.sql&lt;br /&gt;
:::dim_bp_tabelle_apnr&lt;br /&gt;
&lt;br /&gt;
Das Element &amp;lt;tt&amp;gt;&amp;lt;description&amp;gt;&amp;lt;/tt&amp;gt; bietet die Möglichkeit eine ausführlichere Beschreibung der Tabelle zu hinterlassen. &amp;lt;br&amp;gt;&lt;br /&gt;
In dem Element &amp;lt;tt&amp;gt;&amp;lt;columns&amp;gt;&amp;lt;/tt&amp;gt; werden die Spalten der Tabelle definiert. Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;column&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name: Name der Spalte&lt;br /&gt;
* type: Datentyp&lt;br /&gt;
* size: größe des Datentyps&lt;br /&gt;
* notnull: ob das Feld leergelassen werden darf&lt;br /&gt;
* description: Beschreibung der Spalte (wird in den jsp-Seiten der BI angezeigt)&lt;br /&gt;
* currentlyUsed: Wenn false, wird die Spalte in Datenblatt-Berichten nicht angezeigt.&lt;br /&gt;
* comment: Hier kann noch ein zusätzlicher Kommentar rein (erscheint in der Datenbankdokumentation)&lt;br /&gt;
&lt;br /&gt;
Im Element &amp;quot;primaryKeys&amp;quot; werden die Primärschlüssel der Tabelle eingetragen. Hier gilt folgende Syntax:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;rs&amp;gt;&lt;br /&gt;
   &amp;lt;row&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_cat&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_schem&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_name&amp;quot;&amp;gt;gang_stg_astat&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;column_name&amp;quot;&amp;gt;tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;key_seq&amp;quot;&amp;gt;1&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;pk_name&amp;quot;&amp;gt;gang_stg_stat_tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
   &amp;lt;/row&amp;gt;&lt;br /&gt;
&amp;lt;/rs&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Elemente &amp;quot;fld name&amp;quot; müssen hier von &amp;quot;rs&amp;quot; und &amp;quot;row&amp;quot; umschlossen werden. Für einen Weiteren &amp;quot;primaryKey&amp;quot; wird ein neues Element &amp;quot;row&amp;quot; in dem selben &amp;quot;rs&amp;quot; geschrieben.&lt;br /&gt;
Zur Beschreibung:&lt;br /&gt;
* table_cat: Databasenamen&lt;br /&gt;
* table_schem: Databasename&lt;br /&gt;
* table_name: Tabellenname in dem der Primarykey steht&lt;br /&gt;
* column_name: Spaltenname vom Primarykey&lt;br /&gt;
* key_seq: Der wievielte Primarykey ist dies von der Tabelle?&lt;br /&gt;
* pk_name: Name vom Primarykey, üblicherweise &amp;lt;&amp;lt;Tabellenname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Spaltenname&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel &amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table name=&amp;quot;gang_stg_astat&amp;quot; caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten&amp;quot; version=&amp;quot;0.1&amp;quot; 	thema=&amp;quot;Studiengänge&amp;quot; typ=&amp;quot;Schlüsseltabelle&amp;quot; datenquelle=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen 	Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
 &amp;lt;columns&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;tid&amp;quot; type=&amp;quot;SERIAL&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;true&amp;quot; description=&amp;quot;Laufnummer&amp;quot; 	isKey=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;lehreinheit&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Lehreinheit&amp;quot;&amp;gt;&amp;lt;comment&amp;gt;(hochschulinterner Schlüssel)&amp;lt;/comment&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;beschreibung&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;150&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Bezeichnung des 	Studienfachs&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;astat&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;3&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Externer Schlüssel&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;studienbereich&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Schlüssel 	Studienbereich&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;aktiv&amp;quot; type=&amp;quot;SMALLINT&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Aktiv&amp;quot;&amp;gt;&amp;lt;comment&amp;gt;Nur aktive Stati 	(1) werden im Studiengangsbaum angezeigt&amp;lt;/comment&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;bund_key&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Bundesschlüssel 	Lehreinheit&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;datenquelle&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;1&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Datenquelle für diesen Datensatz&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;erzeugt_am&amp;quot; type=&amp;quot;DATE&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;today()&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Datum der Erzeugung des Datensatzes&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;geaendert_am&amp;quot; type=&amp;quot;DATE&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Datum der 	letzten Änderung des Datensatzes&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;geaendert_von_id&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;UserID des Ändernden&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;erzeugt_von_id&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;UserID des Erzeugers&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/columns&amp;gt;&lt;br /&gt;
 &amp;lt;primaryKeys&amp;gt;&lt;br /&gt;
  &amp;lt;rs&amp;gt;&lt;br /&gt;
   &amp;lt;row&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_cat&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_schem&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_name&amp;quot;&amp;gt;gang_stg_astat&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;column_name&amp;quot;&amp;gt;tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;key_seq&amp;quot;&amp;gt;1&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;pk_name&amp;quot;&amp;gt;gang_stg_stat_tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
   &amp;lt;/row&amp;gt;&lt;br /&gt;
  &amp;lt;/rs&amp;gt;&lt;br /&gt;
 &amp;lt;/primaryKeys&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Views===&lt;br /&gt;
Für die Views wird wie bei den Tabellen eine bestimmte Syntax verfolgt. Diese erläutere ich an dem Beispiel der gang_k_sb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;view name=&amp;quot;gang_k_sb&amp;quot; version=&amp;quot;0.1&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;View Studienbereiche (Landesschlüssel)&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;columns&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;apnr&amp;quot; type =&amp;quot;char&amp;quot; size =&amp;quot;2&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;kurz&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;150&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;druck&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;255&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;lang_1&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;255&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;astat&amp;quot; type =&amp;quot;SMALLINT&amp;quot; size =&amp;quot;2&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/columns&amp;gt;&lt;br /&gt;
&amp;lt;sql dbsystem=&amp;quot;&amp;quot;&amp;gt;&amp;lt;![CDATA[SELECT apnr,kurz,druck ,lang_1,astat FROM gang_cifx where key=3 ]]&amp;gt;&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/view&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Vorgehensweise ähnelt hier der der Tabellen. In &amp;quot;view&amp;quot; wird der Name und die Version des Views eingetragen und in &amp;quot;description&amp;quot; die Beschreibung. In &amp;quot;columns&amp;quot; wird für jede Spalte ein &amp;quot;column&amp;quot; Element angelegt mit den entsprechenden Eigenschaften, wie &amp;quot;name&amp;quot;, &amp;quot;type&amp;quot;, &amp;quot;size&amp;quot; ... . In &amp;quot;sql&amp;quot; wird dann der select des Views eingetragen. Die Besonderheit hier ist das &amp;quot;CDATA&amp;quot;. Durch diesen Befehl wird der eingeschlossene Text nicht von XSLT ausgewertet, sondern direkt übergeben.&lt;br /&gt;
&lt;br /&gt;
===Themen===&lt;br /&gt;
Hier handelt es sich um die Überschriften im Themenbaum, z.B. &amp;quot;Auswertungen zu Studiengängen&amp;quot;. Im Attribut Parent wird das übergeordnete Element definiert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;thema name=&amp;quot;Auswertungen zu Studiengängen&amp;quot; parent=&amp;quot;Studiengänge&amp;quot;&amp;gt;Abfragen zur Akkreditierung&amp;lt;/thema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Masken===&lt;br /&gt;
Hier werden die Masken bzw. Berichte des Moduls definiert. Diese Definitionen werden z.B. genutzt, um die Masken zu installieren oder zu entladen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;maske tid=&amp;quot;25240&amp;quot; name=&amp;quot;Zulassung&amp;quot; thema=&amp;quot;Auswertungen zu Studiengängen&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;src&amp;gt;&amp;lt;path&amp;gt;$GANG_PFAD/masken&amp;lt;/path&amp;gt;&amp;lt;author&amp;gt;D. Quathamer&amp;lt;/author&amp;gt;&amp;lt;lastChange&amp;gt;23.5.2007&amp;lt;/lastChange&amp;gt;&amp;lt;dbsystem&amp;gt;INFORMIX&amp;lt;/dbsystem&amp;gt;&amp;lt;/src&amp;gt;&lt;br /&gt;
   &amp;lt;src&amp;gt;&amp;lt;path&amp;gt;$GANG_PFAD/masken&amp;lt;/path&amp;gt;&amp;lt;author&amp;gt;D. Quathamer&amp;lt;/author&amp;gt;&amp;lt;lastChange&amp;gt;23.5.2007&amp;lt;/lastChange&amp;gt;&amp;lt;dbsystem&amp;gt;POSTGRES&amp;lt;/dbsystem&amp;gt;&amp;lt;/src&amp;gt;&lt;br /&gt;
&amp;lt;/maske&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Data-integrity===&lt;br /&gt;
In der Data-integrity werden die Verknüpfungen der Tabellen eingetragen. Dies ist einmal für die &amp;lt;&amp;lt;Modul&amp;gt;&amp;gt;.html wichtig, da dann die Verknüpfungen auch als Link zu der entsprechenden Tabelle erscheinen und damit in SuperX in den entsprechenden Tabellen nicht nur eine Nummer, sondern auch ein aussagekräftiger Text steht. &lt;br /&gt;
In meinem Beispiel verknüpfe ich die Tabellen gang_k_lehr_hs mit der gang_stg_astat. Auch die Reihenfolge spielt hier eine wichtige Rolle. Die erste Tabelle ist die, in der der entsprechende Inhalt und der Schlüssel in einer Spalte stehen. Die zweite Tabelle enthält nur den Schlüssel. Daher wird in der &amp;lt;&amp;lt;Modul&amp;gt;&amp;gt;.xml in der Zweiten Tabelle der entsprechende Fremdschlüssel eingetragen.&lt;br /&gt;
In visibleFields wird die entsprechende Spalte eingetragen, die ausgegeben werden soll. Mit zwei Pipes &amp;quot;||&amp;quot; können auch mehrere Spalten miteinander verbunden werden, wenn z.B. der Key und der Text ausgegeben werden soll.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--gang_stg_astat --&amp;gt;&lt;br /&gt;
&amp;lt;relation from=&amp;quot;gang_k_lehr_hs&amp;quot; to=&amp;quot;gang_stg_astat&amp;quot; delete=&amp;quot;FALSE&amp;quot; displayType=&amp;quot;select&amp;quot; visibleFields=&amp;quot;key_apnr || trim(drucktext)&amp;quot; format=&amp;quot;%s&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;relation-column from=&amp;quot;key_apnr&amp;quot; to=&amp;quot;lehreinheit&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/relation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Beschreibung &amp;quot;relation&amp;quot;:&lt;br /&gt;
*from: Tabelle mit Schlüssel und zugehörigen Text&lt;br /&gt;
*to: Tabelle nur mit Schlüssel&lt;br /&gt;
*delete:&lt;br /&gt;
*displayType:&lt;br /&gt;
*visibleFields: Welche Spalten angezeigt werden sollen (z.B. in dbforms FK-Bezizehungen)&lt;br /&gt;
*format: Format der Anzeige&lt;br /&gt;
&lt;br /&gt;
Zur Beschreibung &amp;quot;relation-column&amp;quot;:&lt;br /&gt;
*from: Key-Spalte der ersten Tabelle&lt;br /&gt;
*to: Key-Spalte der zweiten Tabelle&lt;br /&gt;
&lt;br /&gt;
== Unterbereiche install, uninstall, ETL und upgrade==&lt;br /&gt;
Hier werden Aktionen und Ladeschritte bei der jeweiligen Aktion eines Moduls definiert. Das Hauptaugenmark liegt hier auf &amp;quot;nativeaction&amp;quot; und &amp;quot;loadtable&amp;quot;. Eine &amp;quot;nativeaction wäre z.B.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nativeaction sql=&amp;quot;&amp;quot; scriptfile=&amp;quot;$GANG_PFAD/conf/gang_tabellen_fuellen.sql&amp;quot; &lt;br /&gt;
	database=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird der Inhalt der SQL Datei genommen und ausgeführt. Es ist auch möglich einen SQL Befehl direkt in das Attribut &amp;quot;sql&amp;quot; zu schreiben. Falls erforderlich, kann auch noch als Bedingung die Datenbank angegeben werden (z.B. POSTGRES oder INFORMIX), für die diese &amp;quot;nativeaction&amp;quot; gedacht ist.&lt;br /&gt;
Für &amp;quot;loadtable&amp;quot; ist folgendes Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;loadtable refresh=&amp;quot;false&amp;quot; delimiter=&amp;quot;^&amp;quot; header=&amp;quot;false&amp;quot; tabname=&amp;quot;gang_cifx&amp;quot;&amp;gt;&amp;lt;file path=&amp;quot;$GANG_PFAD/schluesseltabellen/gang_cifx.unl&amp;quot;/&amp;gt;&amp;lt;/loadtable&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier wird der Inhalt einer Tabelle in eine Datei abgespeichert. &amp;quot;delimiter&amp;quot; steht für Feldtrenner, &amp;quot;header&amp;quot;, ob die Spaltenüberschrift übernommen werden soll und &amp;quot;tabname&amp;quot; für den Tabellennamen. in &amp;quot;file&amp;quot; in dem Attribut &amp;quot;path&amp;quot; wird der Pfad mit Dateinamen angegeben, wo der Inhalt abgespeichert werden soll.&lt;br /&gt;
===Spezialität bei ETL===&lt;br /&gt;
In dem ETL Modul sind 6 Stufen eingebaut. Zu beachten ist hier auch, wenn eine Stufe nicht richtig verarbeitet wird, bricht das SKript komplett ab.&lt;br /&gt;
Zu den einzelnen Stufen:&lt;br /&gt;
;Unload: Hier werden die Daten aus dem Vorsystem entladen.&lt;br /&gt;
;Load: Hier werden die Daten in das Datawarehouse geladen.&lt;br /&gt;
;Trans: Hier wird die Transformation durchgeführt. D.h. es wird eine Schlüsselharmonisierung durchgeführt.&lt;br /&gt;
;Aggregation: Hier werden die Hilfstabellen gefüllt.&lt;br /&gt;
;System: Hier wird das Datum aktualisiert, welches die Aktualität angibt.&lt;br /&gt;
;Test: Hier findet die Prüfroutine statt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==dbforms==&lt;br /&gt;
In der Modul-XML werden auch die Vorlagen für die DBforms gemacht. Dabei wird mit XSLT aus der abstrakten Beschreibung des Formulars eine funktionstüchtige JSP-Seite erzeugt. Hier werde ich nur auf die wichtigsten Felder eingehen.&lt;br /&gt;
===Erläuterung der XML-Elemente===&lt;br /&gt;
;Tabellenname:Als erstes sollte der Tabellenname eingetragen werden. Dieser wird hier an mehreren Stellen benötigt. (Bei: &amp;quot;table&amp;quot;, &amp;quot;path&amp;quot;, &amp;quot;customfield&amp;quot;,  ..)&lt;br /&gt;
;path:Zu beachten ist, dass der Tabellenname sowie das Modul in den Pfad (&amp;quot;path&amp;quot;) Angaben auch richtig eingetragen wird.&lt;br /&gt;
;name , caption:Im ersten Block wird meist in den Feldern &amp;quot;name&amp;quot; und &amp;quot;caption&amp;quot; dasselbe eingetragen und zwar eine kurze aber aussagekräftige Bezeichnung der Tabelle. Diese kann auch in dem zweiten Block übernommen werden. Dort gibt es genau dieselben Felder.&lt;br /&gt;
;descpription: Eine ausführlichere Beschreibung der Tabelle wird in das Feld &amp;quot;description&amp;quot; geschrieben. Diese Beschreibung sollte aber auch nicht länger sein als ein normaler Satz.&lt;br /&gt;
; field-selection / customfield :Wenn man &amp;lt;nowiki&amp;gt;&amp;lt;field-selection complete=&amp;quot;true&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt; wählt, dann werden automatisch alle Felder der Tabelle im Formular angezeigt. Wenn Sie nur einige Felder anzeigen wollen, nutzen Sie das Element &amp;lt;nowiki&amp;gt;&amp;lt;customfield&amp;gt;&amp;lt;/nowiki&amp;gt;. Außerdem kann man mit customfield spezielle Layoutanweisungen kombinieren, z.B. Feldgröße.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten (Liste)&amp;quot;&lt;br /&gt;
 table=&amp;quot;gang_stg_astat&amp;quot;&lt;br /&gt;
 path=&amp;quot;/edit/gang/gang_stg_astat_list.jsp&amp;quot;&lt;br /&gt;
 followUp=&amp;quot;&amp;quot;&lt;br /&gt;
 caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten (Liste)&amp;quot;&lt;br /&gt;
 orderBy=&amp;quot;astat&amp;quot;&lt;br /&gt;
 gotoHt=&amp;quot;&amp;quot;&lt;br /&gt;
 helpfile=&amp;quot;&amp;quot;&lt;br /&gt;
 maxRows=&amp;quot;*&amp;quot;&lt;br /&gt;
 mode=&amp;quot;update_insert&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;filters&amp;gt;&lt;br /&gt;
&amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;field-selection  complete=&amp;quot;false&amp;quot;  /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;tid&amp;quot; nullFieldValue=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;astat&amp;quot; type=&amp;quot;label&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield type=&amp;quot;link&amp;quot; name=&amp;quot;Details&amp;quot; path=&amp;quot;/superx/edit/gang/gang_stg_astat_edit.jsp&amp;quot; linkid=&amp;quot;tid&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form name=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten&amp;quot;&lt;br /&gt;
 table=&amp;quot;gang_stg_astat&amp;quot;&lt;br /&gt;
 path=&amp;quot;/edit/gang/gang_stg_astat_edit.jsp&amp;quot;&lt;br /&gt;
 followUp=&amp;quot;&amp;quot;&lt;br /&gt;
 caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten bearbeiten&amp;quot;&lt;br /&gt;
 orderBy=&amp;quot;astat&amp;quot;&lt;br /&gt;
 gotoHt=&amp;quot;tid&amp;quot;&lt;br /&gt;
 helpfile=&amp;quot;&amp;quot;&lt;br /&gt;
 maxRows=&amp;quot;1&amp;quot;&lt;br /&gt;
 mode=&amp;quot;full&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;filters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;field-selection  complete=&amp;quot;false&amp;quot;  /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;tid&amp;quot; nullFieldValue=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;lehreinheit&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;beschreibung&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;astat&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;studienbereich&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;aktiv&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;bund_key&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;Datensatzstatus&amp;quot; type=&amp;quot;include&amp;quot; path=&amp;quot;/edit/gang/datensatzstatus.inc&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Optionen für die Merkmale:&lt;br /&gt;
#mode&lt;br /&gt;
#* full&lt;br /&gt;
#* update_insert&lt;br /&gt;
#* update&lt;br /&gt;
#* insert&lt;br /&gt;
#* ...&lt;br /&gt;
#type&lt;br /&gt;
#*include&lt;br /&gt;
#*link&lt;br /&gt;
#*lable (Nur Bezeichnung)&lt;br /&gt;
#* ...&lt;br /&gt;
#filters&lt;br /&gt;
#* Beispiel: in gang.xml:  form name=&amp;quot;zuordnung&amp;quot;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;filters&amp;gt;&lt;br /&gt;
&amp;lt;filter mandatory=&amp;quot;true&amp;quot; type=&amp;quot;equals&amp;quot;&amp;gt;tid&amp;lt;/filter&amp;gt;&lt;br /&gt;
&amp;lt;/filters&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test der Formulare===&lt;br /&gt;
Die Formulare werden in der Modul-XML-Datei definiert (s.o.). Die JSP-Seiten werden dann generiert, indem man das [[Kernmodul_Shellscripte#module_scripts_create.x|Modulscripte generieren]] ausführt. &lt;br /&gt;
Danach muss man einen Modulupgrade ausführen, damit die Formulare in der Datenbank gespeichert werden. Und dann kann man die Formulare testen, indem man im Menü Administration-&amp;gt; &amp;quot;Tabelle suchen&amp;quot;-&amp;gt; Bearbeiten anklickt. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Bearbeitungsformulare auch im Themenbaum anzeigen wollen, müssen Sie eine Suchmaske vorschalten, in der &lt;br /&gt;
*die Datensätze gefiltert werden können&lt;br /&gt;
*über einen&#039; &#039;&#039;Bearbeiten&#039;&#039;&#039; Button [[Bild:Pencil.gif]](Spaltenname &amp;quot;nextedit&amp;quot;) zugänglich gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Sie z.B. die Maske &amp;quot;Tabelle suchen&amp;quot;, diese ist ein gutes, einfaches Beispiel für eine Kombination aus Suchformular und Bearbeitungsformular.&lt;br /&gt;
&lt;br /&gt;
=== Gestaltung der Formulare ===&lt;br /&gt;
&lt;br /&gt;
; Auswahl aus Schlüsseltabelle&lt;br /&gt;
: Wenn Inhalte zur Auswahl aus einer verknüften Schlüsseltabelle angezeigt werden sollen, müssen folgende Bedingungen erfüllt sein:&lt;br /&gt;
:* Die Beziehung ist als  data-integrity-relation eingetragen.&lt;br /&gt;
:* in der Relation ist unter &#039;&#039;&#039;visibleFields=&amp;quot;...&amp;quot;&#039;&#039;&#039; das Feld eingetragen, dessen Inhalt an der Oberfläche erscheinen soll.&lt;br /&gt;
&lt;br /&gt;
;Spaltenbeschriftung&lt;br /&gt;
:Wenn nicht der Spaltennahme aus der Tabelle angezeigt werden soll, sondern eine sprechendere Bezeichnung muss bei description:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;database&amp;gt; &amp;lt;table&amp;gt; &amp;lt;columns&amp;gt; &amp;lt;column name=&amp;quot;...&amp;quot; &#039;&#039;&#039;description= &amp;quot;...&amp;quot;&#039;&#039;&#039; &amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 die entsprechende Bezeichnung eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
;Formular in Maske einbinden&lt;br /&gt;
:Wenn durch eintragen von &amp;quot;nextedit&amp;quot; bereits ein Verweis auf das (funktionierende) Formular erstellt wurde, es aber nicht gefunden wird, muss:&lt;br /&gt;
:* zunächst die jsp Seite unter superx/edit/MODULE generiert werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://entwicklerhandbuch.superx-projekt.de/ Entwicklungshandbücher von SuperX]&lt;/div&gt;</summary>
		<author><name>Danielq</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Aufbau_eines_SuperX-Moduls&amp;diff=16553</id>
		<title>Aufbau eines SuperX-Moduls</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Aufbau_eines_SuperX-Moduls&amp;diff=16553"/>
		<updated>2026-09-03T09:12:51Z</updated>

		<summary type="html">&lt;p&gt;Danielq: /* Test der Formulare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=Einleitung=&lt;br /&gt;
Dieser Artikel beschreibt den Aufbau eines Moduls in SuperX. Es wird erläutert welche Dateien ein Modul umfasst, wo sie abgelegt und wie sie aufgebaut sind. &lt;br /&gt;
&lt;br /&gt;
== Begriffsklärung ==&lt;br /&gt;
* Installation: SuperX stellt eine Menge von Modulen zur Verfügung, die je nach Bedarf einzeln installiert werden können. Eine Installation ist einmal bei der Installation der HISinOne-BI notwendig.&lt;br /&gt;
* Upgrade: Ein Upgrade eines Moduls ist notwendig, wenn eine Neue Version oder ein Patch vorhanden ist und die BI-Komponente technisch auf den aktuellen Stand gebracht werden soll. Ein Upgrade ist bei jeder neuen Version, jedem Release, jedem ServicePack und jedem Patch notwendig.&lt;br /&gt;
* Update: Ein Update eines Moduls sorgt dafür, dass aktuelle Daten aus dem Quellsystem in die BI überführt werden. Ein Update wird jede Nacht automatisiert durchgeführt.&lt;br /&gt;
* Laderoutine: Eine Laderoutine führt ein Update durch.&lt;br /&gt;
* In HISinOne-BI wird ein Modul als &amp;quot;BI-Komponente&amp;quot; bezeichnet&lt;br /&gt;
&lt;br /&gt;
= Modul-XML-Datei =&lt;br /&gt;
Es existiert zu jedem Modul eine zentrale Datei:&lt;br /&gt;
 superx/WEB-INF/conf/edustore/db/module/&amp;lt;&amp;lt;modulname&amp;gt;&amp;gt;/conf/&amp;lt;&amp;lt;modulname&amp;gt;&amp;gt;.xml&lt;br /&gt;
Diese Datei enthält das Datenmodell. Aus ihr werden mit XSLT alle Skripte erzeugt, die für die Installation, Deinstallation, das Upgrade und die Laderoutine (Update) einer Komponente benötigt werden. Das XML-Format hat den Vorteil, dass die Skripte dynamisch für PostgreSQL und Informix erzeugt werden können, und dass die Skripte vereinheitlicht werden. Aus dieser Datei werden die Skripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| Die Modul-Dateien sind sehr groß und daher unübersichtlich. In Eclipse hilft die View &#039;&#039;Outline&#039;&#039; den Überblick zu behalten.}}&lt;br /&gt;
Grundsätzlich ist wichtig, dass zwischen Groß- und Kleinschreibung bei Tabellen- und Feldnamen unterschieden wird, d.h. &amp;quot;Gang&amp;quot; ist nicht gleich &amp;quot;gang&amp;quot;. Außerdem sind zusätzliche Leerzeichen eine häufige Fehlerquelle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
	&amp;lt;database&amp;gt;&amp;lt;/database&amp;gt;&lt;br /&gt;
	&amp;lt;install&amp;gt;&amp;lt;/install&amp;gt;&lt;br /&gt;
    &amp;lt;uninstall-step&amp;gt;&amp;lt;/uninstall-step&amp;gt;&lt;br /&gt;
    &amp;lt;upgrade&amp;gt;&amp;lt;/upgrade&amp;gt;&lt;br /&gt;
    &amp;lt;etl&amp;gt;&amp;lt;/etl&amp;gt;&lt;br /&gt;
    &amp;lt;olap-system&amp;gt;&amp;lt;/olap-system&amp;gt;&lt;br /&gt;
    &amp;lt;dbforms&amp;gt;&amp;lt;/dbforms&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;modul&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name:&lt;br /&gt;
* version:&lt;br /&gt;
* sachgebiet_id:&lt;br /&gt;
* systeminfo_id:&lt;br /&gt;
* system:&lt;br /&gt;
* thema:&lt;br /&gt;
* thema_parent:&lt;br /&gt;
&lt;br /&gt;
==Unterbereich database==&lt;br /&gt;
In diesem Unterbereich werden die Tabellen, Views, Themen und Masken integriert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;database&amp;gt;&lt;br /&gt;
   &amp;lt;sachgebiet&amp;gt;&amp;lt;/sachgebiet&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
   &amp;lt;views&amp;gt;&amp;lt;/views&amp;gt;&lt;br /&gt;
   &amp;lt;functions&amp;gt;&amp;lt;/functions&amp;gt;&lt;br /&gt;
   &amp;lt;themen&amp;gt;&amp;lt;/themen&amp;gt;&lt;br /&gt;
   &amp;lt;masken&amp;gt;&amp;lt;/masken&amp;gt;&lt;br /&gt;
   &amp;lt;data-integrity&amp;gt;&amp;lt;/data-integrity&amp;gt;&lt;br /&gt;
&amp;lt;/database&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;database&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name:&lt;br /&gt;
* version:&lt;br /&gt;
* system:&lt;br /&gt;
&lt;br /&gt;
===Tabellen===&lt;br /&gt;
Dies ist der Kernbereich.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;columns&amp;gt;&lt;br /&gt;
      &amp;lt;column&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
      ...      &lt;br /&gt;
      &amp;lt;column&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
   &amp;lt;/columns&amp;gt;&lt;br /&gt;
   &amp;lt;primaryKeys&amp;gt;&amp;lt;/primaryKeys&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name: Tabellenname&lt;br /&gt;
* caption: Beschreibung&lt;br /&gt;
* version: Version der Tabelle&lt;br /&gt;
* thema: Das Thema, dem die Tabelle zugeordnet werden kann.&lt;br /&gt;
* typ: Art der Tabelle&lt;br /&gt;
* datenquelle:&lt;br /&gt;
&lt;br /&gt;
Art der Tabelle: &lt;br /&gt;
Per Konvention folgen die meisten Tabellen einem gewissen Schema, darin erfüllen sie eine bestimmte Funktion und sind an der Namensgebung zu erkennen. Beispielhafte Tabellen:&lt;br /&gt;
*Stagingtabelle: zum Sammeln von Daten, die ins Vorsystem geladen wurden&lt;br /&gt;
**Beispielname: tabelle_neu.sql&lt;br /&gt;
*Datentabelle: zur Datenhaltung&lt;br /&gt;
**Beispielname: tabelle.sql&lt;br /&gt;
*Aggregationstabelle: gehören zur Präsentationsschicht, für Berichte&lt;br /&gt;
**Beispielname: tabelle_aggr.sql&lt;br /&gt;
*Cubetabelle: bauen normalerweise auf Aggregationstabellen auf und überführen diese in eine numerische Verschlüsselung, für OLAP&lt;br /&gt;
**Beispielname: tabelle_cube.sql&lt;br /&gt;
*Dimensionstabelle: für Datenblätter, (OLAP)&lt;br /&gt;
**Beispielname: tabelle_cif.sql&lt;br /&gt;
:::tabelle_cifx.sql&lt;br /&gt;
:::dim_bp_tabelle_apnr&lt;br /&gt;
&lt;br /&gt;
Das Element &amp;lt;tt&amp;gt;&amp;lt;description&amp;gt;&amp;lt;/tt&amp;gt; bietet die Möglichkeit eine ausführlichere Beschreibung der Tabelle zu hinterlassen. &amp;lt;br&amp;gt;&lt;br /&gt;
In dem Element &amp;lt;tt&amp;gt;&amp;lt;columns&amp;gt;&amp;lt;/tt&amp;gt; werden die Spalten der Tabelle definiert. Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;column&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name: Name der Spalte&lt;br /&gt;
* type: Datentyp&lt;br /&gt;
* size: größe des Datentyps&lt;br /&gt;
* notnull: ob das Feld leergelassen werden darf&lt;br /&gt;
* description: Beschreibung der Spalte (wird in den jsp-Seiten der BI angezeigt)&lt;br /&gt;
* currentlyUsed: Wenn false, wird die Spalte in Datenblatt-Berichten nicht angezeigt.&lt;br /&gt;
* comment: Hier kann noch ein zusätzlicher Kommentar rein (erscheint in der Datenbankdokumentation)&lt;br /&gt;
&lt;br /&gt;
Im Element &amp;quot;primaryKeys&amp;quot; werden die Primärschlüssel der Tabelle eingetragen. Hier gilt folgende Syntax:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;rs&amp;gt;&lt;br /&gt;
   &amp;lt;row&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_cat&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_schem&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_name&amp;quot;&amp;gt;gang_stg_astat&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;column_name&amp;quot;&amp;gt;tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;key_seq&amp;quot;&amp;gt;1&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;pk_name&amp;quot;&amp;gt;gang_stg_stat_tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
   &amp;lt;/row&amp;gt;&lt;br /&gt;
&amp;lt;/rs&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Elemente &amp;quot;fld name&amp;quot; müssen hier von &amp;quot;rs&amp;quot; und &amp;quot;row&amp;quot; umschlossen werden. Für einen Weiteren &amp;quot;primaryKey&amp;quot; wird ein neues Element &amp;quot;row&amp;quot; in dem selben &amp;quot;rs&amp;quot; geschrieben.&lt;br /&gt;
Zur Beschreibung:&lt;br /&gt;
* table_cat: Databasenamen&lt;br /&gt;
* table_schem: Databasename&lt;br /&gt;
* table_name: Tabellenname in dem der Primarykey steht&lt;br /&gt;
* column_name: Spaltenname vom Primarykey&lt;br /&gt;
* key_seq: Der wievielte Primarykey ist dies von der Tabelle?&lt;br /&gt;
* pk_name: Name vom Primarykey, üblicherweise &amp;lt;&amp;lt;Tabellenname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Spaltenname&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel &amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table name=&amp;quot;gang_stg_astat&amp;quot; caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten&amp;quot; version=&amp;quot;0.1&amp;quot; 	thema=&amp;quot;Studiengänge&amp;quot; typ=&amp;quot;Schlüsseltabelle&amp;quot; datenquelle=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen 	Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
 &amp;lt;columns&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;tid&amp;quot; type=&amp;quot;SERIAL&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;true&amp;quot; description=&amp;quot;Laufnummer&amp;quot; 	isKey=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;lehreinheit&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Lehreinheit&amp;quot;&amp;gt;&amp;lt;comment&amp;gt;(hochschulinterner Schlüssel)&amp;lt;/comment&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;beschreibung&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;150&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Bezeichnung des 	Studienfachs&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;astat&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;3&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Externer Schlüssel&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;studienbereich&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Schlüssel 	Studienbereich&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;aktiv&amp;quot; type=&amp;quot;SMALLINT&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Aktiv&amp;quot;&amp;gt;&amp;lt;comment&amp;gt;Nur aktive Stati 	(1) werden im Studiengangsbaum angezeigt&amp;lt;/comment&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;bund_key&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Bundesschlüssel 	Lehreinheit&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;datenquelle&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;1&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Datenquelle für diesen Datensatz&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;erzeugt_am&amp;quot; type=&amp;quot;DATE&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;today()&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Datum der Erzeugung des Datensatzes&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;geaendert_am&amp;quot; type=&amp;quot;DATE&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Datum der 	letzten Änderung des Datensatzes&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;geaendert_von_id&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;UserID des Ändernden&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;erzeugt_von_id&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;UserID des Erzeugers&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/columns&amp;gt;&lt;br /&gt;
 &amp;lt;primaryKeys&amp;gt;&lt;br /&gt;
  &amp;lt;rs&amp;gt;&lt;br /&gt;
   &amp;lt;row&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_cat&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_schem&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_name&amp;quot;&amp;gt;gang_stg_astat&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;column_name&amp;quot;&amp;gt;tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;key_seq&amp;quot;&amp;gt;1&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;pk_name&amp;quot;&amp;gt;gang_stg_stat_tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
   &amp;lt;/row&amp;gt;&lt;br /&gt;
  &amp;lt;/rs&amp;gt;&lt;br /&gt;
 &amp;lt;/primaryKeys&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Views===&lt;br /&gt;
Für die Views wird wie bei den Tabellen eine bestimmte Syntax verfolgt. Diese erläutere ich an dem Beispiel der gang_k_sb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;view name=&amp;quot;gang_k_sb&amp;quot; version=&amp;quot;0.1&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;View Studienbereiche (Landesschlüssel)&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;columns&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;apnr&amp;quot; type =&amp;quot;char&amp;quot; size =&amp;quot;2&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;kurz&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;150&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;druck&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;255&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;lang_1&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;255&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;astat&amp;quot; type =&amp;quot;SMALLINT&amp;quot; size =&amp;quot;2&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/columns&amp;gt;&lt;br /&gt;
&amp;lt;sql dbsystem=&amp;quot;&amp;quot;&amp;gt;&amp;lt;![CDATA[SELECT apnr,kurz,druck ,lang_1,astat FROM gang_cifx where key=3 ]]&amp;gt;&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/view&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Vorgehensweise ähnelt hier der der Tabellen. In &amp;quot;view&amp;quot; wird der Name und die Version des Views eingetragen und in &amp;quot;description&amp;quot; die Beschreibung. In &amp;quot;columns&amp;quot; wird für jede Spalte ein &amp;quot;column&amp;quot; Element angelegt mit den entsprechenden Eigenschaften, wie &amp;quot;name&amp;quot;, &amp;quot;type&amp;quot;, &amp;quot;size&amp;quot; ... . In &amp;quot;sql&amp;quot; wird dann der select des Views eingetragen. Die Besonderheit hier ist das &amp;quot;CDATA&amp;quot;. Durch diesen Befehl wird der eingeschlossene Text nicht von XSLT ausgewertet, sondern direkt übergeben.&lt;br /&gt;
&lt;br /&gt;
===Themen===&lt;br /&gt;
Hier handelt es sich um die Überschriften im Themenbaum, z.B. &amp;quot;Auswertungen zu Studiengängen&amp;quot;. Im Attribut Parent wird das übergeordnete Element definiert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;thema name=&amp;quot;Auswertungen zu Studiengängen&amp;quot; parent=&amp;quot;Studiengänge&amp;quot;&amp;gt;Abfragen zur Akkreditierung&amp;lt;/thema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Masken===&lt;br /&gt;
Hier werden die Masken bzw. Berichte des Moduls definiert. Diese Definitionen werden z.B. genutzt, um die Masken zu installieren oder zu entladen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;maske tid=&amp;quot;25240&amp;quot; name=&amp;quot;Zulassung&amp;quot; thema=&amp;quot;Auswertungen zu Studiengängen&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;src&amp;gt;&amp;lt;path&amp;gt;$GANG_PFAD/masken&amp;lt;/path&amp;gt;&amp;lt;author&amp;gt;D. Quathamer&amp;lt;/author&amp;gt;&amp;lt;lastChange&amp;gt;23.5.2007&amp;lt;/lastChange&amp;gt;&amp;lt;dbsystem&amp;gt;INFORMIX&amp;lt;/dbsystem&amp;gt;&amp;lt;/src&amp;gt;&lt;br /&gt;
   &amp;lt;src&amp;gt;&amp;lt;path&amp;gt;$GANG_PFAD/masken&amp;lt;/path&amp;gt;&amp;lt;author&amp;gt;D. Quathamer&amp;lt;/author&amp;gt;&amp;lt;lastChange&amp;gt;23.5.2007&amp;lt;/lastChange&amp;gt;&amp;lt;dbsystem&amp;gt;POSTGRES&amp;lt;/dbsystem&amp;gt;&amp;lt;/src&amp;gt;&lt;br /&gt;
&amp;lt;/maske&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Data-integrity===&lt;br /&gt;
In der Data-integrity werden die Verknüpfungen der Tabellen eingetragen. Dies ist einmal für die &amp;lt;&amp;lt;Modul&amp;gt;&amp;gt;.html wichtig, da dann die Verknüpfungen auch als Link zu der entsprechenden Tabelle erscheinen und damit in SuperX in den entsprechenden Tabellen nicht nur eine Nummer, sondern auch ein aussagekräftiger Text steht. &lt;br /&gt;
In meinem Beispiel verknüpfe ich die Tabellen gang_k_lehr_hs mit der gang_stg_astat. Auch die Reihenfolge spielt hier eine wichtige Rolle. Die erste Tabelle ist die, in der der entsprechende Inhalt und der Schlüssel in einer Spalte stehen. Die zweite Tabelle enthält nur den Schlüssel. Daher wird in der &amp;lt;&amp;lt;Modul&amp;gt;&amp;gt;.xml in der Zweiten Tabelle der entsprechende Fremdschlüssel eingetragen.&lt;br /&gt;
In visibleFields wird die entsprechende Spalte eingetragen, die ausgegeben werden soll. Mit zwei Pipes &amp;quot;||&amp;quot; können auch mehrere Spalten miteinander verbunden werden, wenn z.B. der Key und der Text ausgegeben werden soll.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--gang_stg_astat --&amp;gt;&lt;br /&gt;
&amp;lt;relation from=&amp;quot;gang_k_lehr_hs&amp;quot; to=&amp;quot;gang_stg_astat&amp;quot; delete=&amp;quot;FALSE&amp;quot; displayType=&amp;quot;select&amp;quot; visibleFields=&amp;quot;key_apnr || trim(drucktext)&amp;quot; format=&amp;quot;%s&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;relation-column from=&amp;quot;key_apnr&amp;quot; to=&amp;quot;lehreinheit&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/relation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Beschreibung &amp;quot;relation&amp;quot;:&lt;br /&gt;
*from: Tabelle mit Schlüssel und zugehörigen Text&lt;br /&gt;
*to: Tabelle nur mit Schlüssel&lt;br /&gt;
*delete:&lt;br /&gt;
*displayType:&lt;br /&gt;
*visibleFields: Welche Spalten angezeigt werden sollen (z.B. in dbforms FK-Bezizehungen)&lt;br /&gt;
*format: Format der Anzeige&lt;br /&gt;
&lt;br /&gt;
Zur Beschreibung &amp;quot;relation-column&amp;quot;:&lt;br /&gt;
*from: Key-Spalte der ersten Tabelle&lt;br /&gt;
*to: Key-Spalte der zweiten Tabelle&lt;br /&gt;
&lt;br /&gt;
== Unterbereiche install, uninstall, ETL und upgrade==&lt;br /&gt;
Hier werden Aktionen und Ladeschritte bei der jeweiligen Aktion eines Moduls definiert. Das Hauptaugenmark liegt hier auf &amp;quot;nativeaction&amp;quot; und &amp;quot;loadtable&amp;quot;. Eine &amp;quot;nativeaction wäre z.B.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nativeaction sql=&amp;quot;&amp;quot; scriptfile=&amp;quot;$GANG_PFAD/conf/gang_tabellen_fuellen.sql&amp;quot; &lt;br /&gt;
	database=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird der Inhalt der SQL Datei genommen und ausgeführt. Es ist auch möglich einen SQL Befehl direkt in das Attribut &amp;quot;sql&amp;quot; zu schreiben. Falls erforderlich, kann auch noch als Bedingung die Datenbank angegeben werden (z.B. POSTGRES oder INFORMIX), für die diese &amp;quot;nativeaction&amp;quot; gedacht ist.&lt;br /&gt;
Für &amp;quot;loadtable&amp;quot; ist folgendes Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;loadtable refresh=&amp;quot;false&amp;quot; delimiter=&amp;quot;^&amp;quot; header=&amp;quot;false&amp;quot; tabname=&amp;quot;gang_cifx&amp;quot;&amp;gt;&amp;lt;file path=&amp;quot;$GANG_PFAD/schluesseltabellen/gang_cifx.unl&amp;quot;/&amp;gt;&amp;lt;/loadtable&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier wird der Inhalt einer Tabelle in eine Datei abgespeichert. &amp;quot;delimiter&amp;quot; steht für Feldtrenner, &amp;quot;header&amp;quot;, ob die Spaltenüberschrift übernommen werden soll und &amp;quot;tabname&amp;quot; für den Tabellennamen. in &amp;quot;file&amp;quot; in dem Attribut &amp;quot;path&amp;quot; wird der Pfad mit Dateinamen angegeben, wo der Inhalt abgespeichert werden soll.&lt;br /&gt;
===Spezialität bei ETL===&lt;br /&gt;
In dem ETL Modul sind 6 Stufen eingebaut. Zu beachten ist hier auch, wenn eine Stufe nicht richtig verarbeitet wird, bricht das SKript komplett ab.&lt;br /&gt;
Zu den einzelnen Stufen:&lt;br /&gt;
;Unload: Hier werden die Daten aus dem Vorsystem entladen.&lt;br /&gt;
;Load: Hier werden die Daten in das Datawarehouse geladen.&lt;br /&gt;
;Trans: Hier wird die Transformation durchgeführt. D.h. es wird eine Schlüsselharmonisierung durchgeführt.&lt;br /&gt;
;Aggregation: Hier werden die Hilfstabellen gefüllt.&lt;br /&gt;
;System: Hier wird das Datum aktualisiert, welches die Aktualität angibt.&lt;br /&gt;
;Test: Hier findet die Prüfroutine statt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==dbforms==&lt;br /&gt;
In der Modul-XML werden auch die Vorlagen für die DBforms gemacht. Dabei wird mit XSLT aus der abstrakten Beschreibung des Formulars eine funktionstüchtige JSP-Seite erzeugt. Hier werde ich nur auf die wichtigsten Felder eingehen.&lt;br /&gt;
===Erläuterung der XML-Elemente===&lt;br /&gt;
;Tabellenname:Als erstes sollte der Tabellenname eingetragen werden. Dieser wird hier an mehreren Stellen benötigt. (Bei: &amp;quot;table&amp;quot;, &amp;quot;path&amp;quot;, &amp;quot;customfield&amp;quot;,  ..)&lt;br /&gt;
;path:Zu beachten ist, dass der Tabellenname sowie das Modul in den Pfad (&amp;quot;path&amp;quot;) Angaben auch richtig eingetragen wird.&lt;br /&gt;
;name , caption:Im ersten Block wird meist in den Feldern &amp;quot;name&amp;quot; und &amp;quot;caption&amp;quot; dasselbe eingetragen und zwar eine kurze aber aussagekräftige Bezeichnung der Tabelle. Diese kann auch in dem zweiten Block übernommen werden. Dort gibt es genau dieselben Felder.&lt;br /&gt;
;descpription: Eine ausführlichere Beschreibung der Tabelle wird in das Feld &amp;quot;description&amp;quot; geschrieben. Diese Beschreibung sollte aber auch nicht länger sein als ein normaler Satz.&lt;br /&gt;
; field-selection / customfield :Wenn man &amp;lt;nowiki&amp;gt;&amp;lt;field-selection complete=&amp;quot;true&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt; wählt, dann werden automatisch alle Felder der Tabelle im Formular angezeigt. Wenn Sie nur einige Felder anzeigen wollen, nutzen Sie das Element &amp;lt;nowiki&amp;gt;&amp;lt;customfield&amp;gt;&amp;lt;/nowiki&amp;gt;. Außerdem kann man mit customfield spezielle Layoutanweisungen kombinieren, z.B. Feldgröße.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten (Liste)&amp;quot;&lt;br /&gt;
 table=&amp;quot;gang_stg_astat&amp;quot;&lt;br /&gt;
 path=&amp;quot;/edit/gang/gang_stg_astat_list.jsp&amp;quot;&lt;br /&gt;
 followUp=&amp;quot;&amp;quot;&lt;br /&gt;
 caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten (Liste)&amp;quot;&lt;br /&gt;
 orderBy=&amp;quot;astat&amp;quot;&lt;br /&gt;
 gotoHt=&amp;quot;&amp;quot;&lt;br /&gt;
 helpfile=&amp;quot;&amp;quot;&lt;br /&gt;
 maxRows=&amp;quot;*&amp;quot;&lt;br /&gt;
 mode=&amp;quot;update_insert&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;filters&amp;gt;&lt;br /&gt;
&amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;field-selection  complete=&amp;quot;false&amp;quot;  /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;tid&amp;quot; nullFieldValue=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;astat&amp;quot; type=&amp;quot;label&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield type=&amp;quot;link&amp;quot; name=&amp;quot;Details&amp;quot; path=&amp;quot;/superx/edit/gang/gang_stg_astat_edit.jsp&amp;quot; linkid=&amp;quot;tid&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form name=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten&amp;quot;&lt;br /&gt;
 table=&amp;quot;gang_stg_astat&amp;quot;&lt;br /&gt;
 path=&amp;quot;/edit/gang/gang_stg_astat_edit.jsp&amp;quot;&lt;br /&gt;
 followUp=&amp;quot;&amp;quot;&lt;br /&gt;
 caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten bearbeiten&amp;quot;&lt;br /&gt;
 orderBy=&amp;quot;astat&amp;quot;&lt;br /&gt;
 gotoHt=&amp;quot;tid&amp;quot;&lt;br /&gt;
 helpfile=&amp;quot;&amp;quot;&lt;br /&gt;
 maxRows=&amp;quot;1&amp;quot;&lt;br /&gt;
 mode=&amp;quot;full&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;filters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;field-selection  complete=&amp;quot;false&amp;quot;  /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;tid&amp;quot; nullFieldValue=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;lehreinheit&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;beschreibung&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;astat&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;studienbereich&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;aktiv&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;bund_key&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;Datensatzstatus&amp;quot; type=&amp;quot;include&amp;quot; path=&amp;quot;/edit/gang/datensatzstatus.inc&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Optionen für die Merkmale:&lt;br /&gt;
#mode&lt;br /&gt;
#* full&lt;br /&gt;
#* update_insert&lt;br /&gt;
#* update&lt;br /&gt;
#* insert&lt;br /&gt;
#* ...&lt;br /&gt;
#type&lt;br /&gt;
#*include&lt;br /&gt;
#*link&lt;br /&gt;
#*lable (Nur Bezeichnung)&lt;br /&gt;
#* ...&lt;br /&gt;
#filters&lt;br /&gt;
#* Beispiel: in gang.xml:  form name=&amp;quot;zuordnung&amp;quot;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;filters&amp;gt;&lt;br /&gt;
&amp;lt;filter mandatory=&amp;quot;true&amp;quot; type=&amp;quot;equals&amp;quot;&amp;gt;tid&amp;lt;/filter&amp;gt;&lt;br /&gt;
&amp;lt;/filters&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test der Formulare===&lt;br /&gt;
Die Formulare werden in der Modul-XML-Datei definiert (s.o.). Die JSP-Seiten werden dann generiert, indem man das [[Kernmodul_Shellscripte#module_scripts_create.x|Modulscripte generieren]] ausführt. &lt;br /&gt;
Danach muss man einen Modulupgrade ausführen, damit die Formulare in der Datenbank gespeichert werden. Und dann kann man die Formulare testen, indem man im Menü Administration-&amp;gt; &amp;quot;Tabelle suchen&amp;quot;-&amp;gt; Bearbeiten anklickt. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Bearbeitungsformulare auch im Themenbaum anzeigen wollen, müssen Sie eine Suchmaske vorschalten, in der &lt;br /&gt;
*die Datensätze gefiltert werden können&lt;br /&gt;
*über einen&#039; &#039;&#039;Bearbeiten&#039;&#039;&#039; Button [[Bild:Pencil.gif]](Spaltenname &amp;quot;nextedit&amp;quot;) zugänglich gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Sie z.B. die Maske &amp;quot;Tabelle suchen&amp;quot;, diese ist ein gutes, einfaches Beispiel für eine Kombination aus Suchformular und Bearbeitungsformular.&lt;br /&gt;
&lt;br /&gt;
=== Gestaltung der Formulare ===&lt;br /&gt;
&lt;br /&gt;
; Auswahl aus Schlüsseltabelle&lt;br /&gt;
: Wenn Inhalte zur Auswahl aus einer verknüften Schlüsseltabelle angezeigt werden sollen, müssen folgende Bedingungen erfüllt sein:&lt;br /&gt;
:* Die Beziehung ist als  &amp;lt;data-integrity&amp;gt;  &amp;lt;relation&amp;gt; eingetragen.&lt;br /&gt;
:* in der Relation ist unter &#039;&#039;&#039;visibleFields=&amp;quot;...&amp;quot;&#039;&#039;&#039; das Feld eingetragen, dessen Inhalt an der Oberfläche erscheinen soll.&lt;br /&gt;
&lt;br /&gt;
;Spaltenbeschriftung&lt;br /&gt;
:Wenn nicht der Spaltennahme aus der Tabelle angezeigt werden soll, sondern eine sprechendere Bezeichnung muss:&lt;br /&gt;
:* unter &amp;lt;nowiki&amp;gt; &amp;lt;database&amp;gt; &amp;lt;table&amp;gt; &amp;lt;columns&amp;gt; &amp;lt;column name=&amp;quot;...&amp;quot; &#039;&#039;&#039;description= &amp;quot;...&amp;quot;&#039;&#039;&#039; &amp;gt;&amp;lt;/nowiki&amp;gt; die entsprechende Bezeichnung eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
;Formular in Maske einbinden&lt;br /&gt;
:Wenn durch eintragen von &amp;quot;nextedit&amp;quot; bereits ein Verweis auf das (funktionierende) Formular erstellt wurde, es aber nicht gefunden wird, muss:&lt;br /&gt;
:* zunächst die jsp Seite unter superx\edit\MODULE generiert werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://entwicklerhandbuch.superx-projekt.de/ Entwicklungshandbücher von SuperX]&lt;/div&gt;</summary>
		<author><name>Danielq</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Aufbau_eines_SuperX-Moduls&amp;diff=16552</id>
		<title>Aufbau eines SuperX-Moduls</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Aufbau_eines_SuperX-Moduls&amp;diff=16552"/>
		<updated>2026-09-03T09:10:43Z</updated>

		<summary type="html">&lt;p&gt;Danielq: Die Seite wurde neu angelegt: „ =Einleitung= Dieser Artikel beschreibt den Aufbau eines Moduls in SuperX. Es wird erläutert welche Dateien ein Modul umfasst, wo sie abgelegt und wie sie aufgebaut sind.   == Begriffsklärung == * Installation: SuperX stellt eine Menge von Modulen zur Verfügung, die je nach Bedarf einzeln installiert werden können. Eine Installation ist einmal bei der Installation der HISinOne-BI notwendig. * Upgrade: Ein Upgrade eines Moduls ist notwendig, wenn eine…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=Einleitung=&lt;br /&gt;
Dieser Artikel beschreibt den Aufbau eines Moduls in SuperX. Es wird erläutert welche Dateien ein Modul umfasst, wo sie abgelegt und wie sie aufgebaut sind. &lt;br /&gt;
&lt;br /&gt;
== Begriffsklärung ==&lt;br /&gt;
* Installation: SuperX stellt eine Menge von Modulen zur Verfügung, die je nach Bedarf einzeln installiert werden können. Eine Installation ist einmal bei der Installation der HISinOne-BI notwendig.&lt;br /&gt;
* Upgrade: Ein Upgrade eines Moduls ist notwendig, wenn eine Neue Version oder ein Patch vorhanden ist und die BI-Komponente technisch auf den aktuellen Stand gebracht werden soll. Ein Upgrade ist bei jeder neuen Version, jedem Release, jedem ServicePack und jedem Patch notwendig.&lt;br /&gt;
* Update: Ein Update eines Moduls sorgt dafür, dass aktuelle Daten aus dem Quellsystem in die BI überführt werden. Ein Update wird jede Nacht automatisiert durchgeführt.&lt;br /&gt;
* Laderoutine: Eine Laderoutine führt ein Update durch.&lt;br /&gt;
* In HISinOne-BI wird ein Modul als &amp;quot;BI-Komponente&amp;quot; bezeichnet&lt;br /&gt;
&lt;br /&gt;
= Modul-XML-Datei =&lt;br /&gt;
Es existiert zu jedem Modul eine zentrale Datei:&lt;br /&gt;
 superx/WEB-INF/conf/edustore/db/module/&amp;lt;&amp;lt;modulname&amp;gt;&amp;gt;/conf/&amp;lt;&amp;lt;modulname&amp;gt;&amp;gt;.xml&lt;br /&gt;
Diese Datei enthält das Datenmodell. Aus ihr werden mit XSLT alle Skripte erzeugt, die für die Installation, Deinstallation, das Upgrade und die Laderoutine (Update) einer Komponente benötigt werden. Das XML-Format hat den Vorteil, dass die Skripte dynamisch für PostgreSQL und Informix erzeugt werden können, und dass die Skripte vereinheitlicht werden. Aus dieser Datei werden die Skripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis| Die Modul-Dateien sind sehr groß und daher unübersichtlich. In Eclipse hilft die View &#039;&#039;Outline&#039;&#039; den Überblick zu behalten.}}&lt;br /&gt;
Grundsätzlich ist wichtig, dass zwischen Groß- und Kleinschreibung bei Tabellen- und Feldnamen unterschieden wird, d.h. &amp;quot;Gang&amp;quot; ist nicht gleich &amp;quot;gang&amp;quot;. Außerdem sind zusätzliche Leerzeichen eine häufige Fehlerquelle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;module&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
	&amp;lt;database&amp;gt;&amp;lt;/database&amp;gt;&lt;br /&gt;
	&amp;lt;install&amp;gt;&amp;lt;/install&amp;gt;&lt;br /&gt;
    &amp;lt;uninstall-step&amp;gt;&amp;lt;/uninstall-step&amp;gt;&lt;br /&gt;
    &amp;lt;upgrade&amp;gt;&amp;lt;/upgrade&amp;gt;&lt;br /&gt;
    &amp;lt;etl&amp;gt;&amp;lt;/etl&amp;gt;&lt;br /&gt;
    &amp;lt;olap-system&amp;gt;&amp;lt;/olap-system&amp;gt;&lt;br /&gt;
    &amp;lt;dbforms&amp;gt;&amp;lt;/dbforms&amp;gt;&lt;br /&gt;
&amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;modul&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name:&lt;br /&gt;
* version:&lt;br /&gt;
* sachgebiet_id:&lt;br /&gt;
* systeminfo_id:&lt;br /&gt;
* system:&lt;br /&gt;
* thema:&lt;br /&gt;
* thema_parent:&lt;br /&gt;
&lt;br /&gt;
==Unterbereich database==&lt;br /&gt;
In diesem Unterbereich werden die Tabellen, Views, Themen und Masken integriert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;database&amp;gt;&lt;br /&gt;
   &amp;lt;sachgebiet&amp;gt;&amp;lt;/sachgebiet&amp;gt;&lt;br /&gt;
   &amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
   &amp;lt;views&amp;gt;&amp;lt;/views&amp;gt;&lt;br /&gt;
   &amp;lt;functions&amp;gt;&amp;lt;/functions&amp;gt;&lt;br /&gt;
   &amp;lt;themen&amp;gt;&amp;lt;/themen&amp;gt;&lt;br /&gt;
   &amp;lt;masken&amp;gt;&amp;lt;/masken&amp;gt;&lt;br /&gt;
   &amp;lt;data-integrity&amp;gt;&amp;lt;/data-integrity&amp;gt;&lt;br /&gt;
&amp;lt;/database&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;database&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name:&lt;br /&gt;
* version:&lt;br /&gt;
* system:&lt;br /&gt;
&lt;br /&gt;
===Tabellen===&lt;br /&gt;
Dies ist der Kernbereich.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;columns&amp;gt;&lt;br /&gt;
      &amp;lt;column&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
      ...      &lt;br /&gt;
      &amp;lt;column&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
   &amp;lt;/columns&amp;gt;&lt;br /&gt;
   &amp;lt;primaryKeys&amp;gt;&amp;lt;/primaryKeys&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name: Tabellenname&lt;br /&gt;
* caption: Beschreibung&lt;br /&gt;
* version: Version der Tabelle&lt;br /&gt;
* thema: Das Thema, dem die Tabelle zugeordnet werden kann.&lt;br /&gt;
* typ: Art der Tabelle&lt;br /&gt;
* datenquelle:&lt;br /&gt;
&lt;br /&gt;
Art der Tabelle: &lt;br /&gt;
Per Konvention folgen die meisten Tabellen einem gewissen Schema, darin erfüllen sie eine bestimmte Funktion und sind an der Namensgebung zu erkennen. Beispielhafte Tabellen:&lt;br /&gt;
*Stagingtabelle: zum Sammeln von Daten, die ins Vorsystem geladen wurden&lt;br /&gt;
**Beispielname: tabelle_neu.sql&lt;br /&gt;
*Datentabelle: zur Datenhaltung&lt;br /&gt;
**Beispielname: tabelle.sql&lt;br /&gt;
*Aggregationstabelle: gehören zur Präsentationsschicht, für Berichte&lt;br /&gt;
**Beispielname: tabelle_aggr.sql&lt;br /&gt;
*Cubetabelle: bauen normalerweise auf Aggregationstabellen auf und überführen diese in eine numerische Verschlüsselung, für OLAP&lt;br /&gt;
**Beispielname: tabelle_cube.sql&lt;br /&gt;
*Dimensionstabelle: für Datenblätter, (OLAP)&lt;br /&gt;
**Beispielname: tabelle_cif.sql&lt;br /&gt;
:::tabelle_cifx.sql&lt;br /&gt;
:::dim_bp_tabelle_apnr&lt;br /&gt;
&lt;br /&gt;
Das Element &amp;lt;tt&amp;gt;&amp;lt;description&amp;gt;&amp;lt;/tt&amp;gt; bietet die Möglichkeit eine ausführlichere Beschreibung der Tabelle zu hinterlassen. &amp;lt;br&amp;gt;&lt;br /&gt;
In dem Element &amp;lt;tt&amp;gt;&amp;lt;columns&amp;gt;&amp;lt;/tt&amp;gt; werden die Spalten der Tabelle definiert. Die Attribute des XML-tag &amp;lt;tt&amp;gt;&amp;lt;column&amp;gt;&amp;lt;/tt&amp;gt; sind wie folgt:&lt;br /&gt;
* name: Name der Spalte&lt;br /&gt;
* type: Datentyp&lt;br /&gt;
* size: größe des Datentyps&lt;br /&gt;
* notnull: ob das Feld leergelassen werden darf&lt;br /&gt;
* description: Beschreibung der Spalte (wird in den jsp-Seiten der BI angezeigt)&lt;br /&gt;
* currentlyUsed: Wenn false, wird die Spalte in Datenblatt-Berichten nicht angezeigt.&lt;br /&gt;
* comment: Hier kann noch ein zusätzlicher Kommentar rein (erscheint in der Datenbankdokumentation)&lt;br /&gt;
&lt;br /&gt;
Im Element &amp;quot;primaryKeys&amp;quot; werden die Primärschlüssel der Tabelle eingetragen. Hier gilt folgende Syntax:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;rs&amp;gt;&lt;br /&gt;
   &amp;lt;row&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_cat&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_schem&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;table_name&amp;quot;&amp;gt;gang_stg_astat&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;column_name&amp;quot;&amp;gt;tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;key_seq&amp;quot;&amp;gt;1&amp;lt;/fld&amp;gt;&lt;br /&gt;
      &amp;lt;fld name=&amp;quot;pk_name&amp;quot;&amp;gt;gang_stg_stat_tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
   &amp;lt;/row&amp;gt;&lt;br /&gt;
&amp;lt;/rs&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Elemente &amp;quot;fld name&amp;quot; müssen hier von &amp;quot;rs&amp;quot; und &amp;quot;row&amp;quot; umschlossen werden. Für einen Weiteren &amp;quot;primaryKey&amp;quot; wird ein neues Element &amp;quot;row&amp;quot; in dem selben &amp;quot;rs&amp;quot; geschrieben.&lt;br /&gt;
Zur Beschreibung:&lt;br /&gt;
* table_cat: Databasenamen&lt;br /&gt;
* table_schem: Databasename&lt;br /&gt;
* table_name: Tabellenname in dem der Primarykey steht&lt;br /&gt;
* column_name: Spaltenname vom Primarykey&lt;br /&gt;
* key_seq: Der wievielte Primarykey ist dies von der Tabelle?&lt;br /&gt;
* pk_name: Name vom Primarykey, üblicherweise &amp;lt;&amp;lt;Tabellenname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Spaltenname&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel &amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table name=&amp;quot;gang_stg_astat&amp;quot; caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten&amp;quot; version=&amp;quot;0.1&amp;quot; 	thema=&amp;quot;Studiengänge&amp;quot; typ=&amp;quot;Schlüsseltabelle&amp;quot; datenquelle=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen 	Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
 &amp;lt;columns&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;tid&amp;quot; type=&amp;quot;SERIAL&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;true&amp;quot; description=&amp;quot;Laufnummer&amp;quot; 	isKey=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;lehreinheit&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Lehreinheit&amp;quot;&amp;gt;&amp;lt;comment&amp;gt;(hochschulinterner Schlüssel)&amp;lt;/comment&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;beschreibung&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;150&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Bezeichnung des 	Studienfachs&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;astat&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;3&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Externer Schlüssel&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;studienbereich&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Schlüssel 	Studienbereich&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;aktiv&amp;quot; type=&amp;quot;SMALLINT&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Aktiv&amp;quot;&amp;gt;&amp;lt;comment&amp;gt;Nur aktive Stati 	(1) werden im Studiengangsbaum angezeigt&amp;lt;/comment&amp;gt;&amp;lt;/column&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;bund_key&amp;quot; type=&amp;quot;CHAR&amp;quot; size=&amp;quot;10&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Bundesschlüssel 	Lehreinheit&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;datenquelle&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;1&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Datenquelle für diesen Datensatz&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;erzeugt_am&amp;quot; type=&amp;quot;DATE&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;today()&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;Datum der Erzeugung des Datensatzes&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;geaendert_am&amp;quot; type=&amp;quot;DATE&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; description=&amp;quot;Datum der 	letzten Änderung des Datensatzes&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;geaendert_von_id&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;UserID des Ändernden&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;column name=&amp;quot;erzeugt_von_id&amp;quot; type=&amp;quot;INTEGER&amp;quot; size=&amp;quot;4&amp;quot; default=&amp;quot;&amp;quot; notnull=&amp;quot;false&amp;quot; 	description=&amp;quot;UserID des Erzeugers&amp;quot; currentlyUsed=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/columns&amp;gt;&lt;br /&gt;
 &amp;lt;primaryKeys&amp;gt;&lt;br /&gt;
  &amp;lt;rs&amp;gt;&lt;br /&gt;
   &amp;lt;row&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_cat&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_schem&amp;quot;&amp;gt;superx&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;table_name&amp;quot;&amp;gt;gang_stg_astat&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;column_name&amp;quot;&amp;gt;tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;key_seq&amp;quot;&amp;gt;1&amp;lt;/fld&amp;gt;&lt;br /&gt;
    &amp;lt;fld name=&amp;quot;pk_name&amp;quot;&amp;gt;gang_stg_stat_tid&amp;lt;/fld&amp;gt;&lt;br /&gt;
   &amp;lt;/row&amp;gt;&lt;br /&gt;
  &amp;lt;/rs&amp;gt;&lt;br /&gt;
 &amp;lt;/primaryKeys&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Views===&lt;br /&gt;
Für die Views wird wie bei den Tabellen eine bestimmte Syntax verfolgt. Diese erläutere ich an dem Beispiel der gang_k_sb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;view name=&amp;quot;gang_k_sb&amp;quot; version=&amp;quot;0.1&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;description&amp;gt;View Studienbereiche (Landesschlüssel)&amp;lt;/description&amp;gt;&lt;br /&gt;
   &amp;lt;columns&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;apnr&amp;quot; type =&amp;quot;char&amp;quot; size =&amp;quot;2&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;kurz&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;150&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;druck&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;255&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;lang_1&amp;quot; type =&amp;quot;VARCHAR&amp;quot; size =&amp;quot;255&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;column name=&amp;quot;astat&amp;quot; type =&amp;quot;SMALLINT&amp;quot; size =&amp;quot;2&amp;quot; default =&amp;quot;&amp;quot; notnull =&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/columns&amp;gt;&lt;br /&gt;
&amp;lt;sql dbsystem=&amp;quot;&amp;quot;&amp;gt;&amp;lt;![CDATA[SELECT apnr,kurz,druck ,lang_1,astat FROM gang_cifx where key=3 ]]&amp;gt;&amp;lt;/sql&amp;gt;&lt;br /&gt;
&amp;lt;/view&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Vorgehensweise ähnelt hier der der Tabellen. In &amp;quot;view&amp;quot; wird der Name und die Version des Views eingetragen und in &amp;quot;description&amp;quot; die Beschreibung. In &amp;quot;columns&amp;quot; wird für jede Spalte ein &amp;quot;column&amp;quot; Element angelegt mit den entsprechenden Eigenschaften, wie &amp;quot;name&amp;quot;, &amp;quot;type&amp;quot;, &amp;quot;size&amp;quot; ... . In &amp;quot;sql&amp;quot; wird dann der select des Views eingetragen. Die Besonderheit hier ist das &amp;quot;CDATA&amp;quot;. Durch diesen Befehl wird der eingeschlossene Text nicht von XSLT ausgewertet, sondern direkt übergeben.&lt;br /&gt;
&lt;br /&gt;
===Themen===&lt;br /&gt;
Hier handelt es sich um die Überschriften im Themenbaum, z.B. &amp;quot;Auswertungen zu Studiengängen&amp;quot;. Im Attribut Parent wird das übergeordnete Element definiert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;thema name=&amp;quot;Auswertungen zu Studiengängen&amp;quot; parent=&amp;quot;Studiengänge&amp;quot;&amp;gt;Abfragen zur Akkreditierung&amp;lt;/thema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Masken===&lt;br /&gt;
Hier werden die Masken bzw. Berichte des Moduls definiert. Diese Definitionen werden z.B. genutzt, um die Masken zu installieren oder zu entladen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;maske tid=&amp;quot;25240&amp;quot; name=&amp;quot;Zulassung&amp;quot; thema=&amp;quot;Auswertungen zu Studiengängen&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;src&amp;gt;&amp;lt;path&amp;gt;$GANG_PFAD/masken&amp;lt;/path&amp;gt;&amp;lt;author&amp;gt;D. Quathamer&amp;lt;/author&amp;gt;&amp;lt;lastChange&amp;gt;23.5.2007&amp;lt;/lastChange&amp;gt;&amp;lt;dbsystem&amp;gt;INFORMIX&amp;lt;/dbsystem&amp;gt;&amp;lt;/src&amp;gt;&lt;br /&gt;
   &amp;lt;src&amp;gt;&amp;lt;path&amp;gt;$GANG_PFAD/masken&amp;lt;/path&amp;gt;&amp;lt;author&amp;gt;D. Quathamer&amp;lt;/author&amp;gt;&amp;lt;lastChange&amp;gt;23.5.2007&amp;lt;/lastChange&amp;gt;&amp;lt;dbsystem&amp;gt;POSTGRES&amp;lt;/dbsystem&amp;gt;&amp;lt;/src&amp;gt;&lt;br /&gt;
&amp;lt;/maske&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Data-integrity===&lt;br /&gt;
In der Data-integrity werden die Verknüpfungen der Tabellen eingetragen. Dies ist einmal für die &amp;lt;&amp;lt;Modul&amp;gt;&amp;gt;.html wichtig, da dann die Verknüpfungen auch als Link zu der entsprechenden Tabelle erscheinen und damit in SuperX in den entsprechenden Tabellen nicht nur eine Nummer, sondern auch ein aussagekräftiger Text steht. &lt;br /&gt;
In meinem Beispiel verknüpfe ich die Tabellen gang_k_lehr_hs mit der gang_stg_astat. Auch die Reihenfolge spielt hier eine wichtige Rolle. Die erste Tabelle ist die, in der der entsprechende Inhalt und der Schlüssel in einer Spalte stehen. Die zweite Tabelle enthält nur den Schlüssel. Daher wird in der &amp;lt;&amp;lt;Modul&amp;gt;&amp;gt;.xml in der Zweiten Tabelle der entsprechende Fremdschlüssel eingetragen.&lt;br /&gt;
In visibleFields wird die entsprechende Spalte eingetragen, die ausgegeben werden soll. Mit zwei Pipes &amp;quot;||&amp;quot; können auch mehrere Spalten miteinander verbunden werden, wenn z.B. der Key und der Text ausgegeben werden soll.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--gang_stg_astat --&amp;gt;&lt;br /&gt;
&amp;lt;relation from=&amp;quot;gang_k_lehr_hs&amp;quot; to=&amp;quot;gang_stg_astat&amp;quot; delete=&amp;quot;FALSE&amp;quot; displayType=&amp;quot;select&amp;quot; visibleFields=&amp;quot;key_apnr || trim(drucktext)&amp;quot; format=&amp;quot;%s&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;relation-column from=&amp;quot;key_apnr&amp;quot; to=&amp;quot;lehreinheit&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/relation&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Beschreibung &amp;quot;relation&amp;quot;:&lt;br /&gt;
*from: Tabelle mit Schlüssel und zugehörigen Text&lt;br /&gt;
*to: Tabelle nur mit Schlüssel&lt;br /&gt;
*delete:&lt;br /&gt;
*displayType:&lt;br /&gt;
*visibleFields: Welche Spalten angezeigt werden sollen (z.B. in dbforms FK-Bezizehungen)&lt;br /&gt;
*format: Format der Anzeige&lt;br /&gt;
&lt;br /&gt;
Zur Beschreibung &amp;quot;relation-column&amp;quot;:&lt;br /&gt;
*from: Key-Spalte der ersten Tabelle&lt;br /&gt;
*to: Key-Spalte der zweiten Tabelle&lt;br /&gt;
&lt;br /&gt;
== Unterbereiche install, uninstall, ETL und upgrade==&lt;br /&gt;
Hier werden Aktionen und Ladeschritte bei der jeweiligen Aktion eines Moduls definiert. Das Hauptaugenmark liegt hier auf &amp;quot;nativeaction&amp;quot; und &amp;quot;loadtable&amp;quot;. Eine &amp;quot;nativeaction wäre z.B.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nativeaction sql=&amp;quot;&amp;quot; scriptfile=&amp;quot;$GANG_PFAD/conf/gang_tabellen_fuellen.sql&amp;quot; &lt;br /&gt;
	database=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird der Inhalt der SQL Datei genommen und ausgeführt. Es ist auch möglich einen SQL Befehl direkt in das Attribut &amp;quot;sql&amp;quot; zu schreiben. Falls erforderlich, kann auch noch als Bedingung die Datenbank angegeben werden (z.B. POSTGRES oder INFORMIX), für die diese &amp;quot;nativeaction&amp;quot; gedacht ist.&lt;br /&gt;
Für &amp;quot;loadtable&amp;quot; ist folgendes Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;loadtable refresh=&amp;quot;false&amp;quot; delimiter=&amp;quot;^&amp;quot; header=&amp;quot;false&amp;quot; tabname=&amp;quot;gang_cifx&amp;quot;&amp;gt;&amp;lt;file path=&amp;quot;$GANG_PFAD/schluesseltabellen/gang_cifx.unl&amp;quot;/&amp;gt;&amp;lt;/loadtable&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier wird der Inhalt einer Tabelle in eine Datei abgespeichert. &amp;quot;delimiter&amp;quot; steht für Feldtrenner, &amp;quot;header&amp;quot;, ob die Spaltenüberschrift übernommen werden soll und &amp;quot;tabname&amp;quot; für den Tabellennamen. in &amp;quot;file&amp;quot; in dem Attribut &amp;quot;path&amp;quot; wird der Pfad mit Dateinamen angegeben, wo der Inhalt abgespeichert werden soll.&lt;br /&gt;
===Spezialität bei ETL===&lt;br /&gt;
In dem ETL Modul sind 6 Stufen eingebaut. Zu beachten ist hier auch, wenn eine Stufe nicht richtig verarbeitet wird, bricht das SKript komplett ab.&lt;br /&gt;
Zu den einzelnen Stufen:&lt;br /&gt;
;Unload: Hier werden die Daten aus dem Vorsystem entladen.&lt;br /&gt;
;Load: Hier werden die Daten in das Datawarehouse geladen.&lt;br /&gt;
;Trans: Hier wird die Transformation durchgeführt. D.h. es wird eine Schlüsselharmonisierung durchgeführt.&lt;br /&gt;
;Aggregation: Hier werden die Hilfstabellen gefüllt.&lt;br /&gt;
;System: Hier wird das Datum aktualisiert, welches die Aktualität angibt.&lt;br /&gt;
;Test: Hier findet die Prüfroutine statt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==dbforms==&lt;br /&gt;
In der Modul-XML werden auch die Vorlagen für die DBforms gemacht. Dabei wird mit XSLT aus der abstrakten Beschreibung des Formulars eine funktionstüchtige JSP-Seite erzeugt. Hier werde ich nur auf die wichtigsten Felder eingehen.&lt;br /&gt;
===Erläuterung der XML-Elemente===&lt;br /&gt;
;Tabellenname:Als erstes sollte der Tabellenname eingetragen werden. Dieser wird hier an mehreren Stellen benötigt. (Bei: &amp;quot;table&amp;quot;, &amp;quot;path&amp;quot;, &amp;quot;customfield&amp;quot;,  ..)&lt;br /&gt;
;path:Zu beachten ist, dass der Tabellenname sowie das Modul in den Pfad (&amp;quot;path&amp;quot;) Angaben auch richtig eingetragen wird.&lt;br /&gt;
;name , caption:Im ersten Block wird meist in den Feldern &amp;quot;name&amp;quot; und &amp;quot;caption&amp;quot; dasselbe eingetragen und zwar eine kurze aber aussagekräftige Bezeichnung der Tabelle. Diese kann auch in dem zweiten Block übernommen werden. Dort gibt es genau dieselben Felder.&lt;br /&gt;
;descpription: Eine ausführlichere Beschreibung der Tabelle wird in das Feld &amp;quot;description&amp;quot; geschrieben. Diese Beschreibung sollte aber auch nicht länger sein als ein normaler Satz.&lt;br /&gt;
; field-selection / customfield :Wenn man &amp;lt;nowiki&amp;gt;&amp;lt;field-selection complete=&amp;quot;true&amp;quot; /&amp;gt;&amp;lt;/nowiki&amp;gt; wählt, dann werden automatisch alle Felder der Tabelle im Formular angezeigt. Wenn Sie nur einige Felder anzeigen wollen, nutzen Sie das Element &amp;lt;nowiki&amp;gt;&amp;lt;customfield&amp;gt;&amp;lt;/nowiki&amp;gt;. Außerdem kann man mit customfield spezielle Layoutanweisungen kombinieren, z.B. Feldgröße.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten (Liste)&amp;quot;&lt;br /&gt;
 table=&amp;quot;gang_stg_astat&amp;quot;&lt;br /&gt;
 path=&amp;quot;/edit/gang/gang_stg_astat_list.jsp&amp;quot;&lt;br /&gt;
 followUp=&amp;quot;&amp;quot;&lt;br /&gt;
 caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten (Liste)&amp;quot;&lt;br /&gt;
 orderBy=&amp;quot;astat&amp;quot;&lt;br /&gt;
 gotoHt=&amp;quot;&amp;quot;&lt;br /&gt;
 helpfile=&amp;quot;&amp;quot;&lt;br /&gt;
 maxRows=&amp;quot;*&amp;quot;&lt;br /&gt;
 mode=&amp;quot;update_insert&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;filters&amp;gt;&lt;br /&gt;
&amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;field-selection  complete=&amp;quot;false&amp;quot;  /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;tid&amp;quot; nullFieldValue=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;astat&amp;quot; type=&amp;quot;label&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield type=&amp;quot;link&amp;quot; name=&amp;quot;Details&amp;quot; path=&amp;quot;/superx/edit/gang/gang_stg_astat_edit.jsp&amp;quot; linkid=&amp;quot;tid&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form name=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten&amp;quot;&lt;br /&gt;
 table=&amp;quot;gang_stg_astat&amp;quot;&lt;br /&gt;
 path=&amp;quot;/edit/gang/gang_stg_astat_edit.jsp&amp;quot;&lt;br /&gt;
 followUp=&amp;quot;&amp;quot;&lt;br /&gt;
 caption=&amp;quot;Studienfächer (amtlich) zu Lehreinheiten bearbeiten&amp;quot;&lt;br /&gt;
 orderBy=&amp;quot;astat&amp;quot;&lt;br /&gt;
 gotoHt=&amp;quot;tid&amp;quot;&lt;br /&gt;
 helpfile=&amp;quot;&amp;quot;&lt;br /&gt;
 maxRows=&amp;quot;1&amp;quot;&lt;br /&gt;
 mode=&amp;quot;full&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;description&amp;gt;Zuordnung amtlicher Studienfächer einer Hochschule zu internen Lehreinheiten.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;filters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/filters&amp;gt;&lt;br /&gt;
&amp;lt;field-selection  complete=&amp;quot;false&amp;quot;  /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;tid&amp;quot; nullFieldValue=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;lehreinheit&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;beschreibung&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;astat&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;studienbereich&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;aktiv&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;bund_key&amp;quot; nullFieldValue=&amp;quot;&amp;quot; visibleSize=&amp;quot;30&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;customfield name=&amp;quot;Datensatzstatus&amp;quot; type=&amp;quot;include&amp;quot; path=&amp;quot;/edit/gang/datensatzstatus.inc&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Optionen für die Merkmale:&lt;br /&gt;
#mode&lt;br /&gt;
#* full&lt;br /&gt;
#* update_insert&lt;br /&gt;
#* update&lt;br /&gt;
#* insert&lt;br /&gt;
#* ...&lt;br /&gt;
#type&lt;br /&gt;
#*include&lt;br /&gt;
#*link&lt;br /&gt;
#*lable (Nur Bezeichnung)&lt;br /&gt;
#* ...&lt;br /&gt;
#filters&lt;br /&gt;
#* Beispiel: in gang.xml:  form name=&amp;quot;zuordnung&amp;quot;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;filters&amp;gt;&lt;br /&gt;
&amp;lt;filter mandatory=&amp;quot;true&amp;quot; type=&amp;quot;equals&amp;quot;&amp;gt;tid&amp;lt;/filter&amp;gt;&lt;br /&gt;
&amp;lt;/filters&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test der Formulare===&lt;br /&gt;
Die Formulare werden in der Modul-XML-Datei definiert (s.o.). Die JSP-Seiten werden dann generiert, indem man das [[Skriptbasierte Datenbank- und Modulinstallation - HISinOne-BI#Module-Scripts-Create mit Ant]] ausführt. &lt;br /&gt;
Danach muss man einen Modulupgrade ausführen, damit die Formulare in der Datenbank gespeichert werden. Und dann kann man die Formulare testen, indem man im Menü Administration-&amp;gt; &amp;quot;Tabelle suchen&amp;quot;-&amp;gt; Bearbeiten anklickt. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Bearbeitungsformulare auch im Themenbaum anzeigen wollen, müssen Sie eine Suchmaske vorschalten, in der &lt;br /&gt;
*die Datensätze gefiltert werden können&lt;br /&gt;
*über einen&#039; &#039;&#039;Bearbeiten&#039;&#039;&#039; Button [[Bild:Pencil.gif]](Spaltenname &amp;quot;nextedit&amp;quot;) zugänglich gemacht werden.&lt;br /&gt;
&lt;br /&gt;
Sie z.B. die Maske &amp;quot;Tabelle suchen&amp;quot;, diese ist ein gutes, einfaches Beispiel für eine Kombination aus Suchformular und Bearbeitungsformular.&lt;br /&gt;
&lt;br /&gt;
=== Gestaltung der Formulare ===&lt;br /&gt;
&lt;br /&gt;
; Auswahl aus Schlüsseltabelle&lt;br /&gt;
: Wenn Inhalte zur Auswahl aus einer verknüften Schlüsseltabelle angezeigt werden sollen, müssen folgende Bedingungen erfüllt sein:&lt;br /&gt;
:* Die Beziehung ist als  &amp;lt;data-integrity&amp;gt;  &amp;lt;relation&amp;gt; eingetragen.&lt;br /&gt;
:* in der Relation ist unter &#039;&#039;&#039;visibleFields=&amp;quot;...&amp;quot;&#039;&#039;&#039; das Feld eingetragen, dessen Inhalt an der Oberfläche erscheinen soll.&lt;br /&gt;
&lt;br /&gt;
;Spaltenbeschriftung&lt;br /&gt;
:Wenn nicht der Spaltennahme aus der Tabelle angezeigt werden soll, sondern eine sprechendere Bezeichnung muss:&lt;br /&gt;
:* unter &amp;lt;nowiki&amp;gt; &amp;lt;database&amp;gt; &amp;lt;table&amp;gt; &amp;lt;columns&amp;gt; &amp;lt;column name=&amp;quot;...&amp;quot; &#039;&#039;&#039;description= &amp;quot;...&amp;quot;&#039;&#039;&#039; &amp;gt;&amp;lt;/nowiki&amp;gt; die entsprechende Bezeichnung eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
;Formular in Maske einbinden&lt;br /&gt;
:Wenn durch eintragen von &amp;quot;nextedit&amp;quot; bereits ein Verweis auf das (funktionierende) Formular erstellt wurde, es aber nicht gefunden wird, muss:&lt;br /&gt;
:* zunächst die jsp Seite unter superx\edit\MODULE generiert werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://entwicklerhandbuch.superx-projekt.de/ Entwicklungshandbücher von SuperX]&lt;/div&gt;</summary>
		<author><name>Danielq</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:portal_verwalten_layouts_liste.png&amp;diff=16544</id>
		<title>Datei:portal verwalten layouts liste.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:portal_verwalten_layouts_liste.png&amp;diff=16544"/>
		<updated>2026-09-03T06:32:25Z</updated>

		<summary type="html">&lt;p&gt;Danielq: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Danielq</name></author>
	</entry>
</feed>