<?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=Andrek</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=Andrek"/>
	<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php/Spezial:Beitr%C3%A4ge/Andrek"/>
	<updated>2026-08-04T15:09:13Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16388</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16388"/>
		<updated>2026-08-04T07:55:26Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&lt;br /&gt;
[[image:logobutton_maintenance2b.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==Ziel und Überblick==&lt;br /&gt;
Die hier bereitgestellten Skripte ermöglichen es, in der BI-Umgebung von HISinOne und in Zukunft auch von SuperX (aktuell können die Scripte in SuperX leider noch nicht verwendet werden) Modul-Updates und -Upgrades zuverlässig über die Shell auszuführen – automatisiert per Cronjob oder manuell.  Sie orientieren sich bewusst am bisherigen Vorgehen aus SuperX, wurden jedoch erweitert:&lt;br /&gt;
&lt;br /&gt;
* Ausführung der BI-Modul-Updates/-Upgrades über Java (&#039;&#039;ComponentAdminCLI&#039;&#039;).&lt;br /&gt;
* Vollständige Protokollierung in Logdateien.&lt;br /&gt;
* Optional: Protokollierung der Läufe in der Tabelle &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Automatischer Mailversand über ein konfigurierbares Mailprogramm.&lt;br /&gt;
* Optional: Erkennen interner Fehler im Batch-Job (auch wenn Java Exitcode 0 liefert).&lt;br /&gt;
* Möglichkeit, Logdateien automatisch an Mails anzuhängen (erfolgreiche und fehlerhafte Module).&lt;br /&gt;
&lt;br /&gt;
==Installation aus dem git Repository==&lt;br /&gt;
&lt;br /&gt;
Führen Sie folgenden Shell-Befehl aus:&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
&lt;br /&gt;
Die weitere Konfiguration wird im Folgenden beschrieben. Alle Einstellungen erfolgen zentral in der Datei &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;, die als Template &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; ausgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
==Umgebungsvariablen in der BI_ENV==&lt;br /&gt;
&lt;br /&gt;
===BI_ENV.sam – Template und lokale BI_ENV===&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; wird als Muster ausgeliefert. &lt;br /&gt;
&lt;br /&gt;
Sie muss vor Ort:&lt;br /&gt;
&lt;br /&gt;
# in &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; kopiert/umbenannt werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp BI_ENV.sam BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# an die lokalen Gegebenheiten angepasst werden (Pfade, Module, Mailadressen usw.).&lt;br /&gt;
# mit restriktiven Rechten versehen werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Skripte binden diese Datei später mit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /pfad/zu/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Bedeutung der Variablen===&lt;br /&gt;
Im Folgenden die wichtigsten Variablen, die angepasst werden müssen.&lt;br /&gt;
&lt;br /&gt;
====Java-Konfiguration====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
export JAVA_HOME&lt;br /&gt;
&lt;br /&gt;
JRE_HOME=$JAVA_HOME&lt;br /&gt;
export JRE_HOME&lt;br /&gt;
&lt;br /&gt;
PATH=$JAVA_HOME/bin:$PATH&lt;br /&gt;
export PATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Variablen stellen sicher, dass die BI-Jobs mit dem vorgesehenen Java (empfohlen: Java 17) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Java-Optionen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;-Xmx1520M -Djava.awt.headless=true ... --add-opens ...&amp;quot;&lt;br /&gt;
export JAVA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pfade zur SuperX-BI-Installation====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
export WEBAPP&lt;br /&gt;
&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
export SUPERX_DIR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Pfade müssen an lokale Tomcat-Installation und SuperX-Verzeichnisstruktur angepasst werden.&lt;br /&gt;
&lt;br /&gt;
====Modulsteuerung====&lt;br /&gt;
Für die Update- und Upgrade-Skripte werden die zu bearbeitenden Module festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export BI_UPDATE_MODULES=&amp;quot;sos kenn zul&amp;quot;&lt;br /&gt;
export BI_UPGRADE_MODULES=&amp;quot;kenn&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis:  &lt;br /&gt;
Die Modulkürzel müssen klein geschrieben sein (z. B. &amp;lt;code&amp;gt;sos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kenn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;zul&amp;lt;/code&amp;gt;) und mit Leerzeichen getrennt aufgelistet werden.&lt;br /&gt;
&lt;br /&gt;
====Logging====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LOGPFAD=$WEBAPP/WEB-INF/logs&lt;br /&gt;
export LOGPFAD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Logpfad werden u. a. folgende Dateien erzeugt:&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_update.log&amp;lt;/code&amp;gt; – Sammellog des Updates&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_upgrade.log&amp;lt;/code&amp;gt; – Sammellog des Upgrades&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_update.log&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_upgrade.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Java-Batch-Jobs erzeugen ergänzende Logs in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Mailversand====&lt;br /&gt;
Folgende Variablen steuern Empfänger und Format der Benachrichtigungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export ERRORMAIL=&amp;quot;admin@hs.de&amp;quot;&lt;br /&gt;
export LOGMAIL=&amp;quot;$ERRORMAIL&amp;quot;&lt;br /&gt;
#export LOGMAIL=&amp;quot;admin@hs.de kollege@hs.de&amp;quot;   # mehrere Empfänger möglich&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ERRORMAIL&amp;lt;/code&amp;gt; – Empfänger für Fehlermails  &lt;br /&gt;
* &amp;lt;code&amp;gt;LOGMAIL&amp;lt;/code&amp;gt; – Empfänger für Erfolgs- und Statusmails  &lt;br /&gt;
Mehrere Adressen werden per Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Mailprogramm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAILPROG=&amp;quot;s-nail --account=test1 -S ttycharset=utf-8 -S sendcharset=utf-8&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Betreffzeilen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAIL_BETREFF_UPDATE=&amp;quot;BI Job Update&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_UPGRADE=&amp;quot;BI Job Upgrade&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_ERFOLGREICH=&amp;quot; - Erfolgreich&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_FEHLER=&amp;quot; - Fehler&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Datei:Kernmodul Regelbetrieb Mailversand.png|rand|links]]&lt;br /&gt;
&lt;br /&gt;
So könnten die Mails aussehen.&lt;br /&gt;
&lt;br /&gt;
====Steuerung der Log-Anhänge====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# error  = Logs nur bei Fehlern anhängen&lt;br /&gt;
# always = Logs immer anhängen (Erfolg + Fehler)&lt;br /&gt;
export MAIL_ATTACH_LOGS_MODE=&amp;quot;error&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optionale Prüfung der Modul-Logs====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# true  = zusätzlich Modul-Log auf interne Fehler prüfen&lt;br /&gt;
# false = nur Exitcode des Java-Calls verwenden&lt;br /&gt;
export CHECK_JOBLOG_FOR_ERRORS=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gerade bei dem Java Aufruf von ComponentAdminCLI empfehlenswert, da dieser aktuell noch trotz &amp;lt;code&amp;gt;status: FAILED&amp;lt;/code&amp;gt; oft Exitcode 0 liefert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Updates=&lt;br /&gt;
&lt;br /&gt;
==modules_update.sh – Hauptskript==&lt;br /&gt;
Dieses Skript führt alle Module aus &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; nacheinander aus.&lt;br /&gt;
&lt;br /&gt;
Ablauf:&lt;br /&gt;
&lt;br /&gt;
# Startcheck: Sind &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LOGPFAD&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; gesetzt?&lt;br /&gt;
# Falls verfügbar: DB-Protokollierung via &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Für jedes Modul:&lt;br /&gt;
## Logdatei anlegen&lt;br /&gt;
## Start in &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt; protokollieren (update_id = -10000)&lt;br /&gt;
## Java-Update starten:  &lt;br /&gt;
   &amp;lt;code&amp;gt;ComponentAdminCLI -e &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
## Optional: Modul-Logdatei nach internen Fehlern durchsuchen&lt;br /&gt;
## Erfolg:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;SUCCESS_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10000)&lt;br /&gt;
## Fehler:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;ERROR_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10001)&lt;br /&gt;
## Zuletzt: Java-Joblogs aus &amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt; ermitteln&lt;br /&gt;
&lt;br /&gt;
# Nach Abschluss aller Module:&lt;br /&gt;
## Erfolgs- oder Fehlermail versenden&lt;br /&gt;
## Anhänge abhängig von &amp;lt;code&amp;gt;MAIL_ATTACH_LOGS_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==modules_update_cron.sh – Wrapper für Cron==&lt;br /&gt;
Damit Updates regelmäßig durchgeführt werden können, existiert ein einfaches Wrapper-Skript.&lt;br /&gt;
&lt;br /&gt;
Vorgehen:&lt;br /&gt;
&lt;br /&gt;
# Beispieldatei kopieren:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp modules_update_cron.sh.sam modules_update_cron.sh&lt;br /&gt;
chmod +x modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Pfade zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; und zum Update-Skript anpassen.&lt;br /&gt;
# Cronjob eintragen, z. B. werktags um 18 Uhr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
0 18 * * 1-5 /pfad/zu/modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhaltlich:&lt;br /&gt;
* Laden der &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
* Start des Skripts &amp;lt;code&amp;gt;modules_update.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Upgrades=&lt;br /&gt;
&lt;br /&gt;
==modules_upgrade.sh – Hauptskript==&lt;br /&gt;
Das Upgrade-Skript entspricht dem Update-Skript, unterscheidet sich aber in folgenden Punkten:&lt;br /&gt;
&lt;br /&gt;
* Es wird **manuell** ausgeführt – kein Cronjob vorgesehen.&lt;br /&gt;
* Es verwendet &amp;lt;code&amp;gt;BI_UPGRADE_MODULES&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Das eigentliche Upgrade erfolgt über:  &lt;br /&gt;
  &amp;lt;code&amp;gt;ComponentAdminCLI -u &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nach Abschluss des Upgrades erfolgt ein Mailversand analog zum Update-Skript.&lt;br /&gt;
&lt;br /&gt;
Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/update&lt;br /&gt;
./modules_upgrade.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorher muss zu Beginn des Skripts der Pfad zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; eingetragen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /pfad/zur/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Modulverwaltung=&lt;br /&gt;
&lt;br /&gt;
==Modulkürzel==&lt;br /&gt;
Die folgenden Modulkürzel sind in einer typischen BI-Installation relevant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 kuerzel |                         name                          &lt;br /&gt;
---------+-------------------------------------------------------&lt;br /&gt;
 astat   | Amtliche Statistik                                &lt;br /&gt;
 bau     | Gebäude, Räume, Flächen                           &lt;br /&gt;
 cob     | Kostenrechnung                                    &lt;br /&gt;
 erfolg  | Studienverlauf                                    &lt;br /&gt;
 fin     | Finanzrechnung                                    &lt;br /&gt;
 gang    | Studiengänge                                      &lt;br /&gt;
 ivs     | Inventar                                          &lt;br /&gt;
 kenn    | Kennzahlen                                        &lt;br /&gt;
 kern    | Administration                                    &lt;br /&gt;
 lm      | Leistungsmonitoring                               &lt;br /&gt;
 man     | Management                                        &lt;br /&gt;
 prom    | Promovierende                                     &lt;br /&gt;
 res     | Forschung                                         &lt;br /&gt;
 sos     | Studierende, Prüfungen                            &lt;br /&gt;
 sva     | Personal, Stellen                                 &lt;br /&gt;
 zul     | Bewerbung, Zulassung                              &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die aktiven Module der eigenen Installation können mit folgendem SQL abgefragt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT V.his_system AS kuerzel,&lt;br /&gt;
       S.name&lt;br /&gt;
  FROM db_version V&lt;br /&gt;
  JOIN systeminfo S&lt;br /&gt;
    ON S.tid = V.systeminfo_id&lt;br /&gt;
 ORDER BY 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
Das bereitgestellte Migrationsskript ermöglicht die Umstellung einer bestehenden SuperX-Installation auf die empfohlene Webapp-Struktur.&lt;br /&gt;
&lt;br /&gt;
Dabei können sowohl klassische Installationen mit separatem DB-Verzeichnis als auch bestehende Webapp-Installationen migriert werden. Die Migration kann je nach Anwendungsfall vollständig oder ausschließlich für das DB-Verzeichnis durchgeführt werden.&lt;br /&gt;
Hier eine Anleitung &amp;quot;in short&amp;quot;, wenn Sie bisher das &amp;quot;klasssische&amp;quot; Layout genutzt haben (also Unix Benutzer &amp;quot;superx&amp;quot;, Installation in &amp;quot;/home/superx&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
 #Script ausführen und neues ENV laden:&lt;br /&gt;
 cd BI_Maintenance/webapps_migration&lt;br /&gt;
 ./migrate_superx_webapp.sh&lt;br /&gt;
&lt;br /&gt;
Das Skript liest die bestehende Installation anhand der vorhandenen SQL_ENV-Datei ein und erzeugt daraus die gewünschte Zielstruktur. Details können in der Konfigurationsdatei &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
konfiguriert, siehe folgende Dokumentation.&lt;br /&gt;
&lt;br /&gt;
==Zielstruktur==&lt;br /&gt;
&lt;br /&gt;
Die Webapp wird standardmäßig nicht direkt im Tomcat-Webapp-Verzeichnis abgelegt, sondern unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch bleibt die Installation unabhängig von der verwendeten Tomcat-Distribution und kann einfacher per Git, rsync oder Modulupdate gepflegt werden.&lt;br /&gt;
&lt;br /&gt;
Die zugehörige DB-Struktur befindet sich anschließend unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx/WEB-INF/conf/edustore/db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Anbindung==&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff des Tomcat-Servers auf die Webapp gibt es grundsätzlich zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* Verwendung eines symbolischen Links vom Tomcat-Webapp-Verzeichnis auf die eigentliche Webapp.&lt;br /&gt;
* Anpassung der Tomcat-Konfiguration (z. B. appBase oder Context-Konfiguration).&lt;br /&gt;
&lt;br /&gt;
Empfohlen wird die Verwendung eines symbolischen Links.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/srv/tomcat/webapps/superx&lt;br /&gt;
 -&amp;gt; /home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wichtige Variablen==&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen erfolgen in der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TARGET_WEBAPP===&lt;br /&gt;
&lt;br /&gt;
Definiert das Zielverzeichnis der Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Owner: superx&lt;br /&gt;
Group: tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE===&lt;br /&gt;
&lt;br /&gt;
Steuert die Art der Migration.&lt;br /&gt;
&lt;br /&gt;
Vollständige Migration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur Migration des DB-Verzeichnisses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Migration des DB-Verzeichnisses==&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis kann entweder kopiert oder verschoben werden.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=copy===&lt;br /&gt;
&lt;br /&gt;
Das bestehende DB-Verzeichnis bleibt erhalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür rsync verwendet.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=move===&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis wird verschoben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür mv verwendet. Ist das Zielverzeichnis bereits vorhanden und&lt;br /&gt;
&amp;lt;code&amp;gt;ALLOW_EXISTING_TARGET_DB=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; gesetzt, wird das vorhandene Ziel-DB-Verzeichnis vor dem Verschieben vollständig ersetzt. Damit verbleiben keine alten Dateien im Ziel.&lt;br /&gt;
&lt;br /&gt;
Dies ist der empfohlene Standard für die Migration klassischer SuperX-Installationen und vermeidet unnötigen zusätzlichen Speicherbedarf.&lt;br /&gt;
&lt;br /&gt;
==Automatische Anpassung der SQL_ENV==&lt;br /&gt;
&lt;br /&gt;
Nach der Migration kann die SQL_ENV-Datei automatisch angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden insbesondere folgende Variablen aktualisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_DIR&lt;br /&gt;
WEBAPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird sichergestellt, dass folgende Einstellung vorhanden ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umask 002&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor der Änderung wird automatisch eine Sicherungskopie der SQL_ENV-Datei angelegt.&lt;br /&gt;
&lt;br /&gt;
==Benutzer und Gruppen==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Variablen steuern, welchem Benutzer und welcher Gruppe die Ziel-Webapp nach der Migration zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle Dateien und Verzeichnisse der Ziel-Webapp werden diesem Benutzer zugeordnet, sofern die Rechteverwaltung aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Gruppe wird für alle Dateien und Verzeichnisse der Ziel-Webapp verwendet.&lt;br /&gt;
&lt;br /&gt;
Durch das gesetzte setgid-Bit auf den Verzeichnissen erben neu angelegte Dateien und Unterverzeichnisse automatisch diese Gruppe.&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Migration kann sowohl als root als auch – unter bestimmten Voraussetzungen – direkt als Anwendungsbenutzer ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=auto===&lt;br /&gt;
&lt;br /&gt;
Dies ist die empfohlene Standardeinstellung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript entscheidet abhängig vom aktuellen Benutzer automatisch, ob ein Besitzerwechsel erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als root====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript als root ausgeführt, werden Besitzer und Gruppe der Ziel-Webapp auf die konfigurierten Werte gesetzt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $WEBAPP_USER:$WEBAPP_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird auch das übergeordnete Verzeichnis der Webapp (z. B. /home/superx/webapps) auf die gleichen Besitz- und Gruppenrechte gesetzt.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als WEBAPP_USER====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript direkt als der konfigurierte WEBAPP_USER ausgeführt und ist dieser Benutzer Mitglied der konfigurierten WEBAPP_GROUP, wird kein chown ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Stattdessen verwendet das Skript bei Bedarf ein chgrp, um die Gruppenzugehörigkeit der Dateien anzupassen.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall kann die Migration häufig vollständig ohne root-Rechte durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als anderer Benutzer====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript weder als root noch als WEBAPP_USER mit passender Gruppenmitgliedschaft ausgeführt, bricht das Skript mit einer entsprechenden Fehlermeldung ab.&lt;br /&gt;
&lt;br /&gt;
===ADD_WEBAPP_USER_TO_GROUP===&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript die Gruppenmitgliedschaft des Zielbenutzers automatisch anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ADD_WEBAPP_USER_TO_GROUP=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierfür sind root-Rechte erforderlich.&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Symlink==&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript den Symlink für den Tomcat automatisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
===CREATE_TOMCAT_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_WEBAPPS_DIR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_WEBAPPS_DIR=&amp;quot;/srv/tomcat/webapps&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_CONTEXT_NAME===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_CONTEXT_NAME=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===REPLACE_EXISTING_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
Bestehende Symlinks können bei Bedarf automatisch ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPLACE_EXISTING_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normale Dateien oder Verzeichnisse werden dabei niemals automatisch gelöscht.&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsprüfungen==&lt;br /&gt;
&lt;br /&gt;
Vor Beginn der Migration werden verschiedene Sicherheitsprüfungen durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Unter anderem wird geprüft:&lt;br /&gt;
&lt;br /&gt;
* Existiert die SQL_ENV-Datei?&lt;br /&gt;
* Existiert der konfigurierte Benutzer?&lt;br /&gt;
* Existiert die konfigurierte Gruppe?&lt;br /&gt;
* Sind Quell- und Zielverzeichnis identisch?&lt;br /&gt;
* Würde eine Verzeichnisverschachtelung entstehen?&lt;br /&gt;
* Befindet sich SUPERX_DIR bereits innerhalb von WEBAPP?&lt;br /&gt;
&lt;br /&gt;
Wird erkannt, dass die Installation bereits der neuen Struktur entspricht, bricht das Skript standardmäßig ab.&lt;br /&gt;
&lt;br /&gt;
===FORCE_ALREADY_MIGRATED===&lt;br /&gt;
&lt;br /&gt;
In Ausnahmefällen kann diese Prüfung übersteuert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FORCE_ALREADY_MIGRATED=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte nur verwendet werden, wenn die Auswirkungen bekannt sind.&lt;br /&gt;
&lt;br /&gt;
==Typischer Ablauf==&lt;br /&gt;
&lt;br /&gt;
# Laden der migrate_superx.conf&lt;br /&gt;
# Laden der bestehenden SQL_ENV&lt;br /&gt;
# Ermitteln von SUPERX_DIR, WEBAPP und DB-Verzeichnis&lt;br /&gt;
# Sicherheitsprüfungen&lt;br /&gt;
# Optionales Stoppen des Tomcat-Dienstes&lt;br /&gt;
# Kopieren der Webapp&lt;br /&gt;
# Kopieren oder Verschieben des DB-Verzeichnisses&lt;br /&gt;
# Anpassen der SQL_ENV&lt;br /&gt;
# Setzen von Besitzern, Gruppen und Rechten&lt;br /&gt;
# Optionales Erzeugen des Tomcat-Symlinks&lt;br /&gt;
# Optionales Starten des Tomcat-Dienstes&lt;br /&gt;
&lt;br /&gt;
==Empfohlene Standardkonfiguration==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
* Standardziel ist /home/superx/webapps/superx.&lt;br /&gt;
* Die Tomcat-Anbindung kann über einen Symlink erfolgen.&lt;br /&gt;
* Bei WEBAPP_USER=superx und WEBAPP_GROUP=tomcat kann die Migration häufig ohne root erfolgen, sofern der Benutzer Mitglied der Gruppe tomcat ist.&lt;br /&gt;
* Root wird nur benötigt, wenn Besitzer geändert, Benutzer oder Gruppen angepasst oder Systemkonfigurationen verändert werden müssen.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16372</id>
		<title>Kernmodul Komponentenverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16372"/>
		<updated>2026-07-14T12:29:28Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Komponentenverwaltung im Kernmodul kann je nach Aufgabe über die Browseroberfläche oder über Shell-Skripte erfolgen.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden Installation, Deinstallation, Aktualisierung und Upgrade von Modulen überwiegend über Skripte in der Shell durchgeführt. Ab Kernmodul 6.0 steht zusätzlich eine Komponentenverwaltung über die Browseroberfläche zur Verfügung. Diese Browseroberfläche wird im Folgenden als SuperX Komponentenverwaltung beschrieben.&lt;br /&gt;
&lt;br /&gt;
Die SuperX Komponentenverwaltung ist vor allem für die Ausführung und Überwachung von ETL-Prozessen, für Modul-Upgrades sowie für die Installation von im Dateisystem vorhandenen Modulen vorgesehen. Die Deinstallation von Modulen erfolgt weiterhin über die Shell-Skripte.&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ist daher in zwei Bereiche gegliedert: Zuerst wird die Nutzung der SuperX Komponentenverwaltung beschrieben. Anschließend folgt die Dokumentation zur Installation und Verwaltung von Modulen mit Skripten.&lt;br /&gt;
&lt;br /&gt;
= Komponentenverwaltung im Browser: SuperX Komponentenverwaltung =&lt;br /&gt;
Die SuperX Komponentenverwaltung dient dazu, ETL-Prozesse der SuperX-Module über die Weboberfläche auszuführen und zu überwachen. Sie bietet eine zentrale Übersicht über installierte und installierbare Module, verfügbare Aktionen, Versionsinformationen, Datenquellen, den aktuellen Lauf sowie technische Zusatzinformationen für die Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der Schwerpunkt der Oberfläche liegt auf dem täglichen Betrieb: Anwenderinnen und Anwender können Laderoutinen starten, den aktuellen Stand eines Laufs verfolgen und bei Bedarf die Log-Ausgabe einsehen. Technische Detail- und Diagnoseinformationen stehen ebenfalls zur Verfügung, sind aber vor allem für Administratorinnen und Administratoren oder den Support gedacht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Uebersicht.png|Gesamtübersicht der SuperX Komponentenverwaltung mit Modulübersicht, Filterbereich, Aktionsbuttons und aktuellem Lauf.]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Oberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche besteht im Wesentlichen aus folgenden Bereichen:&lt;br /&gt;
&lt;br /&gt;
* Filterbereich&lt;br /&gt;
* Modulübersicht&lt;br /&gt;
* Aktionsbuttons pro Modul&lt;br /&gt;
* Bereich „Aktueller Lauf“&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
* Details-Bereich&lt;br /&gt;
* Diagnose-Bereich&lt;br /&gt;
&lt;br /&gt;
Über den Filterbereich kann die angezeigte Modulliste eingeschränkt werden. Die Modulübersicht zeigt die wichtigsten Informationen zu den vorhandenen Modulen. Über die Aktionsbuttons können ETL-Prozesse gestartet werden. Der Bereich „Aktueller Lauf“ zeigt den zuletzt gestarteten oder aktuell laufenden Prozess an.&lt;br /&gt;
&lt;br /&gt;
Die Bereiche „Details“ und „Diagnose“ liefern zusätzliche technische Informationen. Sie sind hilfreich für Supportfälle, aber für die normale Bedienung nicht zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Modulübersicht ==&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt die installierten sowie die im Dateisystem erkannten installierbaren Module mit ihren wichtigsten Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Spalte&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Modul&lt;br /&gt;
| Zeigt den Namen und das technische Kürzel des Moduls, zum Beispiel „Administration“ mit dem Kürzel „kern“ oder „Kennzahlen“ mit dem Kürzel „kenn“.&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Zeigt, ob das Modul installiert ist. Nicht installierte, aber im Dateisystem verfügbare Module können ebenfalls erscheinen.&lt;br /&gt;
|-&lt;br /&gt;
| Versionen&lt;br /&gt;
| Zeigt die installierte Version und die verfügbare Version des Moduls.&lt;br /&gt;
|-&lt;br /&gt;
| Letztes Update&lt;br /&gt;
| Zeigt den Zeitpunkt des letzten bekannten Updates.&lt;br /&gt;
|-&lt;br /&gt;
| Datenquelle&lt;br /&gt;
| Zeigt, aus welcher Datenquelle das Modul seine Daten bezieht oder auf welcher Datenbasis der ETL-Prozess arbeitet.&lt;br /&gt;
|-&lt;br /&gt;
| DB-Verbindung&lt;br /&gt;
| Zeigt, ob die Verbindung zur Datenbank bzw. Datenquelle aktuell erreichbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| Aktionen&lt;br /&gt;
| Zeigt die verfügbaren Aktionen für das jeweilige Modul. Bei nicht installierten Modulen wird anstelle von „Upgrade“ die Aktion „Installieren“ angeboten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Versionen ===&lt;br /&gt;
&lt;br /&gt;
In der Spalte „Versionen“ werden zwei Werte angezeigt:&lt;br /&gt;
&lt;br /&gt;
* installierte Version&lt;br /&gt;
* verfügbare Version&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der aktuell in der Datenbank installiert ist. Die verfügbare Version beschreibt den ausgelieferten Stand des Moduls, der in der Installation vorliegt.&lt;br /&gt;
&lt;br /&gt;
Wenn die verfügbare Version höher ist als die installierte Version, sollte in der Regel ein Upgrade des Moduls durchgeführt werden. Dadurch werden die Datenstrukturen des Moduls auf den ausgelieferten Stand aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Datenquelle ===&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle gibt an, aus welchem System ein Modul seine Daten bezieht oder auf welcher Datenbasis es arbeitet.&lt;br /&gt;
&lt;br /&gt;
SuperX ist ein Data Warehouse. Viele Module übernehmen Daten aus externen vorsystemen. Beispiele für solche Datenquellen sind:&lt;br /&gt;
&lt;br /&gt;
* cob für Kostenrechnung&lt;br /&gt;
* mbs für Finanzrechnung, Inventar oder Gebäude/Räume/Flächen&lt;br /&gt;
* sva für Personal- und Stelleninformationen&lt;br /&gt;
* hisinone bei entsprechend angebundenen Modulen&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es Module, die auf bereits in SuperX vorhandene Daten zurückgreifen. In solchen Fällen wird als Datenquelle „SuperX“ angezeigt. Das betrifft vor allem Module, die modulübergreifend, auswertungsorientiert oder spezialisiert auf vorhandene SuperX-Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
Beispiele hierfür können sein:&lt;br /&gt;
&lt;br /&gt;
* kenn für Kennzahlen&lt;br /&gt;
* man für Managementberichte&lt;br /&gt;
* erfolg für Studienverlauf bzw. Erfolgsbetrachtungen&lt;br /&gt;
* gang für Studiengänge&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle „SuperX“ bedeutet also nicht, dass keine Daten verarbeitet werden. Sie zeigt an, dass die Verarbeitung auf Daten basiert, die bereits im SuperX-System vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Aktionen ausführen ==&lt;br /&gt;
&lt;br /&gt;
Die verfügbaren Aktionen hängen vom jeweiligen Modul ab. Nicht jedes Modul unterstützt alle Aktionen. Wenn eine Aktion nicht verfügbar ist, wird der entsprechende Button nicht angezeigt oder ist nicht aktiv.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ermittelt die ausführbaren Aktionen aus den verfügbaren technischen Jobs des jeweiligen Moduls. Falls die Jobliste nicht vollständig geliefert wird, können die grundsätzlichen Angaben aus der Komponentenliste als Fallback genutzt werden. Dadurch können Standardaktionen wie „Unload“, „Update“ oder „Unload &amp;amp; Update“ trotzdem angeboten werden, wenn sie für das Modul grundsätzlich vorgesehen sind.&lt;br /&gt;
&lt;br /&gt;
Vor dem Start einer Aktion erscheint ein Bestätigungsdialog. Dort werden die geplante Aktion, der Modulname und das technische Kürzel angezeigt. Technische REST-Aufrufe werden im normalen Dialog nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktionsbuttons.png|Modulzeile mit den Aktionsbuttons Unload, Update, Unload &amp;amp; Update sowie Installieren bzw. Upgrade.]]&lt;br /&gt;
&lt;br /&gt;
=== Unload ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ entlädt Daten aus einem angebundenen Vorsystem, sofern für das Modul ein Vorsystem angebunden ist.&lt;br /&gt;
&lt;br /&gt;
Der Unload dient dazu, Daten aus der jeweiligen Datenquelle bereitzustellen, damit sie anschließend in SuperX verarbeitet werden können. Je nach Modul und Einrichtung kann der Unload auch dazu dienen, Daten für eine weitere Verarbeitung oder Übertragung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Update“ lädt vorhandene Rohdaten in SuperX ein und führt die Hauptladeroutine des Moduls aus.&lt;br /&gt;
&lt;br /&gt;
Dies ist in vielen Fällen die wichtigste Aktion für den täglichen Betrieb. Beim Update werden die vorhandenen Rohdaten verarbeitet und die zugehörigen SuperX-Tabellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Unload &amp;amp; Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload &amp;amp; Update“ führt zuerst den Unload und anschließend das Update aus.&lt;br /&gt;
&lt;br /&gt;
Diese Aktion ist sinnvoll, wenn neue Daten aus einem angebundenen Vorsystem entladen und direkt anschließend in SuperX verarbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Installieren ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Installieren“ wird angezeigt, wenn ein Modul im Dateisystem vorhanden, aber noch nicht installiert ist.&lt;br /&gt;
&lt;br /&gt;
Die Installation legt die benötigten Datenbankobjekte, Abfragen und weiteren Modulbestandteile an. Nach erfolgreicher Installation erscheint das Modul als installiert. An derselben Stelle wird dann statt „Installieren“ die Aktion „Upgrade“ angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Upgrade“ führt eine Modulaktualisierung durch. Dabei werden die Datenstrukturen des Moduls auf den ausgelieferten Stand gebracht.&lt;br /&gt;
&lt;br /&gt;
Ein Upgrade sollte ausgeführt werden, wenn eine neue verfügbare Version angezeigt wird oder wenn dies im Rahmen eines Modulupdates erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
== Sonderfall Kennzahlen-Modul ==&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ ist die Verarbeitung etwas anders als bei typischen Modulen mit externem Vorsystem.&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist hier in der Regel „SuperX“. Das bedeutet, dass die Kennzahlen nicht primär aus einem externen Fremdsystem entladen werden. Stattdessen basiert die Verarbeitung auf Daten, die bereits in SuperX vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Für den täglichen Betrieb ist beim Kennzahlen-Modul daher häufig vor allem die Aktion „Update“ relevant. Dabei werden die Kennzahlen auf Basis der vorhandenen SuperX-Daten neu berechnet bzw. aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Je nach Einrichtung können beim Kennzahlen-Modul auch „Unload“ oder „Unload &amp;amp; Update“ angeboten werden. Die Oberfläche richtet sich dabei nach den verfügbaren Jobs bzw. nach den Modulangaben aus der Komponentenliste.&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ kann beim Kennzahlen-Modul eine andere Bedeutung haben als bei klassischen Vorsystem-Modulen. Sie kann dazu dienen, Kennzahlen für ein anderes System bereitzustellen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* für ein hochschulübergreifendes SuperX&lt;br /&gt;
* für Vergleichssysteme&lt;br /&gt;
* für landesweite Auswertungen oder Berichtssysteme&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Aktion „Unload &amp;amp; Update“ ist beim Kennzahlen-Modul daher nicht immer die wichtigste Aktion. In vielen Installationen wird das Update gezielt über die Oberfläche ausgeführt, während Export- oder Übertragungsprozesse über automatische Abläufe wie Cronjobs gesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Lauf ==&lt;br /&gt;
&lt;br /&gt;
Der Bereich „Aktueller Lauf“ zeigt Informationen zum zuletzt gestarteten oder aktuell laufenden ETL-Prozess.&lt;br /&gt;
&lt;br /&gt;
Typische Informationen sind:&lt;br /&gt;
&lt;br /&gt;
* JobExecutionId&lt;br /&gt;
* Name des gestarteten Jobs&lt;br /&gt;
* Status&lt;br /&gt;
* Fortschritt&lt;br /&gt;
* Anzahl der ausgeführten Schritte&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktueller_Lauf.png|Bereich „Aktueller Lauf“ mit JobExecutionId, Status, Fortschritt und Log-Ausgabe.]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
Der Status zeigt den aktuellen Zustand des Laufs. Häufige Statuswerte sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| STARTING&lt;br /&gt;
| Der Lauf wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
| STARTED&lt;br /&gt;
| Der Lauf wurde gestartet und wird ausgeführt.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETED&lt;br /&gt;
| Der Lauf wurde erfolgreich abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| FAILED&lt;br /&gt;
| Der Lauf ist mit einem Fehler abgebrochen.&lt;br /&gt;
|-&lt;br /&gt;
| STOPPED&lt;br /&gt;
| Der Lauf wurde gestoppt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fortschritt ===&lt;br /&gt;
&lt;br /&gt;
Der Fortschritt zeigt, wie viele Prozessschritte bereits abgearbeitet wurden. Er ist als technischer bzw. prozessbezogener Fortschritt zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Fortschrittswert ist keine genaue Zeitprognose.&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann schnell auf eine hohe Prozentzahl springen und dort längere Zeit stehen bleiben, wenn ein einzelner Verarbeitungsschritt besonders lange dauert. Umgekehrt können viele kleine Schritte sehr schnell nacheinander abgeschlossen werden. Die Prozentanzeige beschreibt daher den Abarbeitungsstand der Prozessschritte, nicht die tatsächlich vergangene oder verbleibende Zeit.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann bereits 80 % anzeigen, obwohl noch ein größerer Verarbeitungsschritt aussteht. Ebenso kann ein Lauf am Anfang längere Zeit bei einer niedrigen Prozentzahl stehen bleiben, wenn ein früher Prozessschritt besonders umfangreich ist.&lt;br /&gt;
&lt;br /&gt;
== Log-Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe zeigt technische Informationen zum ausgeführten ETL-Prozess. Sie kann helfen, den Ablauf nachzuvollziehen und bei Problemen erste Hinweise zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe ist vor allem für Supportfälle hilfreich. Für eine tiefergehende Fehleranalyse sind in der Regel administrative Kenntnisse erforderlich. Je nach Fehler müssen zusätzlich Serverlogs, Datenbankinhalte, Moduldateien oder Systemkonfigurationen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Log-Ausgabe nicht sofort erscheint, kann sie über „Log laden“ erneut abgefragt werden. Gerade bei umfangreichen Läufen kann es vorkommen, dass die Log-Ausgabe erst kurze Zeit nach Abschluss vollständig verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
== Typische Nutzungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Bereits vorhandene Rohdaten verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Rohdaten bereits vorhanden sind und lediglich erneut verarbeitet werden sollen, wird in der Regel die Aktion „Update“ verwendet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Rohdaten liegen bereits im System vor&lt;br /&gt;
* Berechnungen oder Aggregationen sollen neu ausgeführt werden&lt;br /&gt;
* die SuperX-Tabellen des Moduls sollen aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Daten aus einem Vorsystem übernehmen und verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn neue Daten aus einem externen Vorsystem übernommen und anschließend verarbeitet werden sollen, kann die Aktion „Unload &amp;amp; Update“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden zunächst die Daten aus dem Vorsystem entladen. Anschließend werden die Daten durch das Update in SuperX verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload &amp;amp; Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nur Daten aus einem Vorsystem entladen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten aus einem Vorsystem entladen werden sollen, ohne direkt anschließend die Laderoutine auszuführen, kann die Aktion „Unload“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul installieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn ein Modul im Dateisystem vorhanden, aber noch nicht installiert ist, wird in der Modulzeile die Aktion „Installieren“ angezeigt.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Installieren&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul auf den ausgelieferten Stand aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue verfügbare Version angezeigt wird, sollte ein Upgrade geprüft bzw. durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen innerhalb von SuperX aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ werden die Daten in der Regel aus SuperX selbst bezogen. Wenn die Kennzahlen neu berechnet oder aktualisiert werden sollen, ist häufig die Aktion „Update“ die passende Aktion.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen für ein anderes System bereitstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Kennzahlen für ein anderes System bereitgestellt werden sollen, kann beim Kennzahlen-Modul die Aktion „Unload“ relevant sein.&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel für hochschulübergreifende Auswertungen, Vergleichssysteme oder landesweite Berichtssysteme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Nutzung ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung der SuperX Komponentenverwaltung sollten folgende Punkte beachtet werden:&lt;br /&gt;
&lt;br /&gt;
* Ein laufender Prozess sollte nicht unnötig mehrfach parallel gestartet werden.&lt;br /&gt;
* Vor dem Start von Installieren, Upgrade, Unload, Update oder Unload &amp;amp; Update sollte der Bestätigungsdialog geprüft werden.&lt;br /&gt;
* Nach einem Lauf kann die Modulübersicht über „Aktualisieren“ neu geladen werden.&lt;br /&gt;
* Die Prozentanzeige ist kein Zeitindikator, sondern beschreibt den Fortschritt der Prozessschritte.&lt;br /&gt;
* Bei Fehlern sollte zuerst der Status und anschließend die Log-Ausgabe geprüft werden.&lt;br /&gt;
* Für tiefergehende Fehleranalysen sollten Administratorinnen und Administratoren oder technische Ansprechpartner einbezogen werden.&lt;br /&gt;
* Bei neuen verfügbaren Modulversionen sollte geprüft werden, ob ein Upgrade auszuführen ist.&lt;br /&gt;
&lt;br /&gt;
== Details-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Über den Button „Details“ können zusätzliche technische Informationen zu einem Modul angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Der Details-Bereich ist vor allem für fortgeschrittene Benutzerinnen und Benutzer, Administratorinnen und Administratoren oder den Support gedacht. Er kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* technische Modulkennung&lt;br /&gt;
* Systeminfo-ID&lt;br /&gt;
* technische Jobnamen&lt;br /&gt;
* verfügbare Jobs&lt;br /&gt;
* hergeleitete Startaktionen&lt;br /&gt;
* Rohdaten der Schnittstelle&lt;br /&gt;
* zusätzliche technische Moduldetails&lt;br /&gt;
&lt;br /&gt;
Für den normalen Betrieb ist der Details-Bereich meist nicht erforderlich. Er ist vor allem dann hilfreich, wenn bei Rückfragen oder Supportfällen genaue technische Informationen benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diagnose-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist eine technische Hilfsfunktion zur Prüfung der SuperX Komponentenverwaltung. Er ist global angeordnet und nicht auf ein einzelnes Modul beschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Diagnose führt keine Reparaturen automatisch aus. Sie zeigt technische Informationen, mögliche Auffälligkeiten und Hinweise an. Zusätzlich können SQL- oder Shell-Hinweise angezeigt werden, die bei Bedarf von Administratorinnen und Administratoren kopiert und manuell ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* Erreichbarkeit der REST-Schnittstellen&lt;br /&gt;
* Webapp-, Tomcat- und Java-Informationen&lt;br /&gt;
* Pfade und Dateisysteminformationen&lt;br /&gt;
* Festplattenspeicher&lt;br /&gt;
* Datenbankinformationen&lt;br /&gt;
* Prüfung der Log-Tabelle&lt;br /&gt;
* Versionsquellen&lt;br /&gt;
* bekannte Fehlerbilder&lt;br /&gt;
* kopierbare SQL- und Shell-Hinweise&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist vor allem für Administratorinnen und Administratoren oder technische Ansprechpartner gedacht. Für normale Anwenderinnen und Anwender ist er in der Regel nur dann relevant, wenn ein Fehler auftritt oder technische Informationen weitergegeben werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Administratorhinweise ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält ergänzende technische Hinweise. Er richtet sich vor allem an Administratorinnen und Administratoren sowie an den technischen Support.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft der Versionsinformationen ===&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche zeigt eine installierte und eine verfügbare Version an.&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der in der Datenbank installiert ist. Falls die REST-Schnittstelle keinen Wert liefert, kann die Version aus der Tabelle &amp;lt;code&amp;gt;db_version&amp;lt;/code&amp;gt; gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die verfügbare Version beschreibt den ausgelieferten Stand im Dateisystem. Sie kann aus der Modul-XML-Datei gelesen werden. Für normale Module liegt diese Datei typischerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/&amp;lt;modul&amp;gt;/conf/&amp;lt;modul&amp;gt;.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul gilt ein Sonderfall. Die Modul-XML liegt unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/install/conf/kern.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann eine Datei &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; im jeweiligen Modulverzeichnis als Fallback verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Log-Tabelle ===&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe der SuperX Komponentenverwaltung verwendet eine Datenbanktabelle für die Joblogs. Wenn diese Tabelle fehlt oder unvollständig ist, kann die Log-Ausgabe fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Struktur der Tabelle ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS job_log&lt;br /&gt;
(&lt;br /&gt;
   job_instance_id  bigint   NOT NULL,&lt;br /&gt;
   log              text,&lt;br /&gt;
   status           text&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX IF NOT EXISTS ix_job_log1&lt;br /&gt;
ON public.job_log USING btree (job_instance_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese SQL-Anweisungen sollten nicht automatisch durch die Oberfläche ausgeführt werden. Sie dienen als Hinweis für Administratorinnen und Administratoren und müssen bei Bedarf manuell geprüft und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Typische technische Fehlerbilder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehlerbild&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/jobLog/{id}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Die Tabelle &amp;lt;code&amp;gt;job_log&amp;lt;/code&amp;gt; fehlt, ist unvollständig oder der Logeintrag ist noch nicht verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/job/list/{modul}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Moduldateien fehlen, Pfade stimmen nicht oder die Webapp verwendet nicht den erwarteten Dateistand.&lt;br /&gt;
|-&lt;br /&gt;
| REST-Endpunkt liefert HTTP 404&lt;br /&gt;
| Der Context-Pfad, die Webapp, der Port oder ein Tunnel zeigt möglicherweise nicht auf die erwartete Anwendung.&lt;br /&gt;
|-&lt;br /&gt;
| Log erscheint erst nach erneutem Laden&lt;br /&gt;
| Der ETL-Lauf ist abgeschlossen, aber der Logeintrag war beim ersten Abruf noch nicht vollständig verfügbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Die SuperX Komponentenverwaltung stellt eine zentrale Oberfläche zur Ausführung und Überwachung von ETL-Prozessen bereit. Für den täglichen Betrieb stehen vor allem die Aktionen „Unload“, „Update“ und „Unload &amp;amp; Update“ im Vordergrund. Zusätzlich können Module installiert oder per Upgrade auf den ausgelieferten Stand gebracht werden.&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt den Installationsstatus, Versionsinformationen, Datenquellen und Datenbankverbindungen. Der Bereich „Aktueller Lauf“ informiert über den Fortschritt eines gestarteten Prozesses. Die Log-Ausgabe liefert technische Zusatzinformationen und kann bei der Fehleranalyse helfen.&lt;br /&gt;
&lt;br /&gt;
Details und Diagnose ergänzen die Oberfläche um technische Informationen für Support- und Administrationsfälle. Sie unterstützen bei der Analyse, führen aber keine automatischen Reparaturen aus.&lt;br /&gt;
&lt;br /&gt;
= Installation und Verwaltung in der Shell mit Skripten =&lt;br /&gt;
&lt;br /&gt;
== Installation von Modulen ==&lt;br /&gt;
Das Kernmodul enthält außer Administrationsabfragen und Tabellen keinerlei Inhalte. Die Inhalte werden in Form von Modulen hinzugefügt. Dazu gibt es vorgefertigte [[Kernmodul_Shellscripte#Modulverwaltung|Installationsscripte]].&lt;br /&gt;
&lt;br /&gt;
=== Architektur von SuperX-Modulen ===&lt;br /&gt;
Die folgende Abbildung zeigt die Architektur von Modulen ab Beispiel vom HISCOB-Modul:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Ein Modul besteht auf Datenbankseite aus Abfragen, Hilfstabellen, Datentabellen und Schlüsseltabellen (sowie Prozeduren).&lt;br /&gt;
Auf Webserver-Seite können auch XSL-Stylesheets vorhanden sein.&lt;br /&gt;
| [[Bild:modularchitektur_cob.png|417x307px]]&lt;br /&gt;
|}&lt;br /&gt;
Die Abbildung zeigt, dass ein Modul eigene Komponenten nutzt, aber auch auf Teile des Kernmoduls zugreift, z.B. das Orgranigramm - dies macht SuperX zu einem integrierten System. Neben dem Organigramm sind alle anderen Komponenten des Kernmoduls natürlich betroffen, z.B. Themenbaum, Userrechte.&lt;br /&gt;
Die Ordnerstruktur eines Moduls spiegelt die Komponenten des Systems wieder. Es gibt je ein Verzeichnis für datentabellen, schluesseltabellen und hilfstabellen. &lt;br /&gt;
Die Installation eines Moduls ist in der Dokumentation des jeweiligen Moduls näher beschrieben. Module, die auf dem Kernmodul 2.1 oder höher basieren, haben einen einheitlichen Aufbau.&lt;br /&gt;
&lt;br /&gt;
=== Modulscripte im Kernmodul ===&lt;br /&gt;
Seit Version 2.1 werden die Datenbankschemata und Scripte der Module in einem einheitlichen Format zusammengestellt und in einer Datei $SUPERX_DIR/db/module/$MODULNAME/conf/$MODULNAME.xml gespeichert. Das XML-Format hat den Vorteil, dass die Scripte dynamisch für Postgres und Informix erzeugt werden können, und dass die Scripte vereinheitlicht werden. Aus dieser Datei werden die Scripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen. Die folgende Abbildung zeigt das Vorgehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Aus der xml-Datei werden die jeweiligen Scripte für die Installation, den Update, die Extraktions-, Transformations- und Ladescripte (ETL) und die Deinstallation erzeugt.&lt;br /&gt;
| [[Bild:modulscripte_erzeugen.png|417x371px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Modul-Scripte liegen als Shellscripte im Verzeichnis $SUPERX_DIR/db/bin, und sind an [[Kernmodul_Shellscripte#Modulverwaltung|anderer Stelle]] im Detail erläutert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| module_install.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_install.x sos $SOS_PFAD&lt;br /&gt;
| Installiert ein Modul, d.h. erzeugt die Tabellen, Views, Funktionen und Abfragen. Die Abfragen werden in den Themenbaum eingehängt. &lt;br /&gt;
|-&lt;br /&gt;
| module_etl.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_etl.x sos $SOS_PFAD&lt;br /&gt;
| Aktualisiert das Modul, d.h. lädt die Rohdaten, Transformiert sie, und aggregiert die Hilfstabellen. Fehler werden in eine Log-Datei geschrieben, diese kann dann per Mail an einen Admin versandt werden. Wenn das Script erfolgreich durchläuft, wird die Tabelle systeminfo aktualisiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Script wird nicht direkt als Cronjob aufgerufen, sondern von einem Shellscript, das die Umgebungsvariablen und Parameter setzt, z.B. cob_update.x.&lt;br /&gt;
|-&lt;br /&gt;
| module_drop.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_ drop.x sos $SOS_PFAD&lt;br /&gt;
| Entfernt das Modul bzw. die Tabellen, Views, Funktionen und Abfragen.&lt;br /&gt;
|-&lt;br /&gt;
| module_scripts_create.x -name- -pfad- -Datenbanksystem(optional, INFORMIX, POSTGRES)- -Versionsnr.-&lt;br /&gt;
| Erzeugt via XSL-Transformation die jeweiligen Scripte, die in den obigen Scripten aufgerufen werden, z.B. bau_install_ids.sql für das Installationsscript des Baumoduls beim Informix Dynamic Server.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den operativen Scripten erzeugt module_scripts_create.x auch html-Dateien zur Dokumentation eines Moduls in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/-Modulname-.html&lt;br /&gt;
(auch als rtf-Datei zu Einbindung in Modul-Dokumentationen) sowie zur Schnittstelle in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/rohdaten/-Modulname-_unload.html&lt;br /&gt;
Darüber hinaus werden auch DBForms-Formulare erzeugt.&lt;br /&gt;
&lt;br /&gt;
=== Installation eines Moduls: Allgemeines Vorgehen ===&lt;br /&gt;
Das Vorgehen bei der Installation eines Moduls ist standardisiert. Im folgenden eine Kurzbeschreibung, weiter unten finden Sie das Vorgehen am Beispiel des ZUL-Moduls im Detail.&lt;br /&gt;
* Entpacken Sie das Modul in $SUPERX_DIR&lt;br /&gt;
* Erweiterung der Umgebung in der Datei $SUPERX_DIR/db/bin/SQL_ENV: fügen Sie den Inhalt der jew. Beispieldatei SQL_ENV_-Modulname-.sam in der SQL_ENV an, wenn noch nicht vorhanden, und ändern Sie ggf. Email-Adressen für log- und Fehlermails.&lt;br /&gt;
* Entladen der Rohdaten; auch hier müssen vorher Umgebungsvariablen zum Vorsystem angepasst werden&amp;lt;br /&amp;gt;&lt;br /&gt;
(Datei $-Modulname-_LOAD_PFAD/-Modulname-_ENV), hier liegt ebenfalls eine *.sam-Datei vor&lt;br /&gt;
* Kopieren der Rohdaten nach -Modulpfad-/rohdaten. Neuere SuperX-Module haben dafür vorgefertigte Scripte mit dem Namen -Modulname-_copy.x (z.B. zul_copy.x)&lt;br /&gt;
* Installieren Sie das Modul mit -Modulname-_erzeugen.x, z.B. mit  zul_modul_erzeugen.x&lt;br /&gt;
* Wenn die Installation erfolgreich war, können Sie das Modul aktualisieren mit&amp;lt;br /&amp;gt;&lt;br /&gt;
-Modulname-_update.x (ggf. mit Parametern)&amp;lt;br /&amp;gt;&lt;br /&gt;
z.B. mit &lt;br /&gt;
 zul__update.x&lt;br /&gt;
d.h. die ETL-Prozesse werden gestartet (s.u.).&lt;br /&gt;
* Wenn das Modul erfolgreich aktualisiert ist, wird eine Prüfprozedur gestartet, die die Daten plausibilisiert. Fehler und Warnungen finden Sie in der Datei $-Modulname-_ERRORDAT.&lt;br /&gt;
* Starten Sie Tomcat neu. Wenn Tomcat auf einem separaten Server installiert ist, müssen Sie vorher die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml dorthin übertragen. &lt;br /&gt;
* Schritt 7 wird bei jedem SuperX-Update wiederholt. Nun muss der Entladerhythmus geplant werden, und die Cronjobs werden eingerichtet. Es gibt eine Musterdatei $SUPERX_DIR/db/module/-MODULNAME-/-MODUL-_update_cron.x.sam , benennen sie diese um nach -MODUL-_update_cron.x und fügen Sie das Script in die crontab ein. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines zum Laden ====&lt;br /&gt;
Zunächst müssen die Rohdaten aus dem Vorsystem entladen werden. &lt;br /&gt;
Für das Entladen gibt es ferner zwei Modi: Das &amp;quot;Pull&amp;quot;-Verfahren und das &amp;quot;Push&amp;quot;-Verfahren. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Pull&amp;quot;-&#039;&#039;&#039;Verfahren wird einer Benutzerkennung auf dem SuperX-Rechner Zugriffsrecht auf die SOSPOS-Datenbank gegeben, und die Daten werden via TCP/IP aus dem Basissystem entladen. Bei APP / HISinOne als Quellsystem ist &amp;quot;Pull&amp;quot; das Standardvorgehen. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Push&amp;quot;-&#039;&#039;&#039;Verfahren werden die Entladescripte auf den SOSPOS-Rechner kopiert und dort von einer Benutzerkennung auf dem SOSPOS-Rechner ausgeführt. Die Rohdaten müssen dann auf den SuperX-Rechner kopiert werden. Dieses Verfahren klappt bei Informix unter Unix problemlos, bei Entladen aus Postgres müsste das komplette SuperX-Kernmodul installiert werden. &lt;br /&gt;
Am einfachsten ist immer das &amp;quot;Pull&amp;quot;-Verfahren, das mit fast allen Quellsystemen funktioniert und wenig Konfiguration auf dem Quellsystem erfordert. Aufgrund von Sicherheitsvorkehrungen oder Netz-Infrastrukturen wählen aber viele Hochschulen das &amp;quot;Push&amp;quot;-Verfahren. Da derzeit Informix /Unix die gängigste Plattform an Hochschulen ist, ist dies auch kein Problem. &lt;br /&gt;
&lt;br /&gt;
==== Einrichtung der Entladescripte ====&lt;br /&gt;
Im Push-Verfahren btw. unter SuperX können Sie mitgelieferte Shellscripte nutzen. Das folgende Beispiel des ZUL-Moduls zeigt das Vorgehen:&lt;br /&gt;
Die Entladescripte liegen im Verzeichnis $SUPERX_DIR/db/module/zul/rohdaten und lauten je nach Systemversion: &lt;br /&gt;
 zul_unload.x&lt;br /&gt;
&lt;br /&gt;
Die Scripte laufen nur, wenn die entsprechenden Umgebungsvariablen in der Datei ZUL_ENV (im gleichen Verzeichnis, ein Muster liegt vor in ZUL_ENV.sam) korrekt gesetzt sind, benennen Sie die Musterdatei um nach ZUL_ENV und tragen die richtigen Umgebungsvariablen ein, z.B. den Pfad für $INFORMIXDIR. &lt;br /&gt;
&#039;&#039;&#039;ZUL_ENV Die Umgebung für Entladescripte aus ZUL-GX(Auszug)&#039;&#039;&#039; &lt;br /&gt;
 ##Pfad für Entladedaten:&lt;br /&gt;
 ZUL_PFAD=.; export ZUL_PFAD &lt;br /&gt;
 ##hier muss Unterverzeichnis unl existieren!&lt;br /&gt;
&lt;br /&gt;
 In der ZUL_ENV müssen außerdem folgende Umgebungsvariablen gesetzt werden (defaults sind bereits vorbelegt, aber hier und da müssen Sie sicher ran): &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Informix gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXDIR&lt;br /&gt;
| Home-Verzeichnis von Informix &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXSERVER&lt;br /&gt;
| Name des Informixservers &lt;br /&gt;
|-&lt;br /&gt;
| ONCONFIG&lt;br /&gt;
| Name der onconfig, wenn auf dem SOS-Rechner mehrere Informix-Instanzen laufen &lt;br /&gt;
|-&lt;br /&gt;
| CLIENT_LOCALE&lt;br /&gt;
| Sprachumgebung (wichtig fürs Entladen von Datumsformaten) &lt;br /&gt;
|-&lt;br /&gt;
| SERVER_LOCALE&lt;br /&gt;
| dito &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Postgres gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| PGDATESTYLE&lt;br /&gt;
| Datumsformat &amp;quot;German&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| PGPORT&lt;br /&gt;
| Port vom Postgres-Server, standardmäßig 5432 &lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname oder IP-Adresse vom Postgres-Server &lt;br /&gt;
|-&lt;br /&gt;
| PGUSER&lt;br /&gt;
| Benutzerkennung für Postgres-Server (nur Datenbank, nicht Betriebssystem) &lt;br /&gt;
|-&lt;br /&gt;
| PGPATH&lt;br /&gt;
| Installationsverzeichnis von Postgres, z.B. /usr/local/pgsql &lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur db-zul.properties-Datei mit den Zugangsparametern für SOSPOS unter Postgres &lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Pfad zur Steuerungsdatei mit den Parametern für das Logging beim Entladen, voreingestellt auf ./logging.properties. Normalerweise brauchen Sie hier nichts ändern, wenn beim Entladen Probleme auftauchen, kann man den Level von SEVERE auf INFO oder FINEST ändern, dann werden die konkreten SQLs geloggt. Aber Achtung: wenn keine Fehler mehr auftreten, müssen Sie den Level wieder auf SERVERE ändern, sonst kommen Schlüsselworte in die Logdatei zul_unload.err, die dann bei der Übernahme nach SuperX fälschlicherweise zu Fehlermeldungen führen. &lt;br /&gt;
|}&lt;br /&gt;
Unter Postgres muss für das &amp;quot;Pull&amp;quot;-Verfahren beim Entladen die Datenbankverbindung in der Datei db-zul.properties eingetragen werden (Muster für Postgres liegt bei in db-zul_pg.properties). Dazu laden Sie einmal die Datei ZUL_ENV mit den obigen Parameter, starten den SuperX-Propadmin (siehe Administrationshandbuch Kernmodul) und richten die Verbindung zum SOSPOS-Server ein. Das Kennwort wird verschlüsselt gespeichert. Danach sind die Entladescripte für Postgres ausführbar. &lt;br /&gt;
Hinweis: Anders als Informix hat Postgres hat eine eigene, vom Basissystem unabhängige Benutzerverwaltung. Daher brauchen Sie den User, den Sie zum Entladen aus Postgres nutzen, nicht auf dem SuperX- oder SOSPOS-Rechner auf Betriebssystem-Ebene einrichten. Sie können also z.B. auf dem SuperX-Rechner zum Entladen aus SOSPOS die Kennung sospos des Postgres- Rechners verwenden. Oder Sie richten in der SOSPOS -Datenbank den Benutzer SuperX ein und geben ihm Leserecht auf die Tabellen sowie das Recht, Tabellen und Stored Procedures anzulegen. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Für alle Platformen gelten folgende Variablen:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ERRORMAIL&lt;br /&gt;
| An wen solle eine Logmail verschickt werden, wenn das Entladen nicht geklappt hat? (nur Unix). &lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL&lt;br /&gt;
| An wen soll immer eine Logmail verschickt werden &lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Pfad zum ausführbaren Mailprogramm unter Unix, Vorbelegung ist &amp;quot;mail&amp;quot;, manche Unixe haben aber auch &amp;quot;mutt&amp;quot; oder &amp;quot;mailx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom ZUL-Rechner auf den SuperX-Rechner kopiert werden sollen, dann werden für das Script zul_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync und scp sind wählbar. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem SuperX-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/zul/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem SuperX-Rechner, in der Regel &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des SuperX-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Dann starten Sie das Script zul_unload.x. Wenn es gelaufen ist, müssten die Dateien im unl-Verzeichnis stehen. Prüfen Sie dann bitte, ob dort Dateien mit 0 bytes stehen. Die Logdatei heisst zul_unload.err. &lt;br /&gt;
&lt;br /&gt;
===== Entladen unter Windows =====&lt;br /&gt;
Für das Entladen unter Windows gibt es Muster-Dateien im jew. Rohdaten-Verzeichnis, z.B. $SOS_PFAD/rohdaten/sos_unload.bat. Die Einrichtung geschieht dann in [[Kernmodul_Komponentenverwaltung#Java-Client_zum_Entladen_von_Quell-Datenbanken|Java]]. Ans Ende der Datei können Sie noch schreiben:&lt;br /&gt;
date /T &amp;gt;superx.datum&lt;br /&gt;
Dann wird auch die Datumsdatei geschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Dateitransfer beim Push-Verfahren =====&lt;br /&gt;
Wenn Sie das Verzeichnis nicht gemounted haben, müssen das Verzeichnis unl, die zul_unload.err und die superx.datum dann in das Verzeichnis $ZUL_LOAD_PFAD auf dem SuperX-Rechner kopiert werden, ein Script dafür liegt ebenfalls bei (zul_copy.x). Das Entladedatum wird danach in der Textdatei $ZUL_LOAD_PFAD/superx.datum gespeichert; wenn das Script einen Fehler findet, dann wird das vorherige Datum (in der Datei superx.datum.alt) gesetzt. &lt;br /&gt;
&lt;br /&gt;
Für den Transfer der Rohdaten beim Push-Verfahren wird in SuperX die dateibasierte Schnittstelle genutzt. Unter UNIX läßt sich dieser Transfer vollends automatisieren, indem die Programme scp oder rsync auf der Basis des OpenSSH-Pakets genutzt werden. Beide setzen auf das ssh-Protokoll 2 auf und stellen somit einen verschlüsselten Dateitransfer sicher. Auch [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] ist möglich. &lt;br /&gt;
In den jeweiligen Modulen wird im Verzeichnis rohdaten eine Beispieldatei mit dem Namen -MODULNAME-_ENV.sam ausgeliefert, die Sie umbenennen können nach -MODULNAME-_ENV. Darin werden am Ende der Datei die Parameter zum Kopieren festgelegt, also die Userkennung REMOTE_USER, der Hostname REMOTE_HOST, und die Methode des Kopierens (COPY_METHOD) sowie die jeweiligen Zielpfade. Diese Umgebungsvariablen werden von dem jeweiligen Script -modulname-_copy.x benutzt. &lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Unix =====&lt;br /&gt;
Damit die Passworteingabe unter Unix entfällt, muss man wie folgt vorgehen:&lt;br /&gt;
Loggen Sie sich zunächst testweise einmal ein. Wenn Sie z.B. vom COB-Server auf den SuperX-Server kopieren wollen, loggen Sie sich als user cob auf cobhost ein mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh superx@superxhost&lt;br /&gt;
Beim ersten Mal müssen Sie die Sicherheitsabfrage mit &amp;quot;yes&amp;quot; bestätigen.&lt;br /&gt;
Erzeugen Sie auf dem Quellrechner einen öffentlichen Schlüssel mittels &lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;cob@cobhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 wobei man eine leere Passphrase vergibt. Der öffentliche Teil dieses Schlüssels (~/.ssh/id_ed25519.pub) muss auf dem Zielrechner in die Datei ~/.ssh/authorized_keys eingefügt werden, ggf. muss die Datei neu erzeugt werden.&lt;br /&gt;
Wenn z.B. auf dem COB-Server unter der Kennung cob ein Key wie folgt erzeugt wurde:&lt;br /&gt;
&lt;br /&gt;
;Beispieleintrag eines Public Keys:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-ed25519 AAAAC3N.[hier viele kryptische Zeichen]....4V cob@cobhost&lt;br /&gt;
&lt;br /&gt;
Dann wird genau diese Zeile in der Datei /home/superx/.ssh/authorized_keys angefügt (die Datei kann mehrere PublicKeys enthalten, ein Eintrag pro Absatz).&lt;br /&gt;
Achten Sie auch auf Dateirechte: Die Verzeichnisse und Dateien sollten keine Schreibrechte für Gruppen haben. Im Zweifelsfall z.B. für den user superx:&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 600 /home/superx/.ssh/authorized_keys&lt;br /&gt;
Danach sollte z.B. der Login vom cobhost als user cob mit ssh superx@superxhost ohne Passworteingabe klappen. Wenn nicht, schalten Sie das Logging mit ssh -v superx@superxhost ein. Eine Möglichkeit ist, dass die PublicKey-Authentifizierung in der Konfigurationsdatei des SSHD (normal /etc/ssh/ssh_config) abgeschaltet ist. Weitere Diagnosen liefert die Datei /var/log/messages.&lt;br /&gt;
Sie können außerdem noch einschränken, von welchem Host die obige Authentifizierung ermöglicht wird. Dazu setzen Sie den Parameter &amp;quot;from=*.uni-xy.de&amp;quot; davor, z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Einschränkung &amp;quot;from&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
in authorized_keys&lt;br /&gt;
| from=&amp;quot;*.uni-xy.de&amp;quot; ssh-rsa AAAAB3Nza…[hier viele kryptische &lt;br /&gt;
Zeichen]…pg6VkCc= cob@cobhost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Kopiermethode scp benutzen, und die obige &amp;quot;authorized_keys&amp;quot;-Metohde mit PublicKey nicht nutzen wollen, können Sie auch mit Private Keys arbeiten (siehe SSH-Doku). Dazu können sie in der *_ENV-Datei in dem Parameter SCP_OPTS den Verweis auf den private Key setzen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| SCP_OPTS in *_ENV:&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel COB_ENV&lt;br /&gt;
| SCP_OPTS=&amp;quot;-p -B -i /home/cob/.ssh/superx_key&amp;quot;&lt;br /&gt;
export SCP_OPTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Windows =====&lt;br /&gt;
Wenn Sie die ssh-Shell putty aus dem Installationspaket nutzen, haben Sie im Installationsordner auch die Anwendung &amp;quot;puttyGen.exe&amp;quot;. Wenn Sie putty als reine Executable nutzen, laden Sie die Anwendung separat herunter. [http://winscp.net/download/puttygen.exe PuttyGen]&lt;br /&gt;
*     Folgen Sie der Anleitung auf der Seite http://winscp.net/eng/docs/ui_puttygen, um den SSH2-DSA oder RSA Schlüssel zu erzeugen. Für den Schlüssel bitte kein Passwort vergeben, wenn Sie das Tool automatisiert nutzen.&lt;br /&gt;
*     Den privaten Schlüssel geben Sie in Putty bzw. Winscp im Menü &amp;quot;Session&amp;quot; im Feld &amp;quot;Private Key File&amp;quot; an.&lt;br /&gt;
*    Der Button &amp;quot;Save public key&amp;quot; ist nicht für OPENSSH unter Linux als Zielserver geeignet. Im folgenden Screenshot sehen Sie den markierten Bereich, den Sie kopieren müssen:&lt;br /&gt;
[[Bild:puttygen.png|413x402px]]&lt;br /&gt;
*     Kopieren Sie Ihren Public Key, den Sie oben mit PuttyGen erzeugt haben, zur Datei &amp;quot;authorized_keys&amp;quot; und kopieren Sie diese in das Verzeichnis ~/.ssh/&lt;br /&gt;
* Im Profil unter Connection -&amp;gt; SSH -&amp;gt; Auth -&amp;gt; Credentials geben Sie den Pfad zum privaten Schlüssel in &amp;quot;Private key file&amp;quot; an.&lt;br /&gt;
* Bei erneutem Login mit Putty oder Winscp sollte die Passwortabfrage entfallen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP (Server) =====&lt;br /&gt;
Beim Push-Verfahren wird, wenn mit scp oder rsync kopiert wird, eine Login-Shell vorausgesetzt. Wenn dies aus Sicherheitsgründen nicht gewünscht ist bzw. wg. Einsatz von Windows nicht möglich ist, können Sie auch sftp nutzen, dies wird in modernen ssh-Servern mitgeliefert und bietet ebenfalls verschlüsselten Datentransfer. Zur Einrichtung des Servers:&lt;br /&gt;
Der SSH-Dienst wird wie folgt konfiguriert (am Beispiel Ubuntu Linux 22.04 LTS) mit dem SFTP-Verzeichnis /home/sftp/-benutzername: &lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/ssh/sshd_config die Zeile auskommentieren:&lt;br /&gt;
 #Subsystem      sftp    /usr/lib/openssh/sftp-server&lt;br /&gt;
und stattdessen:&lt;br /&gt;
 Subsystem sftp internal-sftp&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
         ChrootDirectory /home/sftp/%u&lt;br /&gt;
         ForceCommand internal-sftp&lt;br /&gt;
        AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Danach starten Sie den SSH-Dienst neu:&lt;br /&gt;
 service ssh restart&lt;br /&gt;
&lt;br /&gt;
Dann legen Sie die Gruppe &amp;quot;sftponly&amp;quot; an:&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
 und dann den Unix-User an, und geben ihm die Gruppe &amp;quot;sftponly&amp;quot;. Hier ein Script:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SFTPUSERNAME=$1&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 useradd -b /home/sftp -s /bin/false -G sftponly $SFTPUSERNAME&lt;br /&gt;
 chown root:root /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 chmod 755 /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
 chown $SFTPUSERNAME:sftponly /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
&lt;br /&gt;
Danach legen Sie mit &lt;br /&gt;
 passwd $SFTPUSERNAME&lt;br /&gt;
ein Passwort fest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der User kann sich dann nicht mehr mit ssh einloggen, nur noch mit sftp, und landet beim Login in /home/$KENNUNG, in einem &amp;quot;chroot-Käfig&amp;quot;, und der User kann mit SFTP in den Ordner &amp;quot;incoming&amp;quot; schreiben. Zum Testen geben Sie ein: &lt;br /&gt;
 sftp $KENNUNG@-Host-&lt;br /&gt;
&lt;br /&gt;
Wenn beim SFTP Login die Meldung kommt:&lt;br /&gt;
 client_loop: send disconnect: Broken pipe&lt;br /&gt;
müssen Sie darauf achten dass das Home-Verzeichnis des Users nicht dem User gehört, sondern root.&lt;br /&gt;
&lt;br /&gt;
Wenn der Login klappt, können Sie nach dem [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|oben]]  beschriebenen Verfahren die Passworteingabe durch PublicKey-Authentifizierung ersetzen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP =====&lt;br /&gt;
Für das Kopieren der Rohdaten können Sie im Kopierscript &amp;quot;-modulname-_copy.x&amp;quot; auch sftp-Kommandos nutzen. Sie müssen nur in der ENV-Datei die Variable&lt;br /&gt;
 COPY_METHOD=sftp&lt;br /&gt;
setzen. Alle anderen Variablen und Mechanismen wie z.B. [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|Entfernen der Passworteingabe]] entsprechen denen von SCP / SSH (s.o.). &lt;br /&gt;
Spezielle Optionen fürs sftp können Sie in der Umgebungsvariable SFTP_OPTS setzen. Es kann z.B. sein, dass das Kopieren großer Dateien in einen Timeout läuft. Bei CSV bietet es sich an, die Dateien zu komprimieren, sie können also setzen:&lt;br /&gt;
 SFTP_OPTS=&amp;quot;-oCompression=yes&amp;quot;&lt;br /&gt;
 export SFTP_OPTS&lt;br /&gt;
Danach wiederholen Sie das kenn_copy.x&lt;br /&gt;
Dies ist nur ein Beispiel. Weitere Optionen für SFTP entnehmen Sie der manpage.&lt;br /&gt;
Das Kopieren mit sftp klappt übrigens auch unter Windows z.B. mit dem Programm [http://winscp.net/eng/docs/lang:de winscp]. Dies wird im folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP unter Windows =====&lt;br /&gt;
Unter Windows ist das Standardprogramm für SFTP die Anwendung [http://winscp.net/eng/docs/lang:de winscp]. Sie können die Passworteingabe analog zu Putty [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|entfernen]]. Danach können Sie eine Session erzeugen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp1.png|517x364px]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;quot;Private key file&amp;quot; geben Sie den private key ein, den Sie [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|oben]] erzeugt haben. Klicken Sie dann auf &amp;quot;Save session&amp;quot;, und geben Sie einen kurzen, sprechenden Namen ohne Leerzeichen oder Umlaute, z.B. &amp;quot;superx@vmmulti1&amp;quot;&lt;br /&gt;
Sie müssen nun die Verzeichnisse lokal und remote in der Winscp-Session speichern, im Menüpunkt &amp;quot;Directories&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp2.png|517x359px]]&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie auch hiernach nicht, die Session zu speichern. &lt;br /&gt;
Danach testen Sie einmal den Zugang. Wenn das klappt können Sie Winscp auch für die Kommandozeile automatisieren. Sie erzeugen zunächst eine Textdatei mit den Kommandos für Winscp, dies enthält auch die zu übertragenden Dateien. Der Aufbau der Datei ist wie folgt:&lt;br /&gt;
 open -Sessionname-&lt;br /&gt;
 # Upload the file to current working directory&lt;br /&gt;
 put -Datei-&lt;br /&gt;
 # Disconnect&lt;br /&gt;
 close&lt;br /&gt;
 # Exit WinSCP&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Die zu übertragenden Dateien sind in der Musterdatei des jew. Moduls in rohdaten/-Modulname-_sftp.txt aufgelistet, Sie müssen lediglich &lt;br /&gt;
* den &amp;quot;/&amp;quot; durch einen &amp;quot;\&amp;quot; ersetzen&lt;br /&gt;
* das Entladeprotokoll -Modulname-_unload.err und die Datumsdatei superx.datum hinzufügen&lt;br /&gt;
Hier ein Beispielscript fürs das Studierenden-Modul:&lt;br /&gt;
	open superx@vmmulti1&lt;br /&gt;
	# Change remote directory&lt;br /&gt;
	# Upload the file to current working directory&lt;br /&gt;
	put sos_unload.err&lt;br /&gt;
	put superx.datum&lt;br /&gt;
	put unl\konstanten.unl&lt;br /&gt;
	put unl\sos_studenten.unl&lt;br /&gt;
	put unl\sos_hzb.unl&lt;br /&gt;
	put unl\sos_faecher.unl&lt;br /&gt;
	put unl\sos_pord_to_stg.unl&lt;br /&gt;
	put unl\sos_pruefungenext.unl&lt;br /&gt;
	put unl\sos_pruefungen.unl&lt;br /&gt;
	put unl\sos_lab_astat_attributes.unl&lt;br /&gt;
	put unl\sos_stud_loe.unl&lt;br /&gt;
	put unl\sos_faecher_ext.unl&lt;br /&gt;
	put unl\sos_faecher_kontrolle.unl&lt;br /&gt;
	put unl\sos_pruefungen_kontrolle.unl&lt;br /&gt;
	put unl\sos_anschri.unl&lt;br /&gt;
	put unl\sos_parstg.unl&lt;br /&gt;
	put unl\sos_hsnr.unl&lt;br /&gt;
	put unl\semester.unl&lt;br /&gt;
	put unl\cif.unl&lt;br /&gt;
	put unl\cifx.unl&lt;br /&gt;
	put unl\k_pvers.unl&lt;br /&gt;
	put unl\k_stg.unl&lt;br /&gt;
	put unl\k_stgext.unl&lt;br /&gt;
	put unl\k_abstgv.unl&lt;br /&gt;
	put unl\sos_pord.unl&lt;br /&gt;
	put unl\sos_dipl.unl&lt;br /&gt;
	put unl\sos_minder.unl&lt;br /&gt;
	put unl\sos_stud_d.unl&lt;br /&gt;
	put unl\sos_pords.unl&lt;br /&gt;
	put unl\sos_porg.unl&lt;br /&gt;
	put unl\sos_labzuord.unl&lt;br /&gt;
	put unl\sos_pnrzuord.unl&lt;br /&gt;
	put unl\sos_gewichtungsvariante.unl&lt;br /&gt;
	put unl\sos_gewichtungregel_filter.unl&lt;br /&gt;
	put unl\sos_gewichtungregel.unl&lt;br /&gt;
	put unl\personattribute.unl&lt;br /&gt;
	put unl\personattributetype.unl&lt;br /&gt;
	put unl\personattribute_value_list.unl&lt;br /&gt;
	put unl\stu_update_prot.unl&lt;br /&gt;
	put unl\exa_update_prot.unl&lt;br /&gt;
	put unl\sos_accredited_ects.unl&lt;br /&gt;
	put unl\sos_pord_orgeinheit.unl&lt;br /&gt;
	# Disconnect&lt;br /&gt;
	close&lt;br /&gt;
	# Exit WinSCP&lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
Die Datei hat z.B. den Namen winscp_example_script.txt. Dann können Sie das Script aufrufen mit dem DOS-Kommando:&lt;br /&gt;
 winscp /script=-Pfad zu-\winscp_example_script.txt&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot wie das dann aussieht:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp3.png|609x337px]]&lt;br /&gt;
&lt;br /&gt;
Das DOS-Kommando läßt sich dann über die Windows-Taskverwaltung automatisieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Java-Client zum Entladen von Quell-Datenbanken =====&lt;br /&gt;
Zum Entladen aus dem operativen Vorsystem wird unter Informix dbaccess genutzt. Unter Postgres wird generell der SuperX-JAVA-Client zum Entladen genutzt, denn SuperX benötigt ein spezielles, an Informix angepasstes [[Kernmodul_Komponentenverwaltung#Format_der_Unload_Dateien_CSV|CSV-Format]], das sich mit Bordmitteln von Postgres (copy-Befehl) nicht erzeugen lässt. Es kann aber auch sinnvoll sein, aus der Informix-Datenbank mit SuperX-JAVA-Client zu entladen, z.B. wenn Sie kein UNIX-dbaccess auf dem Vorsystem installiert haben. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie das jew. operative Vorsystem im PUSH-Verfahren entladen wollen, d.h. die Rohdaten werden auf dem Vorsystem entladen und auf den SuperX-Rechner kopiert, dann müssen Sie spezielle Vorkehrungen treffen. SuperX nutzt generell zum Entladen eigene Java-Klassen. Beim Entladen im PULL-Verfahren sind diese Klassen vorhanden, denn die Entladeroutine läuft auf dem SuperX Rechner. Wenn Sie aber PUSH nutzen wollen, werden die SuperX-Java-Klassen auf dem Liefersystem benötigt, und die Entladeroutine muss konfiguriert sein. Im Folgenden nutzen wir das Beispiel &amp;quot;Entladen im Push-Verfahren aus SVA-GX unter Postgres&amp;quot;. Gehen Sie dazu wie folgt vor:&lt;br /&gt;
* Kopieren Sie die Dateien &lt;br /&gt;
** superx*jar&lt;br /&gt;
** postgresql-*.jar&lt;br /&gt;
** jfor-0.7.2rc1.jar&lt;br /&gt;
* vom SuperX-Rechner im Verzeichnis $SUPERX_DIR/tomcat/webapps/superx/WEB-INF/lib auf den Quellrechner in ein Unterverzeichnis lib unter rohdaten (z.B. /home/sva/superx/rohdaten/lib). In rohdaten liegt die bisherige Entladeroutine (z.B. sva_unload.x). &lt;br /&gt;
* Kopieren Sie die *_ENV.sam -Datei nach *_ENV, also hier SVA_ENV.sam nach SVA_ENV&lt;br /&gt;
* Fügen Sie dann folgenden Passus in die Umgebungs-Datei der Entladeroutine, hier also SVA_ENV:&lt;br /&gt;
 #Pfad zu den SuperX-Java-Libraries&lt;br /&gt;
 #Der JDBC_CLASSPATH enthält alles, was der jdbc-Client in superx für den Datenbankzugriff braucht.&lt;br /&gt;
 #jfor*.jar, postgresql*.jar&lt;br /&gt;
 JDBC_CLASSPATH=&amp;quot;$SVA_LOAD_PFAD/lib/superx5.0.jar:$SVA_LOAD_PFAD/lib/postgresql-42.2.19.jar:$SVA_LOAD_PFAD/lib/jfor-0.7.2rc1.jar&amp;quot;&lt;br /&gt;
 export JDBC_CLASSPATH&lt;br /&gt;
&lt;br /&gt;
Wenn dann noch die Variablen [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] und LOGGER_PROPERTIES korrekt gesetzt sind, kann die Entladeroutine bei SX_CLIENT=jdbc (Wenn Sie unter Windows entladen, oder Informix ohne dbaccess entladen wollen) oder SX_CLIENT=psql (wenn Sie Postgres unter UNIX nutzen) mit Java entladen.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Entladescript ausführen:&lt;br /&gt;
 sva_unload.x&lt;br /&gt;
Die Logdatei lautet sva_unload.err&lt;br /&gt;
&lt;br /&gt;
Zum Kopieren der Rohdaten zum SuperX-Server passen Sie folgende Variablen an:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom SVA-Rechner auf den BI-Rechner kopiert werden sollen, dann werden für das Script sva_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync, [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] und scp sind wählbar [Achtung: diese müssen dann betriebssystemseitig installiert sein]. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem BI-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/sva/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem BI-Rechner, in der Regel &amp;quot;tomcat&amp;quot; oder &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des BI-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Danach starten Sie &lt;br /&gt;
 sva_copy.x&lt;br /&gt;
Die Logdatei lautet sva_copy.err&lt;br /&gt;
&lt;br /&gt;
Weitere Entladeparameter werden in den modulspezifischen Administrationshandbüchern beschrieben.&lt;br /&gt;
{{Hinweis|Bei neuen SuperX-Versionen reicht es in der Regel, die modulspez. Dateien auszutauschen, also hier sva_unload.* etc.}}&lt;br /&gt;
&lt;br /&gt;
== Update eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Wenn das Entladen aus dem Vorsystem geklappt hat (sofern es ein Vorsystem gibt), können Sie die Daten laden. Zum Update bzw. zum Laden der Rohdaten gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname- und führen das Script aus:&lt;br /&gt;
-Modulname-_update.x&lt;br /&gt;
Die Logdatei lautet L_-Modulname-_UPDATE.log, im Mandantenfähigen Betrieb &amp;quot;L_-Modulname-_UPDATE-MANDANTID-.log&amp;quot;.&lt;br /&gt;
Für die Aufnahme der Laderoutine in die crontab gibt es im gleichen Verzeichnis Musterscripte nach dem Namensmuster:&lt;br /&gt;
-Modulname-_update_cron.x&lt;br /&gt;
Je nach Push/Pull-Szenario können Sie auch den Unload darin starten oder nicht.&lt;br /&gt;
&lt;br /&gt;
=== Modulupdate in mandantenfähigen Installationen ===&lt;br /&gt;
Der Modulupdate in mandantenfähigen Installation findet in einer SuperX-Installation statt, allerdings werden die einzelnen Scripte mit unterschiedlichen Umgebungsvariablen, wie sie in SQL_ENV.-MANDANTID- definiert ist, z.B. SQL_ENV.FHRO.&lt;br /&gt;
In der SQL_ENV.-MANDANTID- werden unterschiedliche Pfade für den jeweiligen *_LOAD_PFAD gesetzt, wobei in der Regel die Mandandid ein Unterverzeichnis vom &amp;quot;normalen&amp;quot; LOAD_PFAD ist. So ist z.B. beim COB-Modul folgender Pfad anzusetzen:&lt;br /&gt;
Normale SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten&lt;br /&gt;
Mandantenfähige SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten/FHRO&lt;br /&gt;
Unterhalb von FHRO befindet sich noch einmal die Entladeroutine sowie das Unterverzeichnis unl mit den Rohdaten. Dieses Verzeichnis FHRO kann der Einfahheit halber auch ein symbolischer Link auf den gemounteten COB-Rechner sein.&lt;br /&gt;
Durch Setzen der Mandantennummer in der Umgebungsvariable MANDANTID in der jeweiligen SQL_ENV des Mandanten werden die ETL-Scripte anders ausgeführt: Die Logdateien werden jeweils mit der Mandantennummer versehen (z.B. L_cob_updateFHRO.log), damit die Übersicht nicht verloren geht und der gleichzeitige Update mehrerer Mandanten in eine rsuperX-Installation möglich ist.&lt;br /&gt;
Außerdem können weitreichende Steuerungsmechanismen im Modulupdate eingesetzt werden: Nach jedem ETL-Schritt können optional mandantenspezifische Scripte aufgerufen werden. Diese müssen folgende Namenskonvention einhalten:&lt;br /&gt;
 -Scriptname-_-MANDANTID-.sql&lt;br /&gt;
Also für eine hochschulspezifische Transformation im COB-Modul des Mandanten FHRO wird eine Datei namens&lt;br /&gt;
 cob_trans_FHRO.sql &lt;br /&gt;
mit entsprechenden SQL-Anweisungen angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Format der Unload Dateien CSV ===&lt;br /&gt;
Generell gilt das Prinzip, daß Daten vom Vorsystem in CSV entladen werden, und dann in sog. Ladetabellen hochgeladen werden. Da CSV je nach DBMS unterschiedlich implementiert wird, hier eine kurze Beschreibung des Formats, das im wesentlichen den Vorgaben von Informix LOAD entspricht:&lt;br /&gt;
* Zeichenformat: UNIX LATIN1 oder UTF-8&lt;br /&gt;
* Feldtrenner: ^ &lt;br /&gt;
* Satztrenner: Feldtrenner + UNIX NEWLINE&lt;br /&gt;
* Zeilenschaltung: Umbrüche innerhalb von Textfeldern sind als \ + NEWLINE codiert&lt;br /&gt;
* Feldtrenner, die im Textfeld vorkommen, werden mit &amp;quot;\&amp;quot; maskiert. Ebenso das Zeichen &amp;quot;\&amp;quot; selbst&lt;br /&gt;
* Die Datumsformate sind bei Datumsfeldern immer im deutschen Format (DD.MM.YYYY) vorgesehen&lt;br /&gt;
* Boolean-Werte werden durch &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; codiert&lt;br /&gt;
* Der Dezimaltrenner ist &amp;quot;.&amp;quot;, kein 1000-er Punkt bei Zahlen. &lt;br /&gt;
* Leerstrings und Leerzeichen werden als &amp;quot; &amp;quot; (Leerzeichen) exportiert.&lt;br /&gt;
&lt;br /&gt;
== Upgrade eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Zum Upgrade bzw. zum Zurücksetzen des Moduls auf den Auslieferungszustand entpacken Sie das Paket in $SUPERX_DIR und gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname-/upgrade und führen das Script aus:&lt;br /&gt;
-Modulname-_upgrade.x&lt;br /&gt;
Ausnahme: beim Kernmodul gibt es i.d.R. ein spezielles [[Kern_Installation_Upgrade#Standardvorgehen_beim_Upgrade|Upgrade Script]].&lt;br /&gt;
&lt;br /&gt;
Die Logdatei lautet upgrade.log, im Mandantenfähigen Betrieb &amp;quot;upgrade-MANDANTID-.log&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen separaten Tomcat-Rechner betreiben, müssen Sie das Paket dort ebenfalls entpacken, und vom Datenbankserver die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml an die gleiche Stelle auf den Tomcat Rechner kopieren. Ein nochmaliges Ausführen des Upgrade Scriptes ist nicht nötig, weil dies nur die Datenbank betrifft.&lt;br /&gt;
&lt;br /&gt;
== Hochschulspezifische Anpassung eines Moduls ==&lt;br /&gt;
=== Dateibasierte hochschulspezifische Anpassung ===&lt;br /&gt;
Nach der Installation bzw. beim Upgrade können Sie hochschuleigene SQL Scripte ausführen lassen. Erzeugen Sie dazu eine Datei &lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/customize.sql &lt;br /&gt;
bei Mandantenbetrieb&lt;br /&gt;
  $SUPERX_DIR/db/module/-Modulname-/conf/customize-MANDANTID-.sql &lt;br /&gt;
und füllen Sie diese mit einem beliebigen Inhalt. Das Script wird beim Upgrade des Moduls automatisch am Ende ausgeführt.&lt;br /&gt;
=== Datenbankbasierte hochschulspezifische Laderegeln ===&lt;br /&gt;
Eine Laderoutine gliedert sich in die Schritte&lt;br /&gt;
#Unload: Entladen der CSV Dateien aus dem jew. Vorsystem&lt;br /&gt;
#Load: Upload der CSV Dateien&lt;br /&gt;
#Trans: Transformation der Daten&lt;br /&gt;
#Aggr: Aggregation der Daten&lt;br /&gt;
#Test: Test der Daten&lt;br /&gt;
#System: Standdatum bei Erfolg aktualisieren&lt;br /&gt;
Es ist möglich über sog. &amp;quot;Preparation&amp;quot;- oder &amp;quot;Finalize&amp;quot;-[[Kernmodul_Shellscripte#Hochschulspezifische_Transformationen_im_ETL-Prozess|Scripte]] die Laderoutine am Ende von LOAD bzw. TRANS anzupassen. Dieses Verfahren ist weiterhin möglich, ist aber bzgl. Clustering und Schreibzugriff recht unflexibel.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich im Browser hochschulspezifische Scripte am Ende des jeweiligen Schrittes einer Laderoutine anzulegen. Dies funktioniert so: Die Laderoutine führt zunächst den allgemeinen, von uns vorgegebenen Ladeschritt aus. Wenn dann eine Repository-Variable mit einem gewissen Namensschema existiert, wird sie ausgeführt. Das Namensschema lautet &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Kürzel der Komponente&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;_CUSTOM&lt;br /&gt;
&amp;lt;/source&amp;gt;. &lt;br /&gt;
* Bei Hauptladeroutinen ist dies&lt;br /&gt;
*# Laden: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_load_CUSTOM, z. B. sos_load_CUSTOM&lt;br /&gt;
*# Transformation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_trans_CUSTOM, z. B. sos_trans_CUSTOM&lt;br /&gt;
*# Aggregation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_aggr_CUSTOM, z. B. sos_aggr_CUSTOM&lt;br /&gt;
* Bei Unterladeroutinen ist dies &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_&#039;&#039;&#039;ID des Ladeschritts&#039;&#039;&#039;_CUSTOM, also z. B. cob_trans_fin_busa_CUSTOM für die Unterladeroutine &amp;quot;Lade Buchungen aus FIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um eine Variable neu einzurichten:&lt;br /&gt;
* Gehen Sie in den BI-Standardberichten auf Administration/Hochschul-Repository.&lt;br /&gt;
* Wählen Sie das jeweilige Sachgebiet und schicken Sie das Formular ab.&lt;br /&gt;
* Klicken Sie bei einer Beispielzeile auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;.&lt;br /&gt;
* Im neuen Fenster klicken Sie oben ganz rechts auf das Symbol &#039;&#039;&#039;Datensatz kopieren&#039;&#039;&#039;.&lt;br /&gt;
* Definieren Sie die Variable z. B.&lt;br /&gt;
** als Variablenname die ID z. B.: fin_load_CUSTOM&lt;br /&gt;
** Art der Variable: ein für Sie sprechender Schlüssel mit Modulkürzel, z. B. &amp;quot;fin_Laderegel&amp;quot;&lt;br /&gt;
** als Inhalt der Variable die gewünschten Befehle, z. B. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update fin_buch_neu set ch110_institut=buchungsab_fb where length(buchungsab_fb)=5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** aktiv=1&lt;br /&gt;
** gültig seit 1.1.1900&lt;br /&gt;
** gültig bis 1.1.3000&lt;br /&gt;
* Klicken Sie oben rechts auf das Häkchen-Symbol für &#039;&#039;&#039;Datensatz einfügen&#039;&#039;&#039;.&lt;br /&gt;
* Schließen Sie das Fenster.&lt;br /&gt;
&lt;br /&gt;
Analog können Sie auch die [[Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung|customize]]-Regeln&amp;quot; ins Repository verlagern. Hier heißt die Variable z.B. fin_install_CUSTOM.&lt;br /&gt;
&lt;br /&gt;
== Entfernen eines Moduls ==&lt;br /&gt;
Wenn Sie ein Modul nicht mehr benötigen, starten Sie das Script&amp;lt;br /&amp;gt;&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/-Modulname-_modul_entfernen.x.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses Script löscht alle Tabellen, Prozeduren und Abfragen aus der Datenbank, und löscht auch die Einträge im Themenbaum. Danach können Sie den Pfad $SUPERX_DIR/db/module/-Modulname-löschen.&lt;br /&gt;
Wenn Sie nur die Inhalte der Daten- und Hilfstabellen des Moduls löschen wollen (z.B. aus Datenschutzgründen), ohne das ganze Modul zu deinstallieren, können Sie dies mit folgendem Befehl tun:&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_pg.sql (für Postgres)&amp;lt;br /&amp;gt;&lt;br /&gt;
bzw.&amp;lt;br /&amp;gt;&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_ids.sql (für Informix)&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16371</id>
		<title>Kernmodul Komponentenverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16371"/>
		<updated>2026-07-13T06:51:43Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Komponentenverwaltung im Kernmodul kann je nach Aufgabe über die Browseroberfläche oder über Shell-Skripte erfolgen.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden die Installation, Deinstallation, Aktualisierung und das Upgrade von Modulen überwiegend über Skripte in der Shell durchgeführt. Ab Kernmodul 6.0 steht zusätzlich eine Komponentenverwaltung über die Browseroberfläche zur Verfügung. Diese Browseroberfläche wird im Folgenden als SuperX ETL Manager beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager ist vor allem für die Ausführung und Überwachung von ETL-Prozessen sowie für Modul-Upgrades vorgesehen. Die Installation und Deinstallation von Modulen stehen dort bisher nicht zur Verfügung und werden weiterhin über die Shell-Skripte durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ist daher in zwei Bereiche gegliedert: Zuerst wird die Nutzung des SuperX ETL Managers beschrieben. Anschließend folgt die Dokumentation zur Installation und Verwaltung von Modulen mit Skripten.&lt;br /&gt;
&lt;br /&gt;
= Komponentenverwaltung im Browser: SuperX ETL Manager =&lt;br /&gt;
Der SuperX ETL Manager dient dazu, ETL-Prozesse der installierten SuperX-Module über die Weboberfläche auszuführen und zu überwachen. Er bietet eine zentrale Übersicht über installierte Module, verfügbare Aktionen, Versionsinformationen, Datenquellen, den aktuellen Lauf sowie technische Zusatzinformationen für die Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der Schwerpunkt der Oberfläche liegt auf dem täglichen Betrieb: Anwenderinnen und Anwender können Laderoutinen starten, den aktuellen Stand eines Laufs verfolgen und bei Bedarf die Log-Ausgabe einsehen. Technische Detail- und Diagnoseinformationen stehen ebenfalls zur Verfügung, sind aber vor allem für Administratorinnen und Administratoren oder den Support gedacht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Uebersicht.png|Gesamtübersicht des SuperX ETL Managers mit Modulübersicht, Filterbereich, Aktionsbuttons und aktuellem Lauf.]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Oberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche besteht im Wesentlichen aus folgenden Bereichen:&lt;br /&gt;
&lt;br /&gt;
* Filterbereich&lt;br /&gt;
* Modulübersicht&lt;br /&gt;
* Aktionsbuttons pro Modul&lt;br /&gt;
* Bereich „Aktueller Lauf“&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
* Details-Bereich&lt;br /&gt;
* Diagnose-Bereich&lt;br /&gt;
&lt;br /&gt;
Über den Filterbereich kann die angezeigte Modulliste eingeschränkt werden. Die Modulübersicht zeigt die wichtigsten Informationen zu den vorhandenen Modulen. Über die Aktionsbuttons können ETL-Prozesse gestartet werden. Der Bereich „Aktueller Lauf“ zeigt den zuletzt gestarteten oder aktuell laufenden Prozess an.&lt;br /&gt;
&lt;br /&gt;
Die Bereiche „Details“ und „Diagnose“ liefern zusätzliche technische Informationen. Sie sind hilfreich für Supportfälle, aber für die normale Bedienung nicht zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Modulübersicht ==&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt die installierten bzw. erkannten Module mit ihren wichtigsten Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Spalte&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Modul&lt;br /&gt;
| Zeigt den Namen und das technische Kürzel des Moduls, zum Beispiel „Administration“ mit dem Kürzel „kern“ oder „Kennzahlen“ mit dem Kürzel „kenn“.&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Zeigt, ob das Modul installiert ist.&lt;br /&gt;
|-&lt;br /&gt;
| Versionen&lt;br /&gt;
| Zeigt die installierte Version und die verfügbare Version des Moduls.&lt;br /&gt;
|-&lt;br /&gt;
| Letztes Update&lt;br /&gt;
| Zeigt den Zeitpunkt des letzten bekannten Updates.&lt;br /&gt;
|-&lt;br /&gt;
| Datenquelle&lt;br /&gt;
| Zeigt, aus welcher Datenquelle das Modul seine Daten bezieht oder auf welcher Datenbasis der ETL-Prozess arbeitet.&lt;br /&gt;
|-&lt;br /&gt;
| DB-Verbindung&lt;br /&gt;
| Zeigt, ob die Verbindung zur Datenbank bzw. Datenquelle aktuell erreichbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| Aktionen&lt;br /&gt;
| Zeigt die verfügbaren Aktionen für das jeweilige Modul.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Versionen ===&lt;br /&gt;
&lt;br /&gt;
In der Spalte „Versionen“ werden zwei Werte angezeigt:&lt;br /&gt;
&lt;br /&gt;
* installierte Version&lt;br /&gt;
* verfügbare Version&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der aktuell in der Datenbank installiert ist. Die verfügbare Version beschreibt den ausgelieferten Stand des Moduls, der in der Installation vorliegt.&lt;br /&gt;
&lt;br /&gt;
Wenn die verfügbare Version höher ist als die installierte Version, sollte in der Regel ein Upgrade des Moduls durchgeführt werden. Dadurch werden die Datenstrukturen des Moduls auf den ausgelieferten Stand aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Datenquelle ===&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle gibt an, aus welchem System ein Modul seine Daten bezieht oder auf welcher Datenbasis es arbeitet.&lt;br /&gt;
&lt;br /&gt;
SuperX ist ein Data Warehouse. Viele Module übernehmen Daten aus externen vorsystemen. Beispiele für solche Datenquellen sind:&lt;br /&gt;
&lt;br /&gt;
* cob für Kostenrechnung&lt;br /&gt;
* mbs für Finanzrechnung, Inventar oder Gebäude/Räume/Flächen&lt;br /&gt;
* sva für Personal- und Stelleninformationen&lt;br /&gt;
* hisinone bei entsprechend angebundenen Modulen&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es Module, die auf bereits in SuperX vorhandene Daten zurückgreifen. In solchen Fällen wird als Datenquelle „SuperX“ angezeigt. Das betrifft vor allem Module, die modulübergreifend, auswertungsorientiert oder spezialisiert auf vorhandene SuperX-Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
Beispiele hierfür können sein:&lt;br /&gt;
&lt;br /&gt;
* kenn für Kennzahlen&lt;br /&gt;
* man für Managementberichte&lt;br /&gt;
* erfolg für Studienverlauf bzw. Erfolgsbetrachtungen&lt;br /&gt;
* gang für Studiengänge&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle „SuperX“ bedeutet also nicht, dass keine Daten verarbeitet werden. Sie zeigt an, dass die Verarbeitung auf Daten basiert, die bereits im SuperX-System vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Aktionen ausführen ==&lt;br /&gt;
&lt;br /&gt;
Die verfügbaren Aktionen hängen vom jeweiligen Modul ab. Nicht jedes Modul unterstützt alle Aktionen. Wenn eine Aktion nicht verfügbar ist, wird der entsprechende Button nicht angezeigt oder ist nicht aktiv.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktionsbuttons.png|Modulzeile mit den Aktionsbuttons Unload, Update, Unload &amp;amp; Update und Upgrade.]]&lt;br /&gt;
&lt;br /&gt;
=== Unload ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ entlädt Daten aus einem angebundenen Vorsystem, sofern für das Modul ein Vorsystem angebunden ist.&lt;br /&gt;
&lt;br /&gt;
Der Unload dient dazu, Daten aus der jeweiligen Datenquelle bereitzustellen, damit sie anschließend in SuperX verarbeitet werden können. Je nach Modul und Einrichtung kann der Unload auch dazu dienen, Daten für eine weitere Verarbeitung oder Übertragung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Update“ lädt vorhandene Rohdaten in SuperX ein und führt die Hauptladeroutine des Moduls aus.&lt;br /&gt;
&lt;br /&gt;
Dies ist in vielen Fällen die wichtigste Aktion für den täglichen Betrieb. Beim Update werden die vorhandenen Rohdaten verarbeitet und die zugehörigen SuperX-Tabellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Unload &amp;amp; Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload &amp;amp; Update“ führt zuerst den Unload und anschließend das Update aus.&lt;br /&gt;
&lt;br /&gt;
Diese Aktion ist sinnvoll, wenn neue Daten aus einem angebundenen Vorsystem entladen und direkt anschließend in SuperX verarbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Upgrade“ führt eine Modulaktualisierung durch. Dabei werden die Datenstrukturen des Moduls auf den ausgelieferten Stand gebracht.&lt;br /&gt;
&lt;br /&gt;
Ein Upgrade sollte ausgeführt werden, wenn eine neue verfügbare Version angezeigt wird oder wenn dies im Rahmen eines Modulupdates erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
== Sonderfall Kennzahlen-Modul ==&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ ist die Verarbeitung etwas anders als bei typischen Modulen mit externem Vorsystem.&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist hier in der Regel „SuperX“. Das bedeutet, dass die Kennzahlen nicht primär aus einem externen Fremdsystem entladen werden. Stattdessen basiert die Verarbeitung auf Daten, die bereits in SuperX vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Für den täglichen Betrieb ist beim Kennzahlen-Modul daher häufig vor allem die Aktion „Update“ relevant. Dabei werden die Kennzahlen auf Basis der vorhandenen SuperX-Daten neu berechnet bzw. aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ kann beim Kennzahlen-Modul eine andere Bedeutung haben als bei klassischen Vorsystem-Modulen. Sie kann dazu dienen, Kennzahlen für ein anderes System bereitzustellen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* für ein hochschulübergreifendes SuperX&lt;br /&gt;
* für Vergleichssysteme&lt;br /&gt;
* für landesweite Auswertungen oder Berichtssysteme&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Aktion „Unload &amp;amp; Update“ ist beim Kennzahlen-Modul daher nicht immer die wichtigste Aktion. In vielen Installationen wird das Update gezielt über die Oberfläche ausgeführt, während Export- oder Übertragungsprozesse über automatische Abläufe wie Cronjobs gesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Lauf ==&lt;br /&gt;
&lt;br /&gt;
Der Bereich „Aktueller Lauf“ zeigt Informationen zum zuletzt gestarteten oder aktuell laufenden ETL-Prozess.&lt;br /&gt;
&lt;br /&gt;
Typische Informationen sind:&lt;br /&gt;
&lt;br /&gt;
* JobExecutionId&lt;br /&gt;
* Name des gestarteten Jobs&lt;br /&gt;
* Status&lt;br /&gt;
* Fortschritt&lt;br /&gt;
* Anzahl der ausgeführten Schritte&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktueller_Lauf.png|Bereich „Aktueller Lauf“ mit JobExecutionId, Status, Fortschritt und Log-Ausgabe.]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
Der Status zeigt den aktuellen Zustand des Laufs. Häufige Statuswerte sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| STARTING&lt;br /&gt;
| Der Lauf wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
| STARTED&lt;br /&gt;
| Der Lauf wurde gestartet und wird ausgeführt.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETED&lt;br /&gt;
| Der Lauf wurde erfolgreich abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| FAILED&lt;br /&gt;
| Der Lauf ist mit einem Fehler abgebrochen.&lt;br /&gt;
|-&lt;br /&gt;
| STOPPED&lt;br /&gt;
| Der Lauf wurde gestoppt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fortschritt ===&lt;br /&gt;
&lt;br /&gt;
Der Fortschritt zeigt, wie viele Prozessschritte bereits abgearbeitet wurden. Er ist als technischer bzw. prozessbezogener Fortschritt zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Fortschrittswert ist keine genaue Zeitprognose.&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann schnell auf eine hohe Prozentzahl springen und dort längere Zeit stehen bleiben, wenn ein einzelner Verarbeitungsschritt besonders lange dauert. Umgekehrt können viele kleine Schritte sehr schnell nacheinander abgeschlossen werden. Die Prozentanzeige beschreibt daher den Abarbeitungsstand der Prozessschritte, nicht die tatsächlich vergangene oder verbleibende Zeit.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann bereits 80 % anzeigen, obwohl noch ein größerer Verarbeitungsschritt aussteht. Ebenso kann ein Lauf am Anfang längere Zeit bei einer niedrigen Prozentzahl stehen bleiben, wenn ein früher Prozessschritt besonders umfangreich ist.&lt;br /&gt;
&lt;br /&gt;
== Log-Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe zeigt technische Informationen zum ausgeführten ETL-Prozess. Sie kann helfen, den Ablauf nachzuvollziehen und bei Problemen erste Hinweise zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe ist vor allem für Supportfälle hilfreich. Für eine tiefergehende Fehleranalyse sind in der Regel administrative Kenntnisse erforderlich. Je nach Fehler müssen zusätzlich Serverlogs, Datenbankinhalte, Moduldateien oder Systemkonfigurationen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Log-Ausgabe nicht sofort erscheint, kann sie über „Log laden“ erneut abgefragt werden. Gerade bei umfangreichen Läufen kann es vorkommen, dass die Log-Ausgabe erst kurze Zeit nach Abschluss vollständig verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
== Typische Nutzungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Bereits vorhandene Rohdaten verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Rohdaten bereits vorhanden sind und lediglich erneut verarbeitet werden sollen, wird in der Regel die Aktion „Update“ verwendet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Rohdaten liegen bereits im System vor&lt;br /&gt;
* Berechnungen oder Aggregationen sollen neu ausgeführt werden&lt;br /&gt;
* die SuperX-Tabellen des Moduls sollen aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Daten aus einem Vorsystem übernehmen und verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn neue Daten aus einem externen Vorsystem übernommen und anschließend verarbeitet werden sollen, kann die Aktion „Unload &amp;amp; Update“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden zunächst die Daten aus dem Vorsystem entladen. Anschließend werden die Daten durch das Update in SuperX verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload &amp;amp; Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nur Daten aus einem Vorsystem entladen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten aus einem Vorsystem entladen werden sollen, ohne direkt anschließend die Laderoutine auszuführen, kann die Aktion „Unload“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul auf den ausgelieferten Stand aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue verfügbare Version angezeigt wird, sollte ein Upgrade geprüft bzw. durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen innerhalb von SuperX aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ werden die Daten in der Regel aus SuperX selbst bezogen. Wenn die Kennzahlen neu berechnet oder aktualisiert werden sollen, ist häufig die Aktion „Update“ die passende Aktion.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen für ein anderes System bereitstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Kennzahlen für ein anderes System bereitgestellt werden sollen, kann beim Kennzahlen-Modul die Aktion „Unload“ relevant sein.&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel für hochschulübergreifende Auswertungen, Vergleichssysteme oder landesweite Berichtssysteme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Nutzung ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung des ETL Managers sollten folgende Punkte beachtet werden:&lt;br /&gt;
&lt;br /&gt;
* Ein laufender Prozess sollte nicht unnötig mehrfach parallel gestartet werden.&lt;br /&gt;
* Nach einem Lauf kann die Modulübersicht über „Aktualisieren“ neu geladen werden.&lt;br /&gt;
* Die Prozentanzeige ist kein Zeitindikator, sondern beschreibt den Fortschritt der Prozessschritte.&lt;br /&gt;
* Bei Fehlern sollte zuerst der Status und anschließend die Log-Ausgabe geprüft werden.&lt;br /&gt;
* Für tiefergehende Fehleranalysen sollten Administratorinnen und Administratoren oder technische Ansprechpartner einbezogen werden.&lt;br /&gt;
* Bei neuen verfügbaren Modulversionen sollte geprüft werden, ob ein Upgrade auszuführen ist.&lt;br /&gt;
&lt;br /&gt;
== Details-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Über den Button „Details“ können zusätzliche technische Informationen zu einem Modul angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Der Details-Bereich ist vor allem für fortgeschrittene Benutzerinnen und Benutzer, Administratorinnen und Administratoren oder den Support gedacht. Er kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* technische Modulkennung&lt;br /&gt;
* Systeminfo-ID&lt;br /&gt;
* technische Jobnamen&lt;br /&gt;
* verfügbare Jobs&lt;br /&gt;
* Rohdaten der Schnittstelle&lt;br /&gt;
* zusätzliche technische Moduldetails&lt;br /&gt;
&lt;br /&gt;
Für den normalen Betrieb ist der Details-Bereich meist nicht erforderlich. Er ist vor allem dann hilfreich, wenn bei Rückfragen oder Supportfällen genaue technische Informationen benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diagnose-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist eine technische Hilfsfunktion zur Prüfung der ETL-Manager-Installation. Er ist global angeordnet und nicht auf ein einzelnes Modul beschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Diagnose führt keine Reparaturen automatisch aus. Sie zeigt technische Informationen, mögliche Auffälligkeiten und Hinweise an. Zusätzlich können SQL- oder Shell-Hinweise angezeigt werden, die bei Bedarf von Administratorinnen und Administratoren kopiert und manuell ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* Erreichbarkeit der REST-Schnittstellen&lt;br /&gt;
* Webapp-, Tomcat- und Java-Informationen&lt;br /&gt;
* Pfade und Dateisysteminformationen&lt;br /&gt;
* Festplattenspeicher&lt;br /&gt;
* Datenbankinformationen&lt;br /&gt;
* Prüfung der Log-Tabelle&lt;br /&gt;
* Versionsquellen&lt;br /&gt;
* bekannte Fehlerbilder&lt;br /&gt;
* kopierbare SQL- und Shell-Hinweise&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist vor allem für Administratorinnen und Administratoren oder technische Ansprechpartner gedacht. Für normale Anwenderinnen und Anwender ist er in der Regel nur dann relevant, wenn ein Fehler auftritt oder technische Informationen weitergegeben werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Administratorhinweise ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält ergänzende technische Hinweise. Er richtet sich vor allem an Administratorinnen und Administratoren sowie an den technischen Support.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft der Versionsinformationen ===&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche zeigt eine installierte und eine verfügbare Version an.&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der in der Datenbank installiert ist. Falls die REST-Schnittstelle keinen Wert liefert, kann die Version aus der Tabelle &amp;lt;code&amp;gt;db_version&amp;lt;/code&amp;gt; gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die verfügbare Version beschreibt den ausgelieferten Stand im Dateisystem. Sie kann aus der Modul-XML-Datei gelesen werden. Für normale Module liegt diese Datei typischerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/&amp;lt;modul&amp;gt;/conf/&amp;lt;modul&amp;gt;.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul gilt ein Sonderfall. Die Modul-XML liegt unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/install/conf/kern.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann eine Datei &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; im jeweiligen Modulverzeichnis als Fallback verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Log-Tabelle ===&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe des ETL Managers verwendet eine Datenbanktabelle für die Joblogs. Wenn diese Tabelle fehlt oder unvollständig ist, kann die Log-Ausgabe fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Struktur der Tabelle ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS job_log&lt;br /&gt;
(&lt;br /&gt;
   job_instance_id  bigint   NOT NULL,&lt;br /&gt;
   log              text,&lt;br /&gt;
   status           text&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX IF NOT EXISTS ix_job_log1&lt;br /&gt;
ON public.job_log USING btree (job_instance_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese SQL-Anweisungen sollten nicht automatisch durch die Oberfläche ausgeführt werden. Sie dienen als Hinweis für Administratorinnen und Administratoren und müssen bei Bedarf manuell geprüft und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Typische technische Fehlerbilder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehlerbild&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/jobLog/{id}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Die Tabelle &amp;lt;code&amp;gt;job_log&amp;lt;/code&amp;gt; fehlt, ist unvollständig oder der Logeintrag ist noch nicht verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/job/list/{modul}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Moduldateien fehlen, Pfade stimmen nicht oder die Webapp verwendet nicht den erwarteten Dateistand.&lt;br /&gt;
|-&lt;br /&gt;
| REST-Endpunkt liefert HTTP 404&lt;br /&gt;
| Der Context-Pfad, die Webapp, der Port oder ein Tunnel zeigt möglicherweise nicht auf die erwartete Anwendung.&lt;br /&gt;
|-&lt;br /&gt;
| Log erscheint erst nach erneutem Laden&lt;br /&gt;
| Der ETL-Lauf ist abgeschlossen, aber der Logeintrag war beim ersten Abruf noch nicht vollständig verfügbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager stellt eine zentrale Oberfläche zur Ausführung und Überwachung von ETL-Prozessen bereit. Für den täglichen Betrieb stehen vor allem die Aktionen „Unload“, „Update“, „Unload &amp;amp; Update“ und „Upgrade“ im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt den Installationsstatus, Versionsinformationen, Datenquellen und Datenbankverbindungen. Der Bereich „Aktueller Lauf“ informiert über den Fortschritt eines gestarteten Prozesses. Die Log-Ausgabe liefert technische Zusatzinformationen und kann bei der Fehleranalyse helfen.&lt;br /&gt;
&lt;br /&gt;
Details und Diagnose ergänzen die Oberfläche um technische Informationen für Support- und Administrationsfälle. Sie unterstützen bei der Analyse, führen aber keine automatischen Reparaturen aus.&lt;br /&gt;
&lt;br /&gt;
= Installation und Verwaltung in der Shell mit Skripten =&lt;br /&gt;
&lt;br /&gt;
== Installation von Modulen ==&lt;br /&gt;
Das Kernmodul enthält außer Administrationsabfragen und Tabellen keinerlei Inhalte. Die Inhalte werden in Form von Modulen hinzugefügt. Dazu gibt es vorgefertigte [[Kernmodul_Shellscripte#Modulverwaltung|Installationsscripte]].&lt;br /&gt;
&lt;br /&gt;
=== Architektur von SuperX-Modulen ===&lt;br /&gt;
Die folgende Abbildung zeigt die Architektur von Modulen ab Beispiel vom HISCOB-Modul:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Ein Modul besteht auf Datenbankseite aus Abfragen, Hilfstabellen, Datentabellen und Schlüsseltabellen (sowie Prozeduren).&lt;br /&gt;
Auf Webserver-Seite können auch XSL-Stylesheets vorhanden sein.&lt;br /&gt;
| [[Bild:modularchitektur_cob.png|417x307px]]&lt;br /&gt;
|}&lt;br /&gt;
Die Abbildung zeigt, dass ein Modul eigene Komponenten nutzt, aber auch auf Teile des Kernmoduls zugreift, z.B. das Orgranigramm - dies macht SuperX zu einem integrierten System. Neben dem Organigramm sind alle anderen Komponenten des Kernmoduls natürlich betroffen, z.B. Themenbaum, Userrechte.&lt;br /&gt;
Die Ordnerstruktur eines Moduls spiegelt die Komponenten des Systems wieder. Es gibt je ein Verzeichnis für datentabellen, schluesseltabellen und hilfstabellen. &lt;br /&gt;
Die Installation eines Moduls ist in der Dokumentation des jeweiligen Moduls näher beschrieben. Module, die auf dem Kernmodul 2.1 oder höher basieren, haben einen einheitlichen Aufbau.&lt;br /&gt;
&lt;br /&gt;
=== Modulscripte im Kernmodul ===&lt;br /&gt;
Seit Version 2.1 werden die Datenbankschemata und Scripte der Module in einem einheitlichen Format zusammengestellt und in einer Datei $SUPERX_DIR/db/module/$MODULNAME/conf/$MODULNAME.xml gespeichert. Das XML-Format hat den Vorteil, dass die Scripte dynamisch für Postgres und Informix erzeugt werden können, und dass die Scripte vereinheitlicht werden. Aus dieser Datei werden die Scripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen. Die folgende Abbildung zeigt das Vorgehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Aus der xml-Datei werden die jeweiligen Scripte für die Installation, den Update, die Extraktions-, Transformations- und Ladescripte (ETL) und die Deinstallation erzeugt.&lt;br /&gt;
| [[Bild:modulscripte_erzeugen.png|417x371px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Modul-Scripte liegen als Shellscripte im Verzeichnis $SUPERX_DIR/db/bin, und sind an [[Kernmodul_Shellscripte#Modulverwaltung|anderer Stelle]] im Detail erläutert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| module_install.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_install.x sos $SOS_PFAD&lt;br /&gt;
| Installiert ein Modul, d.h. erzeugt die Tabellen, Views, Funktionen und Abfragen. Die Abfragen werden in den Themenbaum eingehängt. &lt;br /&gt;
|-&lt;br /&gt;
| module_etl.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_etl.x sos $SOS_PFAD&lt;br /&gt;
| Aktualisiert das Modul, d.h. lädt die Rohdaten, Transformiert sie, und aggregiert die Hilfstabellen. Fehler werden in eine Log-Datei geschrieben, diese kann dann per Mail an einen Admin versandt werden. Wenn das Script erfolgreich durchläuft, wird die Tabelle systeminfo aktualisiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Script wird nicht direkt als Cronjob aufgerufen, sondern von einem Shellscript, das die Umgebungsvariablen und Parameter setzt, z.B. cob_update.x.&lt;br /&gt;
|-&lt;br /&gt;
| module_drop.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_ drop.x sos $SOS_PFAD&lt;br /&gt;
| Entfernt das Modul bzw. die Tabellen, Views, Funktionen und Abfragen.&lt;br /&gt;
|-&lt;br /&gt;
| module_scripts_create.x -name- -pfad- -Datenbanksystem(optional, INFORMIX, POSTGRES)- -Versionsnr.-&lt;br /&gt;
| Erzeugt via XSL-Transformation die jeweiligen Scripte, die in den obigen Scripten aufgerufen werden, z.B. bau_install_ids.sql für das Installationsscript des Baumoduls beim Informix Dynamic Server.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den operativen Scripten erzeugt module_scripts_create.x auch html-Dateien zur Dokumentation eines Moduls in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/-Modulname-.html&lt;br /&gt;
(auch als rtf-Datei zu Einbindung in Modul-Dokumentationen) sowie zur Schnittstelle in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/rohdaten/-Modulname-_unload.html&lt;br /&gt;
Darüber hinaus werden auch DBForms-Formulare erzeugt.&lt;br /&gt;
&lt;br /&gt;
=== Installation eines Moduls: Allgemeines Vorgehen ===&lt;br /&gt;
Das Vorgehen bei der Installation eines Moduls ist standardisiert. Im folgenden eine Kurzbeschreibung, weiter unten finden Sie das Vorgehen am Beispiel des ZUL-Moduls im Detail.&lt;br /&gt;
* Entpacken Sie das Modul in $SUPERX_DIR&lt;br /&gt;
* Erweiterung der Umgebung in der Datei $SUPERX_DIR/db/bin/SQL_ENV: fügen Sie den Inhalt der jew. Beispieldatei SQL_ENV_-Modulname-.sam in der SQL_ENV an, wenn noch nicht vorhanden, und ändern Sie ggf. Email-Adressen für log- und Fehlermails.&lt;br /&gt;
* Entladen der Rohdaten; auch hier müssen vorher Umgebungsvariablen zum Vorsystem angepasst werden&amp;lt;br /&amp;gt;&lt;br /&gt;
(Datei $-Modulname-_LOAD_PFAD/-Modulname-_ENV), hier liegt ebenfalls eine *.sam-Datei vor&lt;br /&gt;
* Kopieren der Rohdaten nach -Modulpfad-/rohdaten. Neuere SuperX-Module haben dafür vorgefertigte Scripte mit dem Namen -Modulname-_copy.x (z.B. zul_copy.x)&lt;br /&gt;
* Installieren Sie das Modul mit -Modulname-_erzeugen.x, z.B. mit  zul_modul_erzeugen.x&lt;br /&gt;
* Wenn die Installation erfolgreich war, können Sie das Modul aktualisieren mit&amp;lt;br /&amp;gt;&lt;br /&gt;
-Modulname-_update.x (ggf. mit Parametern)&amp;lt;br /&amp;gt;&lt;br /&gt;
z.B. mit &lt;br /&gt;
 zul__update.x&lt;br /&gt;
d.h. die ETL-Prozesse werden gestartet (s.u.).&lt;br /&gt;
* Wenn das Modul erfolgreich aktualisiert ist, wird eine Prüfprozedur gestartet, die die Daten plausibilisiert. Fehler und Warnungen finden Sie in der Datei $-Modulname-_ERRORDAT.&lt;br /&gt;
* Starten Sie Tomcat neu. Wenn Tomcat auf einem separaten Server installiert ist, müssen Sie vorher die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml dorthin übertragen. &lt;br /&gt;
* Schritt 7 wird bei jedem SuperX-Update wiederholt. Nun muss der Entladerhythmus geplant werden, und die Cronjobs werden eingerichtet. Es gibt eine Musterdatei $SUPERX_DIR/db/module/-MODULNAME-/-MODUL-_update_cron.x.sam , benennen sie diese um nach -MODUL-_update_cron.x und fügen Sie das Script in die crontab ein. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines zum Laden ====&lt;br /&gt;
Zunächst müssen die Rohdaten aus dem Vorsystem entladen werden. &lt;br /&gt;
Für das Entladen gibt es ferner zwei Modi: Das &amp;quot;Pull&amp;quot;-Verfahren und das &amp;quot;Push&amp;quot;-Verfahren. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Pull&amp;quot;-&#039;&#039;&#039;Verfahren wird einer Benutzerkennung auf dem SuperX-Rechner Zugriffsrecht auf die SOSPOS-Datenbank gegeben, und die Daten werden via TCP/IP aus dem Basissystem entladen. Bei APP / HISinOne als Quellsystem ist &amp;quot;Pull&amp;quot; das Standardvorgehen. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Push&amp;quot;-&#039;&#039;&#039;Verfahren werden die Entladescripte auf den SOSPOS-Rechner kopiert und dort von einer Benutzerkennung auf dem SOSPOS-Rechner ausgeführt. Die Rohdaten müssen dann auf den SuperX-Rechner kopiert werden. Dieses Verfahren klappt bei Informix unter Unix problemlos, bei Entladen aus Postgres müsste das komplette SuperX-Kernmodul installiert werden. &lt;br /&gt;
Am einfachsten ist immer das &amp;quot;Pull&amp;quot;-Verfahren, das mit fast allen Quellsystemen funktioniert und wenig Konfiguration auf dem Quellsystem erfordert. Aufgrund von Sicherheitsvorkehrungen oder Netz-Infrastrukturen wählen aber viele Hochschulen das &amp;quot;Push&amp;quot;-Verfahren. Da derzeit Informix /Unix die gängigste Plattform an Hochschulen ist, ist dies auch kein Problem. &lt;br /&gt;
&lt;br /&gt;
==== Einrichtung der Entladescripte ====&lt;br /&gt;
Im Push-Verfahren btw. unter SuperX können Sie mitgelieferte Shellscripte nutzen. Das folgende Beispiel des ZUL-Moduls zeigt das Vorgehen:&lt;br /&gt;
Die Entladescripte liegen im Verzeichnis $SUPERX_DIR/db/module/zul/rohdaten und lauten je nach Systemversion: &lt;br /&gt;
 zul_unload.x&lt;br /&gt;
&lt;br /&gt;
Die Scripte laufen nur, wenn die entsprechenden Umgebungsvariablen in der Datei ZUL_ENV (im gleichen Verzeichnis, ein Muster liegt vor in ZUL_ENV.sam) korrekt gesetzt sind, benennen Sie die Musterdatei um nach ZUL_ENV und tragen die richtigen Umgebungsvariablen ein, z.B. den Pfad für $INFORMIXDIR. &lt;br /&gt;
&#039;&#039;&#039;ZUL_ENV Die Umgebung für Entladescripte aus ZUL-GX(Auszug)&#039;&#039;&#039; &lt;br /&gt;
 ##Pfad für Entladedaten:&lt;br /&gt;
 ZUL_PFAD=.; export ZUL_PFAD &lt;br /&gt;
 ##hier muss Unterverzeichnis unl existieren!&lt;br /&gt;
&lt;br /&gt;
 In der ZUL_ENV müssen außerdem folgende Umgebungsvariablen gesetzt werden (defaults sind bereits vorbelegt, aber hier und da müssen Sie sicher ran): &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Informix gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXDIR&lt;br /&gt;
| Home-Verzeichnis von Informix &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXSERVER&lt;br /&gt;
| Name des Informixservers &lt;br /&gt;
|-&lt;br /&gt;
| ONCONFIG&lt;br /&gt;
| Name der onconfig, wenn auf dem SOS-Rechner mehrere Informix-Instanzen laufen &lt;br /&gt;
|-&lt;br /&gt;
| CLIENT_LOCALE&lt;br /&gt;
| Sprachumgebung (wichtig fürs Entladen von Datumsformaten) &lt;br /&gt;
|-&lt;br /&gt;
| SERVER_LOCALE&lt;br /&gt;
| dito &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Postgres gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| PGDATESTYLE&lt;br /&gt;
| Datumsformat &amp;quot;German&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| PGPORT&lt;br /&gt;
| Port vom Postgres-Server, standardmäßig 5432 &lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname oder IP-Adresse vom Postgres-Server &lt;br /&gt;
|-&lt;br /&gt;
| PGUSER&lt;br /&gt;
| Benutzerkennung für Postgres-Server (nur Datenbank, nicht Betriebssystem) &lt;br /&gt;
|-&lt;br /&gt;
| PGPATH&lt;br /&gt;
| Installationsverzeichnis von Postgres, z.B. /usr/local/pgsql &lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur db-zul.properties-Datei mit den Zugangsparametern für SOSPOS unter Postgres &lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Pfad zur Steuerungsdatei mit den Parametern für das Logging beim Entladen, voreingestellt auf ./logging.properties. Normalerweise brauchen Sie hier nichts ändern, wenn beim Entladen Probleme auftauchen, kann man den Level von SEVERE auf INFO oder FINEST ändern, dann werden die konkreten SQLs geloggt. Aber Achtung: wenn keine Fehler mehr auftreten, müssen Sie den Level wieder auf SERVERE ändern, sonst kommen Schlüsselworte in die Logdatei zul_unload.err, die dann bei der Übernahme nach SuperX fälschlicherweise zu Fehlermeldungen führen. &lt;br /&gt;
|}&lt;br /&gt;
Unter Postgres muss für das &amp;quot;Pull&amp;quot;-Verfahren beim Entladen die Datenbankverbindung in der Datei db-zul.properties eingetragen werden (Muster für Postgres liegt bei in db-zul_pg.properties). Dazu laden Sie einmal die Datei ZUL_ENV mit den obigen Parameter, starten den SuperX-Propadmin (siehe Administrationshandbuch Kernmodul) und richten die Verbindung zum SOSPOS-Server ein. Das Kennwort wird verschlüsselt gespeichert. Danach sind die Entladescripte für Postgres ausführbar. &lt;br /&gt;
Hinweis: Anders als Informix hat Postgres hat eine eigene, vom Basissystem unabhängige Benutzerverwaltung. Daher brauchen Sie den User, den Sie zum Entladen aus Postgres nutzen, nicht auf dem SuperX- oder SOSPOS-Rechner auf Betriebssystem-Ebene einrichten. Sie können also z.B. auf dem SuperX-Rechner zum Entladen aus SOSPOS die Kennung sospos des Postgres- Rechners verwenden. Oder Sie richten in der SOSPOS -Datenbank den Benutzer SuperX ein und geben ihm Leserecht auf die Tabellen sowie das Recht, Tabellen und Stored Procedures anzulegen. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Für alle Platformen gelten folgende Variablen:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ERRORMAIL&lt;br /&gt;
| An wen solle eine Logmail verschickt werden, wenn das Entladen nicht geklappt hat? (nur Unix). &lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL&lt;br /&gt;
| An wen soll immer eine Logmail verschickt werden &lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Pfad zum ausführbaren Mailprogramm unter Unix, Vorbelegung ist &amp;quot;mail&amp;quot;, manche Unixe haben aber auch &amp;quot;mutt&amp;quot; oder &amp;quot;mailx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom ZUL-Rechner auf den SuperX-Rechner kopiert werden sollen, dann werden für das Script zul_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync und scp sind wählbar. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem SuperX-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/zul/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem SuperX-Rechner, in der Regel &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des SuperX-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Dann starten Sie das Script zul_unload.x. Wenn es gelaufen ist, müssten die Dateien im unl-Verzeichnis stehen. Prüfen Sie dann bitte, ob dort Dateien mit 0 bytes stehen. Die Logdatei heisst zul_unload.err. &lt;br /&gt;
&lt;br /&gt;
===== Entladen unter Windows =====&lt;br /&gt;
Für das Entladen unter Windows gibt es Muster-Dateien im jew. Rohdaten-Verzeichnis, z.B. $SOS_PFAD/rohdaten/sos_unload.bat. Die Einrichtung geschieht dann in [[Kernmodul_Komponentenverwaltung#Java-Client_zum_Entladen_von_Quell-Datenbanken|Java]]. Ans Ende der Datei können Sie noch schreiben:&lt;br /&gt;
date /T &amp;gt;superx.datum&lt;br /&gt;
Dann wird auch die Datumsdatei geschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Dateitransfer beim Push-Verfahren =====&lt;br /&gt;
Wenn Sie das Verzeichnis nicht gemounted haben, müssen das Verzeichnis unl, die zul_unload.err und die superx.datum dann in das Verzeichnis $ZUL_LOAD_PFAD auf dem SuperX-Rechner kopiert werden, ein Script dafür liegt ebenfalls bei (zul_copy.x). Das Entladedatum wird danach in der Textdatei $ZUL_LOAD_PFAD/superx.datum gespeichert; wenn das Script einen Fehler findet, dann wird das vorherige Datum (in der Datei superx.datum.alt) gesetzt. &lt;br /&gt;
&lt;br /&gt;
Für den Transfer der Rohdaten beim Push-Verfahren wird in SuperX die dateibasierte Schnittstelle genutzt. Unter UNIX läßt sich dieser Transfer vollends automatisieren, indem die Programme scp oder rsync auf der Basis des OpenSSH-Pakets genutzt werden. Beide setzen auf das ssh-Protokoll 2 auf und stellen somit einen verschlüsselten Dateitransfer sicher. Auch [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] ist möglich. &lt;br /&gt;
In den jeweiligen Modulen wird im Verzeichnis rohdaten eine Beispieldatei mit dem Namen -MODULNAME-_ENV.sam ausgeliefert, die Sie umbenennen können nach -MODULNAME-_ENV. Darin werden am Ende der Datei die Parameter zum Kopieren festgelegt, also die Userkennung REMOTE_USER, der Hostname REMOTE_HOST, und die Methode des Kopierens (COPY_METHOD) sowie die jeweiligen Zielpfade. Diese Umgebungsvariablen werden von dem jeweiligen Script -modulname-_copy.x benutzt. &lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Unix =====&lt;br /&gt;
Damit die Passworteingabe unter Unix entfällt, muss man wie folgt vorgehen:&lt;br /&gt;
Loggen Sie sich zunächst testweise einmal ein. Wenn Sie z.B. vom COB-Server auf den SuperX-Server kopieren wollen, loggen Sie sich als user cob auf cobhost ein mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh superx@superxhost&lt;br /&gt;
Beim ersten Mal müssen Sie die Sicherheitsabfrage mit &amp;quot;yes&amp;quot; bestätigen.&lt;br /&gt;
Erzeugen Sie auf dem Quellrechner einen öffentlichen Schlüssel mittels &lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;cob@cobhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 wobei man eine leere Passphrase vergibt. Der öffentliche Teil dieses Schlüssels (~/.ssh/id_ed25519.pub) muss auf dem Zielrechner in die Datei ~/.ssh/authorized_keys eingefügt werden, ggf. muss die Datei neu erzeugt werden.&lt;br /&gt;
Wenn z.B. auf dem COB-Server unter der Kennung cob ein Key wie folgt erzeugt wurde:&lt;br /&gt;
&lt;br /&gt;
;Beispieleintrag eines Public Keys:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-ed25519 AAAAC3N.[hier viele kryptische Zeichen]....4V cob@cobhost&lt;br /&gt;
&lt;br /&gt;
Dann wird genau diese Zeile in der Datei /home/superx/.ssh/authorized_keys angefügt (die Datei kann mehrere PublicKeys enthalten, ein Eintrag pro Absatz).&lt;br /&gt;
Achten Sie auch auf Dateirechte: Die Verzeichnisse und Dateien sollten keine Schreibrechte für Gruppen haben. Im Zweifelsfall z.B. für den user superx:&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 600 /home/superx/.ssh/authorized_keys&lt;br /&gt;
Danach sollte z.B. der Login vom cobhost als user cob mit ssh superx@superxhost ohne Passworteingabe klappen. Wenn nicht, schalten Sie das Logging mit ssh -v superx@superxhost ein. Eine Möglichkeit ist, dass die PublicKey-Authentifizierung in der Konfigurationsdatei des SSHD (normal /etc/ssh/ssh_config) abgeschaltet ist. Weitere Diagnosen liefert die Datei /var/log/messages.&lt;br /&gt;
Sie können außerdem noch einschränken, von welchem Host die obige Authentifizierung ermöglicht wird. Dazu setzen Sie den Parameter &amp;quot;from=*.uni-xy.de&amp;quot; davor, z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Einschränkung &amp;quot;from&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
in authorized_keys&lt;br /&gt;
| from=&amp;quot;*.uni-xy.de&amp;quot; ssh-rsa AAAAB3Nza…[hier viele kryptische &lt;br /&gt;
Zeichen]…pg6VkCc= cob@cobhost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Kopiermethode scp benutzen, und die obige &amp;quot;authorized_keys&amp;quot;-Metohde mit PublicKey nicht nutzen wollen, können Sie auch mit Private Keys arbeiten (siehe SSH-Doku). Dazu können sie in der *_ENV-Datei in dem Parameter SCP_OPTS den Verweis auf den private Key setzen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| SCP_OPTS in *_ENV:&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel COB_ENV&lt;br /&gt;
| SCP_OPTS=&amp;quot;-p -B -i /home/cob/.ssh/superx_key&amp;quot;&lt;br /&gt;
export SCP_OPTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Windows =====&lt;br /&gt;
Wenn Sie die ssh-Shell putty aus dem Installationspaket nutzen, haben Sie im Installationsordner auch die Anwendung &amp;quot;puttyGen.exe&amp;quot;. Wenn Sie putty als reine Executable nutzen, laden Sie die Anwendung separat herunter. [http://winscp.net/download/puttygen.exe PuttyGen]&lt;br /&gt;
*     Folgen Sie der Anleitung auf der Seite http://winscp.net/eng/docs/ui_puttygen, um den SSH2-DSA oder RSA Schlüssel zu erzeugen. Für den Schlüssel bitte kein Passwort vergeben, wenn Sie das Tool automatisiert nutzen.&lt;br /&gt;
*     Den privaten Schlüssel geben Sie in Putty bzw. Winscp im Menü &amp;quot;Session&amp;quot; im Feld &amp;quot;Private Key File&amp;quot; an.&lt;br /&gt;
*    Der Button &amp;quot;Save public key&amp;quot; ist nicht für OPENSSH unter Linux als Zielserver geeignet. Im folgenden Screenshot sehen Sie den markierten Bereich, den Sie kopieren müssen:&lt;br /&gt;
[[Bild:puttygen.png|413x402px]]&lt;br /&gt;
*     Kopieren Sie Ihren Public Key, den Sie oben mit PuttyGen erzeugt haben, zur Datei &amp;quot;authorized_keys&amp;quot; und kopieren Sie diese in das Verzeichnis ~/.ssh/&lt;br /&gt;
* Im Profil unter Connection -&amp;gt; SSH -&amp;gt; Auth -&amp;gt; Credentials geben Sie den Pfad zum privaten Schlüssel in &amp;quot;Private key file&amp;quot; an.&lt;br /&gt;
* Bei erneutem Login mit Putty oder Winscp sollte die Passwortabfrage entfallen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP (Server) =====&lt;br /&gt;
Beim Push-Verfahren wird, wenn mit scp oder rsync kopiert wird, eine Login-Shell vorausgesetzt. Wenn dies aus Sicherheitsgründen nicht gewünscht ist bzw. wg. Einsatz von Windows nicht möglich ist, können Sie auch sftp nutzen, dies wird in modernen ssh-Servern mitgeliefert und bietet ebenfalls verschlüsselten Datentransfer. Zur Einrichtung des Servers:&lt;br /&gt;
Der SSH-Dienst wird wie folgt konfiguriert (am Beispiel Ubuntu Linux 22.04 LTS) mit dem SFTP-Verzeichnis /home/sftp/-benutzername: &lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/ssh/sshd_config die Zeile auskommentieren:&lt;br /&gt;
 #Subsystem      sftp    /usr/lib/openssh/sftp-server&lt;br /&gt;
und stattdessen:&lt;br /&gt;
 Subsystem sftp internal-sftp&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
         ChrootDirectory /home/sftp/%u&lt;br /&gt;
         ForceCommand internal-sftp&lt;br /&gt;
        AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Danach starten Sie den SSH-Dienst neu:&lt;br /&gt;
 service ssh restart&lt;br /&gt;
&lt;br /&gt;
Dann legen Sie die Gruppe &amp;quot;sftponly&amp;quot; an:&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
 und dann den Unix-User an, und geben ihm die Gruppe &amp;quot;sftponly&amp;quot;. Hier ein Script:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SFTPUSERNAME=$1&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 useradd -b /home/sftp -s /bin/false -G sftponly $SFTPUSERNAME&lt;br /&gt;
 chown root:root /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 chmod 755 /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
 chown $SFTPUSERNAME:sftponly /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
&lt;br /&gt;
Danach legen Sie mit &lt;br /&gt;
 passwd $SFTPUSERNAME&lt;br /&gt;
ein Passwort fest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der User kann sich dann nicht mehr mit ssh einloggen, nur noch mit sftp, und landet beim Login in /home/$KENNUNG, in einem &amp;quot;chroot-Käfig&amp;quot;, und der User kann mit SFTP in den Ordner &amp;quot;incoming&amp;quot; schreiben. Zum Testen geben Sie ein: &lt;br /&gt;
 sftp $KENNUNG@-Host-&lt;br /&gt;
&lt;br /&gt;
Wenn beim SFTP Login die Meldung kommt:&lt;br /&gt;
 client_loop: send disconnect: Broken pipe&lt;br /&gt;
müssen Sie darauf achten dass das Home-Verzeichnis des Users nicht dem User gehört, sondern root.&lt;br /&gt;
&lt;br /&gt;
Wenn der Login klappt, können Sie nach dem [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|oben]]  beschriebenen Verfahren die Passworteingabe durch PublicKey-Authentifizierung ersetzen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP =====&lt;br /&gt;
Für das Kopieren der Rohdaten können Sie im Kopierscript &amp;quot;-modulname-_copy.x&amp;quot; auch sftp-Kommandos nutzen. Sie müssen nur in der ENV-Datei die Variable&lt;br /&gt;
 COPY_METHOD=sftp&lt;br /&gt;
setzen. Alle anderen Variablen und Mechanismen wie z.B. [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|Entfernen der Passworteingabe]] entsprechen denen von SCP / SSH (s.o.). &lt;br /&gt;
Spezielle Optionen fürs sftp können Sie in der Umgebungsvariable SFTP_OPTS setzen. Es kann z.B. sein, dass das Kopieren großer Dateien in einen Timeout läuft. Bei CSV bietet es sich an, die Dateien zu komprimieren, sie können also setzen:&lt;br /&gt;
 SFTP_OPTS=&amp;quot;-oCompression=yes&amp;quot;&lt;br /&gt;
 export SFTP_OPTS&lt;br /&gt;
Danach wiederholen Sie das kenn_copy.x&lt;br /&gt;
Dies ist nur ein Beispiel. Weitere Optionen für SFTP entnehmen Sie der manpage.&lt;br /&gt;
Das Kopieren mit sftp klappt übrigens auch unter Windows z.B. mit dem Programm [http://winscp.net/eng/docs/lang:de winscp]. Dies wird im folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP unter Windows =====&lt;br /&gt;
Unter Windows ist das Standardprogramm für SFTP die Anwendung [http://winscp.net/eng/docs/lang:de winscp]. Sie können die Passworteingabe analog zu Putty [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|entfernen]]. Danach können Sie eine Session erzeugen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp1.png|517x364px]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;quot;Private key file&amp;quot; geben Sie den private key ein, den Sie [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|oben]] erzeugt haben. Klicken Sie dann auf &amp;quot;Save session&amp;quot;, und geben Sie einen kurzen, sprechenden Namen ohne Leerzeichen oder Umlaute, z.B. &amp;quot;superx@vmmulti1&amp;quot;&lt;br /&gt;
Sie müssen nun die Verzeichnisse lokal und remote in der Winscp-Session speichern, im Menüpunkt &amp;quot;Directories&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp2.png|517x359px]]&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie auch hiernach nicht, die Session zu speichern. &lt;br /&gt;
Danach testen Sie einmal den Zugang. Wenn das klappt können Sie Winscp auch für die Kommandozeile automatisieren. Sie erzeugen zunächst eine Textdatei mit den Kommandos für Winscp, dies enthält auch die zu übertragenden Dateien. Der Aufbau der Datei ist wie folgt:&lt;br /&gt;
 open -Sessionname-&lt;br /&gt;
 # Upload the file to current working directory&lt;br /&gt;
 put -Datei-&lt;br /&gt;
 # Disconnect&lt;br /&gt;
 close&lt;br /&gt;
 # Exit WinSCP&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Die zu übertragenden Dateien sind in der Musterdatei des jew. Moduls in rohdaten/-Modulname-_sftp.txt aufgelistet, Sie müssen lediglich &lt;br /&gt;
* den &amp;quot;/&amp;quot; durch einen &amp;quot;\&amp;quot; ersetzen&lt;br /&gt;
* das Entladeprotokoll -Modulname-_unload.err und die Datumsdatei superx.datum hinzufügen&lt;br /&gt;
Hier ein Beispielscript fürs das Studierenden-Modul:&lt;br /&gt;
	open superx@vmmulti1&lt;br /&gt;
	# Change remote directory&lt;br /&gt;
	# Upload the file to current working directory&lt;br /&gt;
	put sos_unload.err&lt;br /&gt;
	put superx.datum&lt;br /&gt;
	put unl\konstanten.unl&lt;br /&gt;
	put unl\sos_studenten.unl&lt;br /&gt;
	put unl\sos_hzb.unl&lt;br /&gt;
	put unl\sos_faecher.unl&lt;br /&gt;
	put unl\sos_pord_to_stg.unl&lt;br /&gt;
	put unl\sos_pruefungenext.unl&lt;br /&gt;
	put unl\sos_pruefungen.unl&lt;br /&gt;
	put unl\sos_lab_astat_attributes.unl&lt;br /&gt;
	put unl\sos_stud_loe.unl&lt;br /&gt;
	put unl\sos_faecher_ext.unl&lt;br /&gt;
	put unl\sos_faecher_kontrolle.unl&lt;br /&gt;
	put unl\sos_pruefungen_kontrolle.unl&lt;br /&gt;
	put unl\sos_anschri.unl&lt;br /&gt;
	put unl\sos_parstg.unl&lt;br /&gt;
	put unl\sos_hsnr.unl&lt;br /&gt;
	put unl\semester.unl&lt;br /&gt;
	put unl\cif.unl&lt;br /&gt;
	put unl\cifx.unl&lt;br /&gt;
	put unl\k_pvers.unl&lt;br /&gt;
	put unl\k_stg.unl&lt;br /&gt;
	put unl\k_stgext.unl&lt;br /&gt;
	put unl\k_abstgv.unl&lt;br /&gt;
	put unl\sos_pord.unl&lt;br /&gt;
	put unl\sos_dipl.unl&lt;br /&gt;
	put unl\sos_minder.unl&lt;br /&gt;
	put unl\sos_stud_d.unl&lt;br /&gt;
	put unl\sos_pords.unl&lt;br /&gt;
	put unl\sos_porg.unl&lt;br /&gt;
	put unl\sos_labzuord.unl&lt;br /&gt;
	put unl\sos_pnrzuord.unl&lt;br /&gt;
	put unl\sos_gewichtungsvariante.unl&lt;br /&gt;
	put unl\sos_gewichtungregel_filter.unl&lt;br /&gt;
	put unl\sos_gewichtungregel.unl&lt;br /&gt;
	put unl\personattribute.unl&lt;br /&gt;
	put unl\personattributetype.unl&lt;br /&gt;
	put unl\personattribute_value_list.unl&lt;br /&gt;
	put unl\stu_update_prot.unl&lt;br /&gt;
	put unl\exa_update_prot.unl&lt;br /&gt;
	put unl\sos_accredited_ects.unl&lt;br /&gt;
	put unl\sos_pord_orgeinheit.unl&lt;br /&gt;
	# Disconnect&lt;br /&gt;
	close&lt;br /&gt;
	# Exit WinSCP&lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
Die Datei hat z.B. den Namen winscp_example_script.txt. Dann können Sie das Script aufrufen mit dem DOS-Kommando:&lt;br /&gt;
 winscp /script=-Pfad zu-\winscp_example_script.txt&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot wie das dann aussieht:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp3.png|609x337px]]&lt;br /&gt;
&lt;br /&gt;
Das DOS-Kommando läßt sich dann über die Windows-Taskverwaltung automatisieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Java-Client zum Entladen von Quell-Datenbanken =====&lt;br /&gt;
Zum Entladen aus dem operativen Vorsystem wird unter Informix dbaccess genutzt. Unter Postgres wird generell der SuperX-JAVA-Client zum Entladen genutzt, denn SuperX benötigt ein spezielles, an Informix angepasstes [[Kernmodul_Komponentenverwaltung#Format_der_Unload_Dateien_CSV|CSV-Format]], das sich mit Bordmitteln von Postgres (copy-Befehl) nicht erzeugen lässt. Es kann aber auch sinnvoll sein, aus der Informix-Datenbank mit SuperX-JAVA-Client zu entladen, z.B. wenn Sie kein UNIX-dbaccess auf dem Vorsystem installiert haben. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie das jew. operative Vorsystem im PUSH-Verfahren entladen wollen, d.h. die Rohdaten werden auf dem Vorsystem entladen und auf den SuperX-Rechner kopiert, dann müssen Sie spezielle Vorkehrungen treffen. SuperX nutzt generell zum Entladen eigene Java-Klassen. Beim Entladen im PULL-Verfahren sind diese Klassen vorhanden, denn die Entladeroutine läuft auf dem SuperX Rechner. Wenn Sie aber PUSH nutzen wollen, werden die SuperX-Java-Klassen auf dem Liefersystem benötigt, und die Entladeroutine muss konfiguriert sein. Im Folgenden nutzen wir das Beispiel &amp;quot;Entladen im Push-Verfahren aus SVA-GX unter Postgres&amp;quot;. Gehen Sie dazu wie folgt vor:&lt;br /&gt;
* Kopieren Sie die Dateien &lt;br /&gt;
** superx*jar&lt;br /&gt;
** postgresql-*.jar&lt;br /&gt;
** jfor-0.7.2rc1.jar&lt;br /&gt;
* vom SuperX-Rechner im Verzeichnis $SUPERX_DIR/tomcat/webapps/superx/WEB-INF/lib auf den Quellrechner in ein Unterverzeichnis lib unter rohdaten (z.B. /home/sva/superx/rohdaten/lib). In rohdaten liegt die bisherige Entladeroutine (z.B. sva_unload.x). &lt;br /&gt;
* Kopieren Sie die *_ENV.sam -Datei nach *_ENV, also hier SVA_ENV.sam nach SVA_ENV&lt;br /&gt;
* Fügen Sie dann folgenden Passus in die Umgebungs-Datei der Entladeroutine, hier also SVA_ENV:&lt;br /&gt;
 #Pfad zu den SuperX-Java-Libraries&lt;br /&gt;
 #Der JDBC_CLASSPATH enthält alles, was der jdbc-Client in superx für den Datenbankzugriff braucht.&lt;br /&gt;
 #jfor*.jar, postgresql*.jar&lt;br /&gt;
 JDBC_CLASSPATH=&amp;quot;$SVA_LOAD_PFAD/lib/superx5.0.jar:$SVA_LOAD_PFAD/lib/postgresql-42.2.19.jar:$SVA_LOAD_PFAD/lib/jfor-0.7.2rc1.jar&amp;quot;&lt;br /&gt;
 export JDBC_CLASSPATH&lt;br /&gt;
&lt;br /&gt;
Wenn dann noch die Variablen [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] und LOGGER_PROPERTIES korrekt gesetzt sind, kann die Entladeroutine bei SX_CLIENT=jdbc (Wenn Sie unter Windows entladen, oder Informix ohne dbaccess entladen wollen) oder SX_CLIENT=psql (wenn Sie Postgres unter UNIX nutzen) mit Java entladen.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Entladescript ausführen:&lt;br /&gt;
 sva_unload.x&lt;br /&gt;
Die Logdatei lautet sva_unload.err&lt;br /&gt;
&lt;br /&gt;
Zum Kopieren der Rohdaten zum SuperX-Server passen Sie folgende Variablen an:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom SVA-Rechner auf den BI-Rechner kopiert werden sollen, dann werden für das Script sva_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync, [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] und scp sind wählbar [Achtung: diese müssen dann betriebssystemseitig installiert sein]. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem BI-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/sva/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem BI-Rechner, in der Regel &amp;quot;tomcat&amp;quot; oder &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des BI-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Danach starten Sie &lt;br /&gt;
 sva_copy.x&lt;br /&gt;
Die Logdatei lautet sva_copy.err&lt;br /&gt;
&lt;br /&gt;
Weitere Entladeparameter werden in den modulspezifischen Administrationshandbüchern beschrieben.&lt;br /&gt;
{{Hinweis|Bei neuen SuperX-Versionen reicht es in der Regel, die modulspez. Dateien auszutauschen, also hier sva_unload.* etc.}}&lt;br /&gt;
&lt;br /&gt;
== Update eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Wenn das Entladen aus dem Vorsystem geklappt hat (sofern es ein Vorsystem gibt), können Sie die Daten laden. Zum Update bzw. zum Laden der Rohdaten gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname- und führen das Script aus:&lt;br /&gt;
-Modulname-_update.x&lt;br /&gt;
Die Logdatei lautet L_-Modulname-_UPDATE.log, im Mandantenfähigen Betrieb &amp;quot;L_-Modulname-_UPDATE-MANDANTID-.log&amp;quot;.&lt;br /&gt;
Für die Aufnahme der Laderoutine in die crontab gibt es im gleichen Verzeichnis Musterscripte nach dem Namensmuster:&lt;br /&gt;
-Modulname-_update_cron.x&lt;br /&gt;
Je nach Push/Pull-Szenario können Sie auch den Unload darin starten oder nicht.&lt;br /&gt;
&lt;br /&gt;
=== Modulupdate in mandantenfähigen Installationen ===&lt;br /&gt;
Der Modulupdate in mandantenfähigen Installation findet in einer SuperX-Installation statt, allerdings werden die einzelnen Scripte mit unterschiedlichen Umgebungsvariablen, wie sie in SQL_ENV.-MANDANTID- definiert ist, z.B. SQL_ENV.FHRO.&lt;br /&gt;
In der SQL_ENV.-MANDANTID- werden unterschiedliche Pfade für den jeweiligen *_LOAD_PFAD gesetzt, wobei in der Regel die Mandandid ein Unterverzeichnis vom &amp;quot;normalen&amp;quot; LOAD_PFAD ist. So ist z.B. beim COB-Modul folgender Pfad anzusetzen:&lt;br /&gt;
Normale SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten&lt;br /&gt;
Mandantenfähige SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten/FHRO&lt;br /&gt;
Unterhalb von FHRO befindet sich noch einmal die Entladeroutine sowie das Unterverzeichnis unl mit den Rohdaten. Dieses Verzeichnis FHRO kann der Einfahheit halber auch ein symbolischer Link auf den gemounteten COB-Rechner sein.&lt;br /&gt;
Durch Setzen der Mandantennummer in der Umgebungsvariable MANDANTID in der jeweiligen SQL_ENV des Mandanten werden die ETL-Scripte anders ausgeführt: Die Logdateien werden jeweils mit der Mandantennummer versehen (z.B. L_cob_updateFHRO.log), damit die Übersicht nicht verloren geht und der gleichzeitige Update mehrerer Mandanten in eine rsuperX-Installation möglich ist.&lt;br /&gt;
Außerdem können weitreichende Steuerungsmechanismen im Modulupdate eingesetzt werden: Nach jedem ETL-Schritt können optional mandantenspezifische Scripte aufgerufen werden. Diese müssen folgende Namenskonvention einhalten:&lt;br /&gt;
 -Scriptname-_-MANDANTID-.sql&lt;br /&gt;
Also für eine hochschulspezifische Transformation im COB-Modul des Mandanten FHRO wird eine Datei namens&lt;br /&gt;
 cob_trans_FHRO.sql &lt;br /&gt;
mit entsprechenden SQL-Anweisungen angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Format der Unload Dateien CSV ===&lt;br /&gt;
Generell gilt das Prinzip, daß Daten vom Vorsystem in CSV entladen werden, und dann in sog. Ladetabellen hochgeladen werden. Da CSV je nach DBMS unterschiedlich implementiert wird, hier eine kurze Beschreibung des Formats, das im wesentlichen den Vorgaben von Informix LOAD entspricht:&lt;br /&gt;
* Zeichenformat: UNIX LATIN1 oder UTF-8&lt;br /&gt;
* Feldtrenner: ^ &lt;br /&gt;
* Satztrenner: Feldtrenner + UNIX NEWLINE&lt;br /&gt;
* Zeilenschaltung: Umbrüche innerhalb von Textfeldern sind als \ + NEWLINE codiert&lt;br /&gt;
* Feldtrenner, die im Textfeld vorkommen, werden mit &amp;quot;\&amp;quot; maskiert. Ebenso das Zeichen &amp;quot;\&amp;quot; selbst&lt;br /&gt;
* Die Datumsformate sind bei Datumsfeldern immer im deutschen Format (DD.MM.YYYY) vorgesehen&lt;br /&gt;
* Boolean-Werte werden durch &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; codiert&lt;br /&gt;
* Der Dezimaltrenner ist &amp;quot;.&amp;quot;, kein 1000-er Punkt bei Zahlen. &lt;br /&gt;
* Leerstrings und Leerzeichen werden als &amp;quot; &amp;quot; (Leerzeichen) exportiert.&lt;br /&gt;
&lt;br /&gt;
== Upgrade eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Zum Upgrade bzw. zum Zurücksetzen des Moduls auf den Auslieferungszustand entpacken Sie das Paket in $SUPERX_DIR und gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname-/upgrade und führen das Script aus:&lt;br /&gt;
-Modulname-_upgrade.x&lt;br /&gt;
Ausnahme: beim Kernmodul gibt es i.d.R. ein spezielles [[Kern_Installation_Upgrade#Standardvorgehen_beim_Upgrade|Upgrade Script]].&lt;br /&gt;
&lt;br /&gt;
Die Logdatei lautet upgrade.log, im Mandantenfähigen Betrieb &amp;quot;upgrade-MANDANTID-.log&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen separaten Tomcat-Rechner betreiben, müssen Sie das Paket dort ebenfalls entpacken, und vom Datenbankserver die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml an die gleiche Stelle auf den Tomcat Rechner kopieren. Ein nochmaliges Ausführen des Upgrade Scriptes ist nicht nötig, weil dies nur die Datenbank betrifft.&lt;br /&gt;
&lt;br /&gt;
== Hochschulspezifische Anpassung eines Moduls ==&lt;br /&gt;
=== Dateibasierte hochschulspezifische Anpassung ===&lt;br /&gt;
Nach der Installation bzw. beim Upgrade können Sie hochschuleigene SQL Scripte ausführen lassen. Erzeugen Sie dazu eine Datei &lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/customize.sql &lt;br /&gt;
bei Mandantenbetrieb&lt;br /&gt;
  $SUPERX_DIR/db/module/-Modulname-/conf/customize-MANDANTID-.sql &lt;br /&gt;
und füllen Sie diese mit einem beliebigen Inhalt. Das Script wird beim Upgrade des Moduls automatisch am Ende ausgeführt.&lt;br /&gt;
=== Datenbankbasierte hochschulspezifische Laderegeln ===&lt;br /&gt;
Eine Laderoutine gliedert sich in die Schritte&lt;br /&gt;
#Unload: Entladen der CSV Dateien aus dem jew. Vorsystem&lt;br /&gt;
#Load: Upload der CSV Dateien&lt;br /&gt;
#Trans: Transformation der Daten&lt;br /&gt;
#Aggr: Aggregation der Daten&lt;br /&gt;
#Test: Test der Daten&lt;br /&gt;
#System: Standdatum bei Erfolg aktualisieren&lt;br /&gt;
Es ist möglich über sog. &amp;quot;Preparation&amp;quot;- oder &amp;quot;Finalize&amp;quot;-[[Kernmodul_Shellscripte#Hochschulspezifische_Transformationen_im_ETL-Prozess|Scripte]] die Laderoutine am Ende von LOAD bzw. TRANS anzupassen. Dieses Verfahren ist weiterhin möglich, ist aber bzgl. Clustering und Schreibzugriff recht unflexibel.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich im Browser hochschulspezifische Scripte am Ende des jeweiligen Schrittes einer Laderoutine anzulegen. Dies funktioniert so: Die Laderoutine führt zunächst den allgemeinen, von uns vorgegebenen Ladeschritt aus. Wenn dann eine Repository-Variable mit einem gewissen Namensschema existiert, wird sie ausgeführt. Das Namensschema lautet &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Kürzel der Komponente&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;_CUSTOM&lt;br /&gt;
&amp;lt;/source&amp;gt;. &lt;br /&gt;
* Bei Hauptladeroutinen ist dies&lt;br /&gt;
*# Laden: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_load_CUSTOM, z. B. sos_load_CUSTOM&lt;br /&gt;
*# Transformation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_trans_CUSTOM, z. B. sos_trans_CUSTOM&lt;br /&gt;
*# Aggregation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_aggr_CUSTOM, z. B. sos_aggr_CUSTOM&lt;br /&gt;
* Bei Unterladeroutinen ist dies &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_&#039;&#039;&#039;ID des Ladeschritts&#039;&#039;&#039;_CUSTOM, also z. B. cob_trans_fin_busa_CUSTOM für die Unterladeroutine &amp;quot;Lade Buchungen aus FIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um eine Variable neu einzurichten:&lt;br /&gt;
* Gehen Sie in den BI-Standardberichten auf Administration/Hochschul-Repository.&lt;br /&gt;
* Wählen Sie das jeweilige Sachgebiet und schicken Sie das Formular ab.&lt;br /&gt;
* Klicken Sie bei einer Beispielzeile auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;.&lt;br /&gt;
* Im neuen Fenster klicken Sie oben ganz rechts auf das Symbol &#039;&#039;&#039;Datensatz kopieren&#039;&#039;&#039;.&lt;br /&gt;
* Definieren Sie die Variable z. B.&lt;br /&gt;
** als Variablenname die ID z. B.: fin_load_CUSTOM&lt;br /&gt;
** Art der Variable: ein für Sie sprechender Schlüssel mit Modulkürzel, z. B. &amp;quot;fin_Laderegel&amp;quot;&lt;br /&gt;
** als Inhalt der Variable die gewünschten Befehle, z. B. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update fin_buch_neu set ch110_institut=buchungsab_fb where length(buchungsab_fb)=5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** aktiv=1&lt;br /&gt;
** gültig seit 1.1.1900&lt;br /&gt;
** gültig bis 1.1.3000&lt;br /&gt;
* Klicken Sie oben rechts auf das Häkchen-Symbol für &#039;&#039;&#039;Datensatz einfügen&#039;&#039;&#039;.&lt;br /&gt;
* Schließen Sie das Fenster.&lt;br /&gt;
&lt;br /&gt;
Analog können Sie auch die [[Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung|customize]]-Regeln&amp;quot; ins Repository verlagern. Hier heißt die Variable z.B. fin_install_CUSTOM.&lt;br /&gt;
&lt;br /&gt;
== Entfernen eines Moduls ==&lt;br /&gt;
Wenn Sie ein Modul nicht mehr benötigen, starten Sie das Script&amp;lt;br /&amp;gt;&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/-Modulname-_modul_entfernen.x.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses Script löscht alle Tabellen, Prozeduren und Abfragen aus der Datenbank, und löscht auch die Einträge im Themenbaum. Danach können Sie den Pfad $SUPERX_DIR/db/module/-Modulname-löschen.&lt;br /&gt;
Wenn Sie nur die Inhalte der Daten- und Hilfstabellen des Moduls löschen wollen (z.B. aus Datenschutzgründen), ohne das ganze Modul zu deinstallieren, können Sie dies mit folgendem Befehl tun:&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_pg.sql (für Postgres)&amp;lt;br /&amp;gt;&lt;br /&gt;
bzw.&amp;lt;br /&amp;gt;&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_ids.sql (für Informix)&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16370</id>
		<title>Kernmodul Komponentenverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16370"/>
		<updated>2026-07-13T06:45:00Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Komponentenverwaltung im Kernmodul kann je nach Aufgabe über die Browseroberfläche oder über Shell-Skripte erfolgen.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden die Installation, Deinstallation, Aktualisierung und das Upgrade von Modulen überwiegend über Skripte in der Shell durchgeführt. Ab Kernmodul 6.0 steht zusätzlich eine Komponentenverwaltung über die Browseroberfläche zur Verfügung. Diese Browseroberfläche wird im Folgenden als SuperX ETL Manager beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager ist vor allem für die Ausführung und Überwachung von ETL-Prozessen sowie für Modul-Upgrades vorgesehen. Die Installation und Deinstallation von Modulen stehen dort bisher nicht zur Verfügung und werden weiterhin über die Shell-Skripte durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ist daher in zwei Bereiche gegliedert: Zuerst wird die Nutzung des SuperX ETL Managers beschrieben. Anschließend folgt die bisherige Dokumentation zur Installation und Verwaltung von Modulen mit Skripten.&lt;br /&gt;
&lt;br /&gt;
= Komponentenverwaltung im Browser: SuperX ETL Manager =&lt;br /&gt;
Der SuperX ETL Manager dient dazu, ETL-Prozesse der installierten SuperX-Module über die Weboberfläche auszuführen und zu überwachen. Er bietet eine zentrale Übersicht über installierte Module, verfügbare Aktionen, Versionsinformationen, Datenquellen, den aktuellen Lauf sowie technische Zusatzinformationen für die Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der Schwerpunkt der Oberfläche liegt auf dem täglichen Betrieb: Anwenderinnen und Anwender können Laderoutinen starten, den aktuellen Stand eines Laufs verfolgen und bei Bedarf die Log-Ausgabe einsehen. Technische Detail- und Diagnoseinformationen stehen ebenfalls zur Verfügung, sind aber vor allem für Administratorinnen und Administratoren oder den Support gedacht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Uebersicht.png|Gesamtübersicht des SuperX ETL Managers mit Modulübersicht, Filterbereich, Aktionsbuttons und aktuellem Lauf.]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Oberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche besteht im Wesentlichen aus folgenden Bereichen:&lt;br /&gt;
&lt;br /&gt;
* Filterbereich&lt;br /&gt;
* Modulübersicht&lt;br /&gt;
* Aktionsbuttons pro Modul&lt;br /&gt;
* Bereich „Aktueller Lauf“&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
* Details-Bereich&lt;br /&gt;
* Diagnose-Bereich&lt;br /&gt;
&lt;br /&gt;
Über den Filterbereich kann die angezeigte Modulliste eingeschränkt werden. Die Modulübersicht zeigt die wichtigsten Informationen zu den vorhandenen Modulen. Über die Aktionsbuttons können ETL-Prozesse gestartet werden. Der Bereich „Aktueller Lauf“ zeigt den zuletzt gestarteten oder aktuell laufenden Prozess an.&lt;br /&gt;
&lt;br /&gt;
Die Bereiche „Details“ und „Diagnose“ liefern zusätzliche technische Informationen. Sie sind hilfreich für Supportfälle, aber für die normale Bedienung nicht zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Modulübersicht ==&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt die installierten bzw. erkannten Module mit ihren wichtigsten Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Spalte&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Modul&lt;br /&gt;
| Zeigt den Namen und das technische Kürzel des Moduls, zum Beispiel „Administration“ mit dem Kürzel „kern“ oder „Kennzahlen“ mit dem Kürzel „kenn“.&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Zeigt, ob das Modul installiert ist.&lt;br /&gt;
|-&lt;br /&gt;
| Versionen&lt;br /&gt;
| Zeigt die installierte Version und die verfügbare Version des Moduls.&lt;br /&gt;
|-&lt;br /&gt;
| Letztes Update&lt;br /&gt;
| Zeigt den Zeitpunkt des letzten bekannten Updates.&lt;br /&gt;
|-&lt;br /&gt;
| Datenquelle&lt;br /&gt;
| Zeigt, aus welcher Datenquelle das Modul seine Daten bezieht oder auf welcher Datenbasis der ETL-Prozess arbeitet.&lt;br /&gt;
|-&lt;br /&gt;
| DB-Verbindung&lt;br /&gt;
| Zeigt, ob die Verbindung zur Datenbank bzw. Datenquelle aktuell erreichbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| Aktionen&lt;br /&gt;
| Zeigt die verfügbaren Aktionen für das jeweilige Modul.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Versionen ===&lt;br /&gt;
&lt;br /&gt;
In der Spalte „Versionen“ werden zwei Werte angezeigt:&lt;br /&gt;
&lt;br /&gt;
* installierte Version&lt;br /&gt;
* verfügbare Version&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der aktuell in der Datenbank installiert ist. Die verfügbare Version beschreibt den ausgelieferten Stand des Moduls, der in der Installation vorliegt.&lt;br /&gt;
&lt;br /&gt;
Wenn die verfügbare Version höher ist als die installierte Version, sollte in der Regel ein Upgrade des Moduls durchgeführt werden. Dadurch werden die Datenstrukturen des Moduls auf den ausgelieferten Stand aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Datenquelle ===&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle gibt an, aus welchem System ein Modul seine Daten bezieht oder auf welcher Datenbasis es arbeitet.&lt;br /&gt;
&lt;br /&gt;
SuperX ist ein Data Warehouse. Viele Module übernehmen Daten aus externen vorsystemen. Beispiele für solche Datenquellen sind:&lt;br /&gt;
&lt;br /&gt;
* cob für Kostenrechnung&lt;br /&gt;
* mbs für Finanzrechnung, Inventar oder Gebäude/Räume/Flächen&lt;br /&gt;
* sva für Personal- und Stelleninformationen&lt;br /&gt;
* hisinone bei entsprechend angebundenen Modulen&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es Module, die auf bereits in SuperX vorhandene Daten zurückgreifen. In solchen Fällen wird als Datenquelle „SuperX“ angezeigt. Das betrifft vor allem Module, die modulübergreifend, auswertungsorientiert oder spezialisiert auf vorhandene SuperX-Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
Beispiele hierfür können sein:&lt;br /&gt;
&lt;br /&gt;
* kenn für Kennzahlen&lt;br /&gt;
* man für Managementberichte&lt;br /&gt;
* erfolg für Studienverlauf bzw. Erfolgsbetrachtungen&lt;br /&gt;
* gang für Studiengänge&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle „SuperX“ bedeutet also nicht, dass keine Daten verarbeitet werden. Sie zeigt an, dass die Verarbeitung auf Daten basiert, die bereits im SuperX-System vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Aktionen ausführen ==&lt;br /&gt;
&lt;br /&gt;
Die verfügbaren Aktionen hängen vom jeweiligen Modul ab. Nicht jedes Modul unterstützt alle Aktionen. Wenn eine Aktion nicht verfügbar ist, wird der entsprechende Button nicht angezeigt oder ist nicht aktiv.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktionsbuttons.png|Modulzeile mit den Aktionsbuttons Unload, Update, Unload &amp;amp; Update und Upgrade.]]&lt;br /&gt;
&lt;br /&gt;
=== Unload ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ entlädt Daten aus einem angebundenen Vorsystem, sofern für das Modul ein Vorsystem angebunden ist.&lt;br /&gt;
&lt;br /&gt;
Der Unload dient dazu, Daten aus der jeweiligen Datenquelle bereitzustellen, damit sie anschließend in SuperX verarbeitet werden können. Je nach Modul und Einrichtung kann der Unload auch dazu dienen, Daten für eine weitere Verarbeitung oder Übertragung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Update“ lädt vorhandene Rohdaten in SuperX ein und führt die Hauptladeroutine des Moduls aus.&lt;br /&gt;
&lt;br /&gt;
Dies ist in vielen Fällen die wichtigste Aktion für den täglichen Betrieb. Beim Update werden die vorhandenen Rohdaten verarbeitet und die zugehörigen SuperX-Tabellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Unload &amp;amp; Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload &amp;amp; Update“ führt zuerst den Unload und anschließend das Update aus.&lt;br /&gt;
&lt;br /&gt;
Diese Aktion ist sinnvoll, wenn neue Daten aus einem angebundenen Vorsystem entladen und direkt anschließend in SuperX verarbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Upgrade“ führt eine Modulaktualisierung durch. Dabei werden die Datenstrukturen des Moduls auf den ausgelieferten Stand gebracht.&lt;br /&gt;
&lt;br /&gt;
Ein Upgrade sollte ausgeführt werden, wenn eine neue verfügbare Version angezeigt wird oder wenn dies im Rahmen eines Modulupdates erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
== Sonderfall Kennzahlen-Modul ==&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ ist die Verarbeitung etwas anders als bei typischen Modulen mit externem Vorsystem.&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist hier in der Regel „SuperX“. Das bedeutet, dass die Kennzahlen nicht primär aus einem externen Fremdsystem entladen werden. Stattdessen basiert die Verarbeitung auf Daten, die bereits in SuperX vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Für den täglichen Betrieb ist beim Kennzahlen-Modul daher häufig vor allem die Aktion „Update“ relevant. Dabei werden die Kennzahlen auf Basis der vorhandenen SuperX-Daten neu berechnet bzw. aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ kann beim Kennzahlen-Modul eine andere Bedeutung haben als bei klassischen Vorsystem-Modulen. Sie kann dazu dienen, Kennzahlen für ein anderes System bereitzustellen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* für ein hochschulübergreifendes SuperX&lt;br /&gt;
* für Vergleichssysteme&lt;br /&gt;
* für landesweite Auswertungen oder Berichtssysteme&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Aktion „Unload &amp;amp; Update“ ist beim Kennzahlen-Modul daher nicht immer die wichtigste Aktion. In vielen Installationen wird das Update gezielt über die Oberfläche ausgeführt, während Export- oder Übertragungsprozesse über automatische Abläufe wie Cronjobs gesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Lauf ==&lt;br /&gt;
&lt;br /&gt;
Der Bereich „Aktueller Lauf“ zeigt Informationen zum zuletzt gestarteten oder aktuell laufenden ETL-Prozess.&lt;br /&gt;
&lt;br /&gt;
Typische Informationen sind:&lt;br /&gt;
&lt;br /&gt;
* JobExecutionId&lt;br /&gt;
* Name des gestarteten Jobs&lt;br /&gt;
* Status&lt;br /&gt;
* Fortschritt&lt;br /&gt;
* Anzahl der ausgeführten Schritte&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktueller_Lauf.png|Bereich „Aktueller Lauf“ mit JobExecutionId, Status, Fortschritt und Log-Ausgabe.]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
Der Status zeigt den aktuellen Zustand des Laufs. Häufige Statuswerte sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| STARTING&lt;br /&gt;
| Der Lauf wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
| STARTED&lt;br /&gt;
| Der Lauf wurde gestartet und wird ausgeführt.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETED&lt;br /&gt;
| Der Lauf wurde erfolgreich abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| FAILED&lt;br /&gt;
| Der Lauf ist mit einem Fehler abgebrochen.&lt;br /&gt;
|-&lt;br /&gt;
| STOPPED&lt;br /&gt;
| Der Lauf wurde gestoppt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fortschritt ===&lt;br /&gt;
&lt;br /&gt;
Der Fortschritt zeigt, wie viele Prozessschritte bereits abgearbeitet wurden. Er ist als technischer bzw. prozessbezogener Fortschritt zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Fortschrittswert ist keine genaue Zeitprognose.&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann schnell auf eine hohe Prozentzahl springen und dort längere Zeit stehen bleiben, wenn ein einzelner Verarbeitungsschritt besonders lange dauert. Umgekehrt können viele kleine Schritte sehr schnell nacheinander abgeschlossen werden. Die Prozentanzeige beschreibt daher den Abarbeitungsstand der Prozessschritte, nicht die tatsächlich vergangene oder verbleibende Zeit.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann bereits 80 % anzeigen, obwohl noch ein größerer Verarbeitungsschritt aussteht. Ebenso kann ein Lauf am Anfang längere Zeit bei einer niedrigen Prozentzahl stehen bleiben, wenn ein früher Prozessschritt besonders umfangreich ist.&lt;br /&gt;
&lt;br /&gt;
== Log-Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe zeigt technische Informationen zum ausgeführten ETL-Prozess. Sie kann helfen, den Ablauf nachzuvollziehen und bei Problemen erste Hinweise zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe ist vor allem für Supportfälle hilfreich. Für eine tiefergehende Fehleranalyse sind in der Regel administrative Kenntnisse erforderlich. Je nach Fehler müssen zusätzlich Serverlogs, Datenbankinhalte, Moduldateien oder Systemkonfigurationen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Log-Ausgabe nicht sofort erscheint, kann sie über „Log laden“ erneut abgefragt werden. Gerade bei umfangreichen Läufen kann es vorkommen, dass die Log-Ausgabe erst kurze Zeit nach Abschluss vollständig verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
== Typische Nutzungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Bereits vorhandene Rohdaten verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Rohdaten bereits vorhanden sind und lediglich erneut verarbeitet werden sollen, wird in der Regel die Aktion „Update“ verwendet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Rohdaten liegen bereits im System vor&lt;br /&gt;
* Berechnungen oder Aggregationen sollen neu ausgeführt werden&lt;br /&gt;
* die SuperX-Tabellen des Moduls sollen aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Daten aus einem Vorsystem übernehmen und verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn neue Daten aus einem externen Vorsystem übernommen und anschließend verarbeitet werden sollen, kann die Aktion „Unload &amp;amp; Update“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden zunächst die Daten aus dem Vorsystem entladen. Anschließend werden die Daten durch das Update in SuperX verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload &amp;amp; Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nur Daten aus einem Vorsystem entladen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten aus einem Vorsystem entladen werden sollen, ohne direkt anschließend die Laderoutine auszuführen, kann die Aktion „Unload“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul auf den ausgelieferten Stand aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue verfügbare Version angezeigt wird, sollte ein Upgrade geprüft bzw. durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen innerhalb von SuperX aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ werden die Daten in der Regel aus SuperX selbst bezogen. Wenn die Kennzahlen neu berechnet oder aktualisiert werden sollen, ist häufig die Aktion „Update“ die passende Aktion.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen für ein anderes System bereitstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Kennzahlen für ein anderes System bereitgestellt werden sollen, kann beim Kennzahlen-Modul die Aktion „Unload“ relevant sein.&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel für hochschulübergreifende Auswertungen, Vergleichssysteme oder landesweite Berichtssysteme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Nutzung ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung des ETL Managers sollten folgende Punkte beachtet werden:&lt;br /&gt;
&lt;br /&gt;
* Ein laufender Prozess sollte nicht unnötig mehrfach parallel gestartet werden.&lt;br /&gt;
* Nach einem Lauf kann die Modulübersicht über „Aktualisieren“ neu geladen werden.&lt;br /&gt;
* Die Prozentanzeige ist kein Zeitindikator, sondern beschreibt den Fortschritt der Prozessschritte.&lt;br /&gt;
* Bei Fehlern sollte zuerst der Status und anschließend die Log-Ausgabe geprüft werden.&lt;br /&gt;
* Für tiefergehende Fehleranalysen sollten Administratorinnen und Administratoren oder technische Ansprechpartner einbezogen werden.&lt;br /&gt;
* Bei neuen verfügbaren Modulversionen sollte geprüft werden, ob ein Upgrade auszuführen ist.&lt;br /&gt;
&lt;br /&gt;
== Details-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Über den Button „Details“ können zusätzliche technische Informationen zu einem Modul angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Der Details-Bereich ist vor allem für fortgeschrittene Benutzerinnen und Benutzer, Administratorinnen und Administratoren oder den Support gedacht. Er kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* technische Modulkennung&lt;br /&gt;
* Systeminfo-ID&lt;br /&gt;
* technische Jobnamen&lt;br /&gt;
* verfügbare Jobs&lt;br /&gt;
* Rohdaten der Schnittstelle&lt;br /&gt;
* zusätzliche technische Moduldetails&lt;br /&gt;
&lt;br /&gt;
Für den normalen Betrieb ist der Details-Bereich meist nicht erforderlich. Er ist vor allem dann hilfreich, wenn bei Rückfragen oder Supportfällen genaue technische Informationen benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diagnose-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist eine technische Hilfsfunktion zur Prüfung der ETL-Manager-Installation. Er ist global angeordnet und nicht auf ein einzelnes Modul beschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Diagnose führt keine Reparaturen automatisch aus. Sie zeigt technische Informationen, mögliche Auffälligkeiten und Hinweise an. Zusätzlich können SQL- oder Shell-Hinweise angezeigt werden, die bei Bedarf von Administratorinnen und Administratoren kopiert und manuell ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* Erreichbarkeit der REST-Schnittstellen&lt;br /&gt;
* Webapp-, Tomcat- und Java-Informationen&lt;br /&gt;
* Pfade und Dateisysteminformationen&lt;br /&gt;
* Festplattenspeicher&lt;br /&gt;
* Datenbankinformationen&lt;br /&gt;
* Prüfung der Log-Tabelle&lt;br /&gt;
* Versionsquellen&lt;br /&gt;
* bekannte Fehlerbilder&lt;br /&gt;
* kopierbare SQL- und Shell-Hinweise&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist vor allem für Administratorinnen und Administratoren oder technische Ansprechpartner gedacht. Für normale Anwenderinnen und Anwender ist er in der Regel nur dann relevant, wenn ein Fehler auftritt oder technische Informationen weitergegeben werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Administratorhinweise ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält ergänzende technische Hinweise. Er richtet sich vor allem an Administratorinnen und Administratoren sowie an den technischen Support.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft der Versionsinformationen ===&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche zeigt eine installierte und eine verfügbare Version an.&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der in der Datenbank installiert ist. Falls die REST-Schnittstelle keinen Wert liefert, kann die Version aus der Tabelle &amp;lt;code&amp;gt;db_version&amp;lt;/code&amp;gt; gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die verfügbare Version beschreibt den ausgelieferten Stand im Dateisystem. Sie kann aus der Modul-XML-Datei gelesen werden. Für normale Module liegt diese Datei typischerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/&amp;lt;modul&amp;gt;/conf/&amp;lt;modul&amp;gt;.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul gilt ein Sonderfall. Die Modul-XML liegt unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/install/conf/kern.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann eine Datei &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; im jeweiligen Modulverzeichnis als Fallback verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Log-Tabelle ===&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe des ETL Managers verwendet eine Datenbanktabelle für die Joblogs. Wenn diese Tabelle fehlt oder unvollständig ist, kann die Log-Ausgabe fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Struktur der Tabelle ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS job_log&lt;br /&gt;
(&lt;br /&gt;
   job_instance_id  bigint   NOT NULL,&lt;br /&gt;
   log              text,&lt;br /&gt;
   status           text&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX IF NOT EXISTS ix_job_log1&lt;br /&gt;
ON public.job_log USING btree (job_instance_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese SQL-Anweisungen sollten nicht automatisch durch die Oberfläche ausgeführt werden. Sie dienen als Hinweis für Administratorinnen und Administratoren und müssen bei Bedarf manuell geprüft und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Typische technische Fehlerbilder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehlerbild&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/jobLog/{id}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Die Tabelle &amp;lt;code&amp;gt;job_log&amp;lt;/code&amp;gt; fehlt, ist unvollständig oder der Logeintrag ist noch nicht verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/job/list/{modul}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Moduldateien fehlen, Pfade stimmen nicht oder die Webapp verwendet nicht den erwarteten Dateistand.&lt;br /&gt;
|-&lt;br /&gt;
| REST-Endpunkt liefert HTTP 404&lt;br /&gt;
| Der Context-Pfad, die Webapp, der Port oder ein Tunnel zeigt möglicherweise nicht auf die erwartete Anwendung.&lt;br /&gt;
|-&lt;br /&gt;
| Log erscheint erst nach erneutem Laden&lt;br /&gt;
| Der ETL-Lauf ist abgeschlossen, aber der Logeintrag war beim ersten Abruf noch nicht vollständig verfügbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager stellt eine zentrale Oberfläche zur Ausführung und Überwachung von ETL-Prozessen bereit. Für den täglichen Betrieb stehen vor allem die Aktionen „Unload“, „Update“, „Unload &amp;amp; Update“ und „Upgrade“ im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt den Installationsstatus, Versionsinformationen, Datenquellen und Datenbankverbindungen. Der Bereich „Aktueller Lauf“ informiert über den Fortschritt eines gestarteten Prozesses. Die Log-Ausgabe liefert technische Zusatzinformationen und kann bei der Fehleranalyse helfen.&lt;br /&gt;
&lt;br /&gt;
Details und Diagnose ergänzen die Oberfläche um technische Informationen für Support- und Administrationsfälle. Sie unterstützen bei der Analyse, führen aber keine automatischen Reparaturen aus.&lt;br /&gt;
&lt;br /&gt;
= Installation und Verwaltung in der Shell mit Skripten =&lt;br /&gt;
&lt;br /&gt;
== Installation von Modulen ==&lt;br /&gt;
Das Kernmodul enthält außer Administrationsabfragen und Tabellen keinerlei Inhalte. Die Inhalte werden in Form von Modulen hinzugefügt. Dazu gibt es vorgefertigte [[Kernmodul_Shellscripte#Modulverwaltung|Installationsscripte]].&lt;br /&gt;
&lt;br /&gt;
=== Architektur von SuperX-Modulen ===&lt;br /&gt;
Die folgende Abbildung zeigt die Architektur von Modulen ab Beispiel vom HISCOB-Modul:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Ein Modul besteht auf Datenbankseite aus Abfragen, Hilfstabellen, Datentabellen und Schlüsseltabellen (sowie Prozeduren).&lt;br /&gt;
Auf Webserver-Seite können auch XSL-Stylesheets vorhanden sein.&lt;br /&gt;
| [[Bild:modularchitektur_cob.png|417x307px]]&lt;br /&gt;
|}&lt;br /&gt;
Die Abbildung zeigt, dass ein Modul eigene Komponenten nutzt, aber auch auf Teile des Kernmoduls zugreift, z.B. das Orgranigramm - dies macht SuperX zu einem integrierten System. Neben dem Organigramm sind alle anderen Komponenten des Kernmoduls natürlich betroffen, z.B. Themenbaum, Userrechte.&lt;br /&gt;
Die Ordnerstruktur eines Moduls spiegelt die Komponenten des Systems wieder. Es gibt je ein Verzeichnis für datentabellen, schluesseltabellen und hilfstabellen. &lt;br /&gt;
Die Installation eines Moduls ist in der Dokumentation des jeweiligen Moduls näher beschrieben. Module, die auf dem Kernmodul 2.1 oder höher basieren, haben einen einheitlichen Aufbau.&lt;br /&gt;
&lt;br /&gt;
=== Modulscripte im Kernmodul ===&lt;br /&gt;
Seit Version 2.1 werden die Datenbankschemata und Scripte der Module in einem einheitlichen Format zusammengestellt und in einer Datei $SUPERX_DIR/db/module/$MODULNAME/conf/$MODULNAME.xml gespeichert. Das XML-Format hat den Vorteil, dass die Scripte dynamisch für Postgres und Informix erzeugt werden können, und dass die Scripte vereinheitlicht werden. Aus dieser Datei werden die Scripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen. Die folgende Abbildung zeigt das Vorgehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Aus der xml-Datei werden die jeweiligen Scripte für die Installation, den Update, die Extraktions-, Transformations- und Ladescripte (ETL) und die Deinstallation erzeugt.&lt;br /&gt;
| [[Bild:modulscripte_erzeugen.png|417x371px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Modul-Scripte liegen als Shellscripte im Verzeichnis $SUPERX_DIR/db/bin, und sind an [[Kernmodul_Shellscripte#Modulverwaltung|anderer Stelle]] im Detail erläutert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| module_install.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_install.x sos $SOS_PFAD&lt;br /&gt;
| Installiert ein Modul, d.h. erzeugt die Tabellen, Views, Funktionen und Abfragen. Die Abfragen werden in den Themenbaum eingehängt. &lt;br /&gt;
|-&lt;br /&gt;
| module_etl.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_etl.x sos $SOS_PFAD&lt;br /&gt;
| Aktualisiert das Modul, d.h. lädt die Rohdaten, Transformiert sie, und aggregiert die Hilfstabellen. Fehler werden in eine Log-Datei geschrieben, diese kann dann per Mail an einen Admin versandt werden. Wenn das Script erfolgreich durchläuft, wird die Tabelle systeminfo aktualisiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Script wird nicht direkt als Cronjob aufgerufen, sondern von einem Shellscript, das die Umgebungsvariablen und Parameter setzt, z.B. cob_update.x.&lt;br /&gt;
|-&lt;br /&gt;
| module_drop.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_ drop.x sos $SOS_PFAD&lt;br /&gt;
| Entfernt das Modul bzw. die Tabellen, Views, Funktionen und Abfragen.&lt;br /&gt;
|-&lt;br /&gt;
| module_scripts_create.x -name- -pfad- -Datenbanksystem(optional, INFORMIX, POSTGRES)- -Versionsnr.-&lt;br /&gt;
| Erzeugt via XSL-Transformation die jeweiligen Scripte, die in den obigen Scripten aufgerufen werden, z.B. bau_install_ids.sql für das Installationsscript des Baumoduls beim Informix Dynamic Server.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den operativen Scripten erzeugt module_scripts_create.x auch html-Dateien zur Dokumentation eines Moduls in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/-Modulname-.html&lt;br /&gt;
(auch als rtf-Datei zu Einbindung in Modul-Dokumentationen) sowie zur Schnittstelle in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/rohdaten/-Modulname-_unload.html&lt;br /&gt;
Darüber hinaus werden auch DBForms-Formulare erzeugt.&lt;br /&gt;
&lt;br /&gt;
=== Installation eines Moduls: Allgemeines Vorgehen ===&lt;br /&gt;
Das Vorgehen bei der Installation eines Moduls ist standardisiert. Im folgenden eine Kurzbeschreibung, weiter unten finden Sie das Vorgehen am Beispiel des ZUL-Moduls im Detail.&lt;br /&gt;
* Entpacken Sie das Modul in $SUPERX_DIR&lt;br /&gt;
* Erweiterung der Umgebung in der Datei $SUPERX_DIR/db/bin/SQL_ENV: fügen Sie den Inhalt der jew. Beispieldatei SQL_ENV_-Modulname-.sam in der SQL_ENV an, wenn noch nicht vorhanden, und ändern Sie ggf. Email-Adressen für log- und Fehlermails.&lt;br /&gt;
* Entladen der Rohdaten; auch hier müssen vorher Umgebungsvariablen zum Vorsystem angepasst werden&amp;lt;br /&amp;gt;&lt;br /&gt;
(Datei $-Modulname-_LOAD_PFAD/-Modulname-_ENV), hier liegt ebenfalls eine *.sam-Datei vor&lt;br /&gt;
* Kopieren der Rohdaten nach -Modulpfad-/rohdaten. Neuere SuperX-Module haben dafür vorgefertigte Scripte mit dem Namen -Modulname-_copy.x (z.B. zul_copy.x)&lt;br /&gt;
* Installieren Sie das Modul mit -Modulname-_erzeugen.x, z.B. mit  zul_modul_erzeugen.x&lt;br /&gt;
* Wenn die Installation erfolgreich war, können Sie das Modul aktualisieren mit&amp;lt;br /&amp;gt;&lt;br /&gt;
-Modulname-_update.x (ggf. mit Parametern)&amp;lt;br /&amp;gt;&lt;br /&gt;
z.B. mit &lt;br /&gt;
 zul__update.x&lt;br /&gt;
d.h. die ETL-Prozesse werden gestartet (s.u.).&lt;br /&gt;
* Wenn das Modul erfolgreich aktualisiert ist, wird eine Prüfprozedur gestartet, die die Daten plausibilisiert. Fehler und Warnungen finden Sie in der Datei $-Modulname-_ERRORDAT.&lt;br /&gt;
* Starten Sie Tomcat neu. Wenn Tomcat auf einem separaten Server installiert ist, müssen Sie vorher die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml dorthin übertragen. &lt;br /&gt;
* Schritt 7 wird bei jedem SuperX-Update wiederholt. Nun muss der Entladerhythmus geplant werden, und die Cronjobs werden eingerichtet. Es gibt eine Musterdatei $SUPERX_DIR/db/module/-MODULNAME-/-MODUL-_update_cron.x.sam , benennen sie diese um nach -MODUL-_update_cron.x und fügen Sie das Script in die crontab ein. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines zum Laden ====&lt;br /&gt;
Zunächst müssen die Rohdaten aus dem Vorsystem entladen werden. &lt;br /&gt;
Für das Entladen gibt es ferner zwei Modi: Das &amp;quot;Pull&amp;quot;-Verfahren und das &amp;quot;Push&amp;quot;-Verfahren. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Pull&amp;quot;-&#039;&#039;&#039;Verfahren wird einer Benutzerkennung auf dem SuperX-Rechner Zugriffsrecht auf die SOSPOS-Datenbank gegeben, und die Daten werden via TCP/IP aus dem Basissystem entladen. Bei APP / HISinOne als Quellsystem ist &amp;quot;Pull&amp;quot; das Standardvorgehen. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Push&amp;quot;-&#039;&#039;&#039;Verfahren werden die Entladescripte auf den SOSPOS-Rechner kopiert und dort von einer Benutzerkennung auf dem SOSPOS-Rechner ausgeführt. Die Rohdaten müssen dann auf den SuperX-Rechner kopiert werden. Dieses Verfahren klappt bei Informix unter Unix problemlos, bei Entladen aus Postgres müsste das komplette SuperX-Kernmodul installiert werden. &lt;br /&gt;
Am einfachsten ist immer das &amp;quot;Pull&amp;quot;-Verfahren, das mit fast allen Quellsystemen funktioniert und wenig Konfiguration auf dem Quellsystem erfordert. Aufgrund von Sicherheitsvorkehrungen oder Netz-Infrastrukturen wählen aber viele Hochschulen das &amp;quot;Push&amp;quot;-Verfahren. Da derzeit Informix /Unix die gängigste Plattform an Hochschulen ist, ist dies auch kein Problem. &lt;br /&gt;
&lt;br /&gt;
==== Einrichtung der Entladescripte ====&lt;br /&gt;
Im Push-Verfahren btw. unter SuperX können Sie mitgelieferte Shellscripte nutzen. Das folgende Beispiel des ZUL-Moduls zeigt das Vorgehen:&lt;br /&gt;
Die Entladescripte liegen im Verzeichnis $SUPERX_DIR/db/module/zul/rohdaten und lauten je nach Systemversion: &lt;br /&gt;
 zul_unload.x&lt;br /&gt;
&lt;br /&gt;
Die Scripte laufen nur, wenn die entsprechenden Umgebungsvariablen in der Datei ZUL_ENV (im gleichen Verzeichnis, ein Muster liegt vor in ZUL_ENV.sam) korrekt gesetzt sind, benennen Sie die Musterdatei um nach ZUL_ENV und tragen die richtigen Umgebungsvariablen ein, z.B. den Pfad für $INFORMIXDIR. &lt;br /&gt;
&#039;&#039;&#039;ZUL_ENV Die Umgebung für Entladescripte aus ZUL-GX(Auszug)&#039;&#039;&#039; &lt;br /&gt;
 ##Pfad für Entladedaten:&lt;br /&gt;
 ZUL_PFAD=.; export ZUL_PFAD &lt;br /&gt;
 ##hier muss Unterverzeichnis unl existieren!&lt;br /&gt;
&lt;br /&gt;
 In der ZUL_ENV müssen außerdem folgende Umgebungsvariablen gesetzt werden (defaults sind bereits vorbelegt, aber hier und da müssen Sie sicher ran): &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Informix gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXDIR&lt;br /&gt;
| Home-Verzeichnis von Informix &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXSERVER&lt;br /&gt;
| Name des Informixservers &lt;br /&gt;
|-&lt;br /&gt;
| ONCONFIG&lt;br /&gt;
| Name der onconfig, wenn auf dem SOS-Rechner mehrere Informix-Instanzen laufen &lt;br /&gt;
|-&lt;br /&gt;
| CLIENT_LOCALE&lt;br /&gt;
| Sprachumgebung (wichtig fürs Entladen von Datumsformaten) &lt;br /&gt;
|-&lt;br /&gt;
| SERVER_LOCALE&lt;br /&gt;
| dito &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Postgres gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| PGDATESTYLE&lt;br /&gt;
| Datumsformat &amp;quot;German&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| PGPORT&lt;br /&gt;
| Port vom Postgres-Server, standardmäßig 5432 &lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname oder IP-Adresse vom Postgres-Server &lt;br /&gt;
|-&lt;br /&gt;
| PGUSER&lt;br /&gt;
| Benutzerkennung für Postgres-Server (nur Datenbank, nicht Betriebssystem) &lt;br /&gt;
|-&lt;br /&gt;
| PGPATH&lt;br /&gt;
| Installationsverzeichnis von Postgres, z.B. /usr/local/pgsql &lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur db-zul.properties-Datei mit den Zugangsparametern für SOSPOS unter Postgres &lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Pfad zur Steuerungsdatei mit den Parametern für das Logging beim Entladen, voreingestellt auf ./logging.properties. Normalerweise brauchen Sie hier nichts ändern, wenn beim Entladen Probleme auftauchen, kann man den Level von SEVERE auf INFO oder FINEST ändern, dann werden die konkreten SQLs geloggt. Aber Achtung: wenn keine Fehler mehr auftreten, müssen Sie den Level wieder auf SERVERE ändern, sonst kommen Schlüsselworte in die Logdatei zul_unload.err, die dann bei der Übernahme nach SuperX fälschlicherweise zu Fehlermeldungen führen. &lt;br /&gt;
|}&lt;br /&gt;
Unter Postgres muss für das &amp;quot;Pull&amp;quot;-Verfahren beim Entladen die Datenbankverbindung in der Datei db-zul.properties eingetragen werden (Muster für Postgres liegt bei in db-zul_pg.properties). Dazu laden Sie einmal die Datei ZUL_ENV mit den obigen Parameter, starten den SuperX-Propadmin (siehe Administrationshandbuch Kernmodul) und richten die Verbindung zum SOSPOS-Server ein. Das Kennwort wird verschlüsselt gespeichert. Danach sind die Entladescripte für Postgres ausführbar. &lt;br /&gt;
Hinweis: Anders als Informix hat Postgres hat eine eigene, vom Basissystem unabhängige Benutzerverwaltung. Daher brauchen Sie den User, den Sie zum Entladen aus Postgres nutzen, nicht auf dem SuperX- oder SOSPOS-Rechner auf Betriebssystem-Ebene einrichten. Sie können also z.B. auf dem SuperX-Rechner zum Entladen aus SOSPOS die Kennung sospos des Postgres- Rechners verwenden. Oder Sie richten in der SOSPOS -Datenbank den Benutzer SuperX ein und geben ihm Leserecht auf die Tabellen sowie das Recht, Tabellen und Stored Procedures anzulegen. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Für alle Platformen gelten folgende Variablen:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ERRORMAIL&lt;br /&gt;
| An wen solle eine Logmail verschickt werden, wenn das Entladen nicht geklappt hat? (nur Unix). &lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL&lt;br /&gt;
| An wen soll immer eine Logmail verschickt werden &lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Pfad zum ausführbaren Mailprogramm unter Unix, Vorbelegung ist &amp;quot;mail&amp;quot;, manche Unixe haben aber auch &amp;quot;mutt&amp;quot; oder &amp;quot;mailx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom ZUL-Rechner auf den SuperX-Rechner kopiert werden sollen, dann werden für das Script zul_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync und scp sind wählbar. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem SuperX-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/zul/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem SuperX-Rechner, in der Regel &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des SuperX-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Dann starten Sie das Script zul_unload.x. Wenn es gelaufen ist, müssten die Dateien im unl-Verzeichnis stehen. Prüfen Sie dann bitte, ob dort Dateien mit 0 bytes stehen. Die Logdatei heisst zul_unload.err. &lt;br /&gt;
&lt;br /&gt;
===== Entladen unter Windows =====&lt;br /&gt;
Für das Entladen unter Windows gibt es Muster-Dateien im jew. Rohdaten-Verzeichnis, z.B. $SOS_PFAD/rohdaten/sos_unload.bat. Die Einrichtung geschieht dann in [[Kernmodul_Komponentenverwaltung#Java-Client_zum_Entladen_von_Quell-Datenbanken|Java]]. Ans Ende der Datei können Sie noch schreiben:&lt;br /&gt;
date /T &amp;gt;superx.datum&lt;br /&gt;
Dann wird auch die Datumsdatei geschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Dateitransfer beim Push-Verfahren =====&lt;br /&gt;
Wenn Sie das Verzeichnis nicht gemounted haben, müssen das Verzeichnis unl, die zul_unload.err und die superx.datum dann in das Verzeichnis $ZUL_LOAD_PFAD auf dem SuperX-Rechner kopiert werden, ein Script dafür liegt ebenfalls bei (zul_copy.x). Das Entladedatum wird danach in der Textdatei $ZUL_LOAD_PFAD/superx.datum gespeichert; wenn das Script einen Fehler findet, dann wird das vorherige Datum (in der Datei superx.datum.alt) gesetzt. &lt;br /&gt;
&lt;br /&gt;
Für den Transfer der Rohdaten beim Push-Verfahren wird in SuperX die dateibasierte Schnittstelle genutzt. Unter UNIX läßt sich dieser Transfer vollends automatisieren, indem die Programme scp oder rsync auf der Basis des OpenSSH-Pakets genutzt werden. Beide setzen auf das ssh-Protokoll 2 auf und stellen somit einen verschlüsselten Dateitransfer sicher. Auch [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] ist möglich. &lt;br /&gt;
In den jeweiligen Modulen wird im Verzeichnis rohdaten eine Beispieldatei mit dem Namen -MODULNAME-_ENV.sam ausgeliefert, die Sie umbenennen können nach -MODULNAME-_ENV. Darin werden am Ende der Datei die Parameter zum Kopieren festgelegt, also die Userkennung REMOTE_USER, der Hostname REMOTE_HOST, und die Methode des Kopierens (COPY_METHOD) sowie die jeweiligen Zielpfade. Diese Umgebungsvariablen werden von dem jeweiligen Script -modulname-_copy.x benutzt. &lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Unix =====&lt;br /&gt;
Damit die Passworteingabe unter Unix entfällt, muss man wie folgt vorgehen:&lt;br /&gt;
Loggen Sie sich zunächst testweise einmal ein. Wenn Sie z.B. vom COB-Server auf den SuperX-Server kopieren wollen, loggen Sie sich als user cob auf cobhost ein mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh superx@superxhost&lt;br /&gt;
Beim ersten Mal müssen Sie die Sicherheitsabfrage mit &amp;quot;yes&amp;quot; bestätigen.&lt;br /&gt;
Erzeugen Sie auf dem Quellrechner einen öffentlichen Schlüssel mittels &lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;cob@cobhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 wobei man eine leere Passphrase vergibt. Der öffentliche Teil dieses Schlüssels (~/.ssh/id_ed25519.pub) muss auf dem Zielrechner in die Datei ~/.ssh/authorized_keys eingefügt werden, ggf. muss die Datei neu erzeugt werden.&lt;br /&gt;
Wenn z.B. auf dem COB-Server unter der Kennung cob ein Key wie folgt erzeugt wurde:&lt;br /&gt;
&lt;br /&gt;
;Beispieleintrag eines Public Keys:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-ed25519 AAAAC3N.[hier viele kryptische Zeichen]....4V cob@cobhost&lt;br /&gt;
&lt;br /&gt;
Dann wird genau diese Zeile in der Datei /home/superx/.ssh/authorized_keys angefügt (die Datei kann mehrere PublicKeys enthalten, ein Eintrag pro Absatz).&lt;br /&gt;
Achten Sie auch auf Dateirechte: Die Verzeichnisse und Dateien sollten keine Schreibrechte für Gruppen haben. Im Zweifelsfall z.B. für den user superx:&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 600 /home/superx/.ssh/authorized_keys&lt;br /&gt;
Danach sollte z.B. der Login vom cobhost als user cob mit ssh superx@superxhost ohne Passworteingabe klappen. Wenn nicht, schalten Sie das Logging mit ssh -v superx@superxhost ein. Eine Möglichkeit ist, dass die PublicKey-Authentifizierung in der Konfigurationsdatei des SSHD (normal /etc/ssh/ssh_config) abgeschaltet ist. Weitere Diagnosen liefert die Datei /var/log/messages.&lt;br /&gt;
Sie können außerdem noch einschränken, von welchem Host die obige Authentifizierung ermöglicht wird. Dazu setzen Sie den Parameter &amp;quot;from=*.uni-xy.de&amp;quot; davor, z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Einschränkung &amp;quot;from&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
in authorized_keys&lt;br /&gt;
| from=&amp;quot;*.uni-xy.de&amp;quot; ssh-rsa AAAAB3Nza…[hier viele kryptische &lt;br /&gt;
Zeichen]…pg6VkCc= cob@cobhost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Kopiermethode scp benutzen, und die obige &amp;quot;authorized_keys&amp;quot;-Metohde mit PublicKey nicht nutzen wollen, können Sie auch mit Private Keys arbeiten (siehe SSH-Doku). Dazu können sie in der *_ENV-Datei in dem Parameter SCP_OPTS den Verweis auf den private Key setzen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| SCP_OPTS in *_ENV:&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel COB_ENV&lt;br /&gt;
| SCP_OPTS=&amp;quot;-p -B -i /home/cob/.ssh/superx_key&amp;quot;&lt;br /&gt;
export SCP_OPTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Windows =====&lt;br /&gt;
Wenn Sie die ssh-Shell putty aus dem Installationspaket nutzen, haben Sie im Installationsordner auch die Anwendung &amp;quot;puttyGen.exe&amp;quot;. Wenn Sie putty als reine Executable nutzen, laden Sie die Anwendung separat herunter. [http://winscp.net/download/puttygen.exe PuttyGen]&lt;br /&gt;
*     Folgen Sie der Anleitung auf der Seite http://winscp.net/eng/docs/ui_puttygen, um den SSH2-DSA oder RSA Schlüssel zu erzeugen. Für den Schlüssel bitte kein Passwort vergeben, wenn Sie das Tool automatisiert nutzen.&lt;br /&gt;
*     Den privaten Schlüssel geben Sie in Putty bzw. Winscp im Menü &amp;quot;Session&amp;quot; im Feld &amp;quot;Private Key File&amp;quot; an.&lt;br /&gt;
*    Der Button &amp;quot;Save public key&amp;quot; ist nicht für OPENSSH unter Linux als Zielserver geeignet. Im folgenden Screenshot sehen Sie den markierten Bereich, den Sie kopieren müssen:&lt;br /&gt;
[[Bild:puttygen.png|413x402px]]&lt;br /&gt;
*     Kopieren Sie Ihren Public Key, den Sie oben mit PuttyGen erzeugt haben, zur Datei &amp;quot;authorized_keys&amp;quot; und kopieren Sie diese in das Verzeichnis ~/.ssh/&lt;br /&gt;
* Im Profil unter Connection -&amp;gt; SSH -&amp;gt; Auth -&amp;gt; Credentials geben Sie den Pfad zum privaten Schlüssel in &amp;quot;Private key file&amp;quot; an.&lt;br /&gt;
* Bei erneutem Login mit Putty oder Winscp sollte die Passwortabfrage entfallen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP (Server) =====&lt;br /&gt;
Beim Push-Verfahren wird, wenn mit scp oder rsync kopiert wird, eine Login-Shell vorausgesetzt. Wenn dies aus Sicherheitsgründen nicht gewünscht ist bzw. wg. Einsatz von Windows nicht möglich ist, können Sie auch sftp nutzen, dies wird in modernen ssh-Servern mitgeliefert und bietet ebenfalls verschlüsselten Datentransfer. Zur Einrichtung des Servers:&lt;br /&gt;
Der SSH-Dienst wird wie folgt konfiguriert (am Beispiel Ubuntu Linux 22.04 LTS) mit dem SFTP-Verzeichnis /home/sftp/-benutzername: &lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/ssh/sshd_config die Zeile auskommentieren:&lt;br /&gt;
 #Subsystem      sftp    /usr/lib/openssh/sftp-server&lt;br /&gt;
und stattdessen:&lt;br /&gt;
 Subsystem sftp internal-sftp&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
         ChrootDirectory /home/sftp/%u&lt;br /&gt;
         ForceCommand internal-sftp&lt;br /&gt;
        AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Danach starten Sie den SSH-Dienst neu:&lt;br /&gt;
 service ssh restart&lt;br /&gt;
&lt;br /&gt;
Dann legen Sie die Gruppe &amp;quot;sftponly&amp;quot; an:&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
 und dann den Unix-User an, und geben ihm die Gruppe &amp;quot;sftponly&amp;quot;. Hier ein Script:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SFTPUSERNAME=$1&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 useradd -b /home/sftp -s /bin/false -G sftponly $SFTPUSERNAME&lt;br /&gt;
 chown root:root /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 chmod 755 /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
 chown $SFTPUSERNAME:sftponly /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
&lt;br /&gt;
Danach legen Sie mit &lt;br /&gt;
 passwd $SFTPUSERNAME&lt;br /&gt;
ein Passwort fest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der User kann sich dann nicht mehr mit ssh einloggen, nur noch mit sftp, und landet beim Login in /home/$KENNUNG, in einem &amp;quot;chroot-Käfig&amp;quot;, und der User kann mit SFTP in den Ordner &amp;quot;incoming&amp;quot; schreiben. Zum Testen geben Sie ein: &lt;br /&gt;
 sftp $KENNUNG@-Host-&lt;br /&gt;
&lt;br /&gt;
Wenn beim SFTP Login die Meldung kommt:&lt;br /&gt;
 client_loop: send disconnect: Broken pipe&lt;br /&gt;
müssen Sie darauf achten dass das Home-Verzeichnis des Users nicht dem User gehört, sondern root.&lt;br /&gt;
&lt;br /&gt;
Wenn der Login klappt, können Sie nach dem [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|oben]]  beschriebenen Verfahren die Passworteingabe durch PublicKey-Authentifizierung ersetzen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP =====&lt;br /&gt;
Für das Kopieren der Rohdaten können Sie im Kopierscript &amp;quot;-modulname-_copy.x&amp;quot; auch sftp-Kommandos nutzen. Sie müssen nur in der ENV-Datei die Variable&lt;br /&gt;
 COPY_METHOD=sftp&lt;br /&gt;
setzen. Alle anderen Variablen und Mechanismen wie z.B. [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|Entfernen der Passworteingabe]] entsprechen denen von SCP / SSH (s.o.). &lt;br /&gt;
Spezielle Optionen fürs sftp können Sie in der Umgebungsvariable SFTP_OPTS setzen. Es kann z.B. sein, dass das Kopieren großer Dateien in einen Timeout läuft. Bei CSV bietet es sich an, die Dateien zu komprimieren, sie können also setzen:&lt;br /&gt;
 SFTP_OPTS=&amp;quot;-oCompression=yes&amp;quot;&lt;br /&gt;
 export SFTP_OPTS&lt;br /&gt;
Danach wiederholen Sie das kenn_copy.x&lt;br /&gt;
Dies ist nur ein Beispiel. Weitere Optionen für SFTP entnehmen Sie der manpage.&lt;br /&gt;
Das Kopieren mit sftp klappt übrigens auch unter Windows z.B. mit dem Programm [http://winscp.net/eng/docs/lang:de winscp]. Dies wird im folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP unter Windows =====&lt;br /&gt;
Unter Windows ist das Standardprogramm für SFTP die Anwendung [http://winscp.net/eng/docs/lang:de winscp]. Sie können die Passworteingabe analog zu Putty [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|entfernen]]. Danach können Sie eine Session erzeugen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp1.png|517x364px]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;quot;Private key file&amp;quot; geben Sie den private key ein, den Sie [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|oben]] erzeugt haben. Klicken Sie dann auf &amp;quot;Save session&amp;quot;, und geben Sie einen kurzen, sprechenden Namen ohne Leerzeichen oder Umlaute, z.B. &amp;quot;superx@vmmulti1&amp;quot;&lt;br /&gt;
Sie müssen nun die Verzeichnisse lokal und remote in der Winscp-Session speichern, im Menüpunkt &amp;quot;Directories&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp2.png|517x359px]]&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie auch hiernach nicht, die Session zu speichern. &lt;br /&gt;
Danach testen Sie einmal den Zugang. Wenn das klappt können Sie Winscp auch für die Kommandozeile automatisieren. Sie erzeugen zunächst eine Textdatei mit den Kommandos für Winscp, dies enthält auch die zu übertragenden Dateien. Der Aufbau der Datei ist wie folgt:&lt;br /&gt;
 open -Sessionname-&lt;br /&gt;
 # Upload the file to current working directory&lt;br /&gt;
 put -Datei-&lt;br /&gt;
 # Disconnect&lt;br /&gt;
 close&lt;br /&gt;
 # Exit WinSCP&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Die zu übertragenden Dateien sind in der Musterdatei des jew. Moduls in rohdaten/-Modulname-_sftp.txt aufgelistet, Sie müssen lediglich &lt;br /&gt;
* den &amp;quot;/&amp;quot; durch einen &amp;quot;\&amp;quot; ersetzen&lt;br /&gt;
* das Entladeprotokoll -Modulname-_unload.err und die Datumsdatei superx.datum hinzufügen&lt;br /&gt;
Hier ein Beispielscript fürs das Studierenden-Modul:&lt;br /&gt;
	open superx@vmmulti1&lt;br /&gt;
	# Change remote directory&lt;br /&gt;
	# Upload the file to current working directory&lt;br /&gt;
	put sos_unload.err&lt;br /&gt;
	put superx.datum&lt;br /&gt;
	put unl\konstanten.unl&lt;br /&gt;
	put unl\sos_studenten.unl&lt;br /&gt;
	put unl\sos_hzb.unl&lt;br /&gt;
	put unl\sos_faecher.unl&lt;br /&gt;
	put unl\sos_pord_to_stg.unl&lt;br /&gt;
	put unl\sos_pruefungenext.unl&lt;br /&gt;
	put unl\sos_pruefungen.unl&lt;br /&gt;
	put unl\sos_lab_astat_attributes.unl&lt;br /&gt;
	put unl\sos_stud_loe.unl&lt;br /&gt;
	put unl\sos_faecher_ext.unl&lt;br /&gt;
	put unl\sos_faecher_kontrolle.unl&lt;br /&gt;
	put unl\sos_pruefungen_kontrolle.unl&lt;br /&gt;
	put unl\sos_anschri.unl&lt;br /&gt;
	put unl\sos_parstg.unl&lt;br /&gt;
	put unl\sos_hsnr.unl&lt;br /&gt;
	put unl\semester.unl&lt;br /&gt;
	put unl\cif.unl&lt;br /&gt;
	put unl\cifx.unl&lt;br /&gt;
	put unl\k_pvers.unl&lt;br /&gt;
	put unl\k_stg.unl&lt;br /&gt;
	put unl\k_stgext.unl&lt;br /&gt;
	put unl\k_abstgv.unl&lt;br /&gt;
	put unl\sos_pord.unl&lt;br /&gt;
	put unl\sos_dipl.unl&lt;br /&gt;
	put unl\sos_minder.unl&lt;br /&gt;
	put unl\sos_stud_d.unl&lt;br /&gt;
	put unl\sos_pords.unl&lt;br /&gt;
	put unl\sos_porg.unl&lt;br /&gt;
	put unl\sos_labzuord.unl&lt;br /&gt;
	put unl\sos_pnrzuord.unl&lt;br /&gt;
	put unl\sos_gewichtungsvariante.unl&lt;br /&gt;
	put unl\sos_gewichtungregel_filter.unl&lt;br /&gt;
	put unl\sos_gewichtungregel.unl&lt;br /&gt;
	put unl\personattribute.unl&lt;br /&gt;
	put unl\personattributetype.unl&lt;br /&gt;
	put unl\personattribute_value_list.unl&lt;br /&gt;
	put unl\stu_update_prot.unl&lt;br /&gt;
	put unl\exa_update_prot.unl&lt;br /&gt;
	put unl\sos_accredited_ects.unl&lt;br /&gt;
	put unl\sos_pord_orgeinheit.unl&lt;br /&gt;
	# Disconnect&lt;br /&gt;
	close&lt;br /&gt;
	# Exit WinSCP&lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
Die Datei hat z.B. den Namen winscp_example_script.txt. Dann können Sie das Script aufrufen mit dem DOS-Kommando:&lt;br /&gt;
 winscp /script=-Pfad zu-\winscp_example_script.txt&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot wie das dann aussieht:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp3.png|609x337px]]&lt;br /&gt;
&lt;br /&gt;
Das DOS-Kommando läßt sich dann über die Windows-Taskverwaltung automatisieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Java-Client zum Entladen von Quell-Datenbanken =====&lt;br /&gt;
Zum Entladen aus dem operativen Vorsystem wird unter Informix dbaccess genutzt. Unter Postgres wird generell der SuperX-JAVA-Client zum Entladen genutzt, denn SuperX benötigt ein spezielles, an Informix angepasstes [[Kernmodul_Komponentenverwaltung#Format_der_Unload_Dateien_CSV|CSV-Format]], das sich mit Bordmitteln von Postgres (copy-Befehl) nicht erzeugen lässt. Es kann aber auch sinnvoll sein, aus der Informix-Datenbank mit SuperX-JAVA-Client zu entladen, z.B. wenn Sie kein UNIX-dbaccess auf dem Vorsystem installiert haben. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie das jew. operative Vorsystem im PUSH-Verfahren entladen wollen, d.h. die Rohdaten werden auf dem Vorsystem entladen und auf den SuperX-Rechner kopiert, dann müssen Sie spezielle Vorkehrungen treffen. SuperX nutzt generell zum Entladen eigene Java-Klassen. Beim Entladen im PULL-Verfahren sind diese Klassen vorhanden, denn die Entladeroutine läuft auf dem SuperX Rechner. Wenn Sie aber PUSH nutzen wollen, werden die SuperX-Java-Klassen auf dem Liefersystem benötigt, und die Entladeroutine muss konfiguriert sein. Im Folgenden nutzen wir das Beispiel &amp;quot;Entladen im Push-Verfahren aus SVA-GX unter Postgres&amp;quot;. Gehen Sie dazu wie folgt vor:&lt;br /&gt;
* Kopieren Sie die Dateien &lt;br /&gt;
** superx*jar&lt;br /&gt;
** postgresql-*.jar&lt;br /&gt;
** jfor-0.7.2rc1.jar&lt;br /&gt;
* vom SuperX-Rechner im Verzeichnis $SUPERX_DIR/tomcat/webapps/superx/WEB-INF/lib auf den Quellrechner in ein Unterverzeichnis lib unter rohdaten (z.B. /home/sva/superx/rohdaten/lib). In rohdaten liegt die bisherige Entladeroutine (z.B. sva_unload.x). &lt;br /&gt;
* Kopieren Sie die *_ENV.sam -Datei nach *_ENV, also hier SVA_ENV.sam nach SVA_ENV&lt;br /&gt;
* Fügen Sie dann folgenden Passus in die Umgebungs-Datei der Entladeroutine, hier also SVA_ENV:&lt;br /&gt;
 #Pfad zu den SuperX-Java-Libraries&lt;br /&gt;
 #Der JDBC_CLASSPATH enthält alles, was der jdbc-Client in superx für den Datenbankzugriff braucht.&lt;br /&gt;
 #jfor*.jar, postgresql*.jar&lt;br /&gt;
 JDBC_CLASSPATH=&amp;quot;$SVA_LOAD_PFAD/lib/superx5.0.jar:$SVA_LOAD_PFAD/lib/postgresql-42.2.19.jar:$SVA_LOAD_PFAD/lib/jfor-0.7.2rc1.jar&amp;quot;&lt;br /&gt;
 export JDBC_CLASSPATH&lt;br /&gt;
&lt;br /&gt;
Wenn dann noch die Variablen [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] und LOGGER_PROPERTIES korrekt gesetzt sind, kann die Entladeroutine bei SX_CLIENT=jdbc (Wenn Sie unter Windows entladen, oder Informix ohne dbaccess entladen wollen) oder SX_CLIENT=psql (wenn Sie Postgres unter UNIX nutzen) mit Java entladen.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Entladescript ausführen:&lt;br /&gt;
 sva_unload.x&lt;br /&gt;
Die Logdatei lautet sva_unload.err&lt;br /&gt;
&lt;br /&gt;
Zum Kopieren der Rohdaten zum SuperX-Server passen Sie folgende Variablen an:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom SVA-Rechner auf den BI-Rechner kopiert werden sollen, dann werden für das Script sva_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync, [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] und scp sind wählbar [Achtung: diese müssen dann betriebssystemseitig installiert sein]. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem BI-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/sva/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem BI-Rechner, in der Regel &amp;quot;tomcat&amp;quot; oder &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des BI-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Danach starten Sie &lt;br /&gt;
 sva_copy.x&lt;br /&gt;
Die Logdatei lautet sva_copy.err&lt;br /&gt;
&lt;br /&gt;
Weitere Entladeparameter werden in den modulspezifischen Administrationshandbüchern beschrieben.&lt;br /&gt;
{{Hinweis|Bei neuen SuperX-Versionen reicht es in der Regel, die modulspez. Dateien auszutauschen, also hier sva_unload.* etc.}}&lt;br /&gt;
&lt;br /&gt;
== Update eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Wenn das Entladen aus dem Vorsystem geklappt hat (sofern es ein Vorsystem gibt), können Sie die Daten laden. Zum Update bzw. zum Laden der Rohdaten gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname- und führen das Script aus:&lt;br /&gt;
-Modulname-_update.x&lt;br /&gt;
Die Logdatei lautet L_-Modulname-_UPDATE.log, im Mandantenfähigen Betrieb &amp;quot;L_-Modulname-_UPDATE-MANDANTID-.log&amp;quot;.&lt;br /&gt;
Für die Aufnahme der Laderoutine in die crontab gibt es im gleichen Verzeichnis Musterscripte nach dem Namensmuster:&lt;br /&gt;
-Modulname-_update_cron.x&lt;br /&gt;
Je nach Push/Pull-Szenario können Sie auch den Unload darin starten oder nicht.&lt;br /&gt;
&lt;br /&gt;
=== Modulupdate in mandantenfähigen Installationen ===&lt;br /&gt;
Der Modulupdate in mandantenfähigen Installation findet in einer SuperX-Installation statt, allerdings werden die einzelnen Scripte mit unterschiedlichen Umgebungsvariablen, wie sie in SQL_ENV.-MANDANTID- definiert ist, z.B. SQL_ENV.FHRO.&lt;br /&gt;
In der SQL_ENV.-MANDANTID- werden unterschiedliche Pfade für den jeweiligen *_LOAD_PFAD gesetzt, wobei in der Regel die Mandandid ein Unterverzeichnis vom &amp;quot;normalen&amp;quot; LOAD_PFAD ist. So ist z.B. beim COB-Modul folgender Pfad anzusetzen:&lt;br /&gt;
Normale SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten&lt;br /&gt;
Mandantenfähige SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten/FHRO&lt;br /&gt;
Unterhalb von FHRO befindet sich noch einmal die Entladeroutine sowie das Unterverzeichnis unl mit den Rohdaten. Dieses Verzeichnis FHRO kann der Einfahheit halber auch ein symbolischer Link auf den gemounteten COB-Rechner sein.&lt;br /&gt;
Durch Setzen der Mandantennummer in der Umgebungsvariable MANDANTID in der jeweiligen SQL_ENV des Mandanten werden die ETL-Scripte anders ausgeführt: Die Logdateien werden jeweils mit der Mandantennummer versehen (z.B. L_cob_updateFHRO.log), damit die Übersicht nicht verloren geht und der gleichzeitige Update mehrerer Mandanten in eine rsuperX-Installation möglich ist.&lt;br /&gt;
Außerdem können weitreichende Steuerungsmechanismen im Modulupdate eingesetzt werden: Nach jedem ETL-Schritt können optional mandantenspezifische Scripte aufgerufen werden. Diese müssen folgende Namenskonvention einhalten:&lt;br /&gt;
 -Scriptname-_-MANDANTID-.sql&lt;br /&gt;
Also für eine hochschulspezifische Transformation im COB-Modul des Mandanten FHRO wird eine Datei namens&lt;br /&gt;
 cob_trans_FHRO.sql &lt;br /&gt;
mit entsprechenden SQL-Anweisungen angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Format der Unload Dateien CSV ===&lt;br /&gt;
Generell gilt das Prinzip, daß Daten vom Vorsystem in CSV entladen werden, und dann in sog. Ladetabellen hochgeladen werden. Da CSV je nach DBMS unterschiedlich implementiert wird, hier eine kurze Beschreibung des Formats, das im wesentlichen den Vorgaben von Informix LOAD entspricht:&lt;br /&gt;
* Zeichenformat: UNIX LATIN1 oder UTF-8&lt;br /&gt;
* Feldtrenner: ^ &lt;br /&gt;
* Satztrenner: Feldtrenner + UNIX NEWLINE&lt;br /&gt;
* Zeilenschaltung: Umbrüche innerhalb von Textfeldern sind als \ + NEWLINE codiert&lt;br /&gt;
* Feldtrenner, die im Textfeld vorkommen, werden mit &amp;quot;\&amp;quot; maskiert. Ebenso das Zeichen &amp;quot;\&amp;quot; selbst&lt;br /&gt;
* Die Datumsformate sind bei Datumsfeldern immer im deutschen Format (DD.MM.YYYY) vorgesehen&lt;br /&gt;
* Boolean-Werte werden durch &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; codiert&lt;br /&gt;
* Der Dezimaltrenner ist &amp;quot;.&amp;quot;, kein 1000-er Punkt bei Zahlen. &lt;br /&gt;
* Leerstrings und Leerzeichen werden als &amp;quot; &amp;quot; (Leerzeichen) exportiert.&lt;br /&gt;
&lt;br /&gt;
== Upgrade eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Zum Upgrade bzw. zum Zurücksetzen des Moduls auf den Auslieferungszustand entpacken Sie das Paket in $SUPERX_DIR und gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname-/upgrade und führen das Script aus:&lt;br /&gt;
-Modulname-_upgrade.x&lt;br /&gt;
Ausnahme: beim Kernmodul gibt es i.d.R. ein spezielles [[Kern_Installation_Upgrade#Standardvorgehen_beim_Upgrade|Upgrade Script]].&lt;br /&gt;
&lt;br /&gt;
Die Logdatei lautet upgrade.log, im Mandantenfähigen Betrieb &amp;quot;upgrade-MANDANTID-.log&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen separaten Tomcat-Rechner betreiben, müssen Sie das Paket dort ebenfalls entpacken, und vom Datenbankserver die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml an die gleiche Stelle auf den Tomcat Rechner kopieren. Ein nochmaliges Ausführen des Upgrade Scriptes ist nicht nötig, weil dies nur die Datenbank betrifft.&lt;br /&gt;
&lt;br /&gt;
== Hochschulspezifische Anpassung eines Moduls ==&lt;br /&gt;
=== Dateibasierte hochschulspezifische Anpassung ===&lt;br /&gt;
Nach der Installation bzw. beim Upgrade können Sie hochschuleigene SQL Scripte ausführen lassen. Erzeugen Sie dazu eine Datei &lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/customize.sql &lt;br /&gt;
bei Mandantenbetrieb&lt;br /&gt;
  $SUPERX_DIR/db/module/-Modulname-/conf/customize-MANDANTID-.sql &lt;br /&gt;
und füllen Sie diese mit einem beliebigen Inhalt. Das Script wird beim Upgrade des Moduls automatisch am Ende ausgeführt.&lt;br /&gt;
=== Datenbankbasierte hochschulspezifische Laderegeln ===&lt;br /&gt;
Eine Laderoutine gliedert sich in die Schritte&lt;br /&gt;
#Unload: Entladen der CSV Dateien aus dem jew. Vorsystem&lt;br /&gt;
#Load: Upload der CSV Dateien&lt;br /&gt;
#Trans: Transformation der Daten&lt;br /&gt;
#Aggr: Aggregation der Daten&lt;br /&gt;
#Test: Test der Daten&lt;br /&gt;
#System: Standdatum bei Erfolg aktualisieren&lt;br /&gt;
Es ist möglich über sog. &amp;quot;Preparation&amp;quot;- oder &amp;quot;Finalize&amp;quot;-[[Kernmodul_Shellscripte#Hochschulspezifische_Transformationen_im_ETL-Prozess|Scripte]] die Laderoutine am Ende von LOAD bzw. TRANS anzupassen. Dieses Verfahren ist weiterhin möglich, ist aber bzgl. Clustering und Schreibzugriff recht unflexibel.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich im Browser hochschulspezifische Scripte am Ende des jeweiligen Schrittes einer Laderoutine anzulegen. Dies funktioniert so: Die Laderoutine führt zunächst den allgemeinen, von uns vorgegebenen Ladeschritt aus. Wenn dann eine Repository-Variable mit einem gewissen Namensschema existiert, wird sie ausgeführt. Das Namensschema lautet &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Kürzel der Komponente&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;_CUSTOM&lt;br /&gt;
&amp;lt;/source&amp;gt;. &lt;br /&gt;
* Bei Hauptladeroutinen ist dies&lt;br /&gt;
*# Laden: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_load_CUSTOM, z. B. sos_load_CUSTOM&lt;br /&gt;
*# Transformation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_trans_CUSTOM, z. B. sos_trans_CUSTOM&lt;br /&gt;
*# Aggregation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_aggr_CUSTOM, z. B. sos_aggr_CUSTOM&lt;br /&gt;
* Bei Unterladeroutinen ist dies &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_&#039;&#039;&#039;ID des Ladeschritts&#039;&#039;&#039;_CUSTOM, also z. B. cob_trans_fin_busa_CUSTOM für die Unterladeroutine &amp;quot;Lade Buchungen aus FIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um eine Variable neu einzurichten:&lt;br /&gt;
* Gehen Sie in den BI-Standardberichten auf Administration/Hochschul-Repository.&lt;br /&gt;
* Wählen Sie das jeweilige Sachgebiet und schicken Sie das Formular ab.&lt;br /&gt;
* Klicken Sie bei einer Beispielzeile auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;.&lt;br /&gt;
* Im neuen Fenster klicken Sie oben ganz rechts auf das Symbol &#039;&#039;&#039;Datensatz kopieren&#039;&#039;&#039;.&lt;br /&gt;
* Definieren Sie die Variable z. B.&lt;br /&gt;
** als Variablenname die ID z. B.: fin_load_CUSTOM&lt;br /&gt;
** Art der Variable: ein für Sie sprechender Schlüssel mit Modulkürzel, z. B. &amp;quot;fin_Laderegel&amp;quot;&lt;br /&gt;
** als Inhalt der Variable die gewünschten Befehle, z. B. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update fin_buch_neu set ch110_institut=buchungsab_fb where length(buchungsab_fb)=5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** aktiv=1&lt;br /&gt;
** gültig seit 1.1.1900&lt;br /&gt;
** gültig bis 1.1.3000&lt;br /&gt;
* Klicken Sie oben rechts auf das Häkchen-Symbol für &#039;&#039;&#039;Datensatz einfügen&#039;&#039;&#039;.&lt;br /&gt;
* Schließen Sie das Fenster.&lt;br /&gt;
&lt;br /&gt;
Analog können Sie auch die [[Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung|customize]]-Regeln&amp;quot; ins Repository verlagern. Hier heißt die Variable z.B. fin_install_CUSTOM.&lt;br /&gt;
&lt;br /&gt;
== Entfernen eines Moduls ==&lt;br /&gt;
Wenn Sie ein Modul nicht mehr benötigen, starten Sie das Script&amp;lt;br /&amp;gt;&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/-Modulname-_modul_entfernen.x.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses Script löscht alle Tabellen, Prozeduren und Abfragen aus der Datenbank, und löscht auch die Einträge im Themenbaum. Danach können Sie den Pfad $SUPERX_DIR/db/module/-Modulname-löschen.&lt;br /&gt;
Wenn Sie nur die Inhalte der Daten- und Hilfstabellen des Moduls löschen wollen (z.B. aus Datenschutzgründen), ohne das ganze Modul zu deinstallieren, können Sie dies mit folgendem Befehl tun:&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_pg.sql (für Postgres)&amp;lt;br /&amp;gt;&lt;br /&gt;
bzw.&amp;lt;br /&amp;gt;&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_ids.sql (für Informix)&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktueller_Lauf.png&amp;diff=16369</id>
		<title>Datei:SuperX ETL Manager Aktueller Lauf.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktueller_Lauf.png&amp;diff=16369"/>
		<updated>2026-07-13T06:42:38Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktionsbuttons.png&amp;diff=16368</id>
		<title>Datei:SuperX ETL Manager Aktionsbuttons.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktionsbuttons.png&amp;diff=16368"/>
		<updated>2026-07-13T06:42:23Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Uebersicht.png&amp;diff=16367</id>
		<title>Datei:SuperX ETL Manager Uebersicht.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Uebersicht.png&amp;diff=16367"/>
		<updated>2026-07-13T06:41:49Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16366</id>
		<title>Kernmodul Komponentenverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16366"/>
		<updated>2026-07-13T06:37:11Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Komponentenverwaltung im Kernmodul kann je nach Aufgabe über die Browseroberfläche oder über Shell-Skripte erfolgen.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden die Installation, Deinstallation, Aktualisierung und das Upgrade von Modulen überwiegend über Skripte in der Shell durchgeführt. Ab Kernmodul 6.0 steht zusätzlich eine Komponentenverwaltung über die Browseroberfläche zur Verfügung. Diese Browseroberfläche wird im Folgenden als SuperX ETL Manager beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager ist vor allem für die Ausführung und Überwachung von ETL-Prozessen sowie für Modul-Upgrades vorgesehen. Die Installation und Deinstallation von Modulen stehen dort bisher nicht zur Verfügung und werden weiterhin über die Shell-Skripte durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ist daher in zwei Bereiche gegliedert: Zuerst wird die Nutzung des SuperX ETL Managers beschrieben. Anschließend folgt die bisherige Dokumentation zur Installation und Verwaltung von Modulen mit Skripten.&lt;br /&gt;
&lt;br /&gt;
= Komponentenverwaltung im Browser: SuperX ETL Manager =&lt;br /&gt;
Der SuperX ETL Manager dient dazu, ETL-Prozesse der installierten SuperX-Module über die Weboberfläche auszuführen und zu überwachen. Er bietet eine zentrale Übersicht über installierte Module, verfügbare Aktionen, Versionsinformationen, Datenquellen, den aktuellen Lauf sowie technische Zusatzinformationen für die Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der Schwerpunkt der Oberfläche liegt auf dem täglichen Betrieb: Anwenderinnen und Anwender können Laderoutinen starten, den aktuellen Stand eines Laufs verfolgen und bei Bedarf die Log-Ausgabe einsehen. Technische Detail- und Diagnoseinformationen stehen ebenfalls zur Verfügung, sind aber vor allem für Administratorinnen und Administratoren oder den Support gedacht.&lt;br /&gt;
&lt;br /&gt;
[[Datei:SuperX_ETL_Manager_Uebersicht.png|mini|zentriert|Platzhalter: Gesamtübersicht des SuperX ETL Managers mit Modulübersicht, Filterbereich, Aktionsbuttons und aktuellem Lauf.]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Oberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche besteht im Wesentlichen aus folgenden Bereichen:&lt;br /&gt;
&lt;br /&gt;
* Filterbereich&lt;br /&gt;
* Modulübersicht&lt;br /&gt;
* Aktionsbuttons pro Modul&lt;br /&gt;
* Bereich „Aktueller Lauf“&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
* Details-Bereich&lt;br /&gt;
* Diagnose-Bereich&lt;br /&gt;
&lt;br /&gt;
Über den Filterbereich kann die angezeigte Modulliste eingeschränkt werden. Die Modulübersicht zeigt die wichtigsten Informationen zu den vorhandenen Modulen. Über die Aktionsbuttons können ETL-Prozesse gestartet werden. Der Bereich „Aktueller Lauf“ zeigt den zuletzt gestarteten oder aktuell laufenden Prozess an.&lt;br /&gt;
&lt;br /&gt;
Die Bereiche „Details“ und „Diagnose“ liefern zusätzliche technische Informationen. Sie sind hilfreich für Supportfälle, aber für die normale Bedienung nicht zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Modulübersicht ==&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt die installierten bzw. erkannten Module mit ihren wichtigsten Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Spalte&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Modul&lt;br /&gt;
| Zeigt den Namen und das technische Kürzel des Moduls, zum Beispiel „Administration“ mit dem Kürzel „kern“ oder „Kennzahlen“ mit dem Kürzel „kenn“.&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Zeigt, ob das Modul installiert ist.&lt;br /&gt;
|-&lt;br /&gt;
| Versionen&lt;br /&gt;
| Zeigt die installierte Version und die verfügbare Version des Moduls.&lt;br /&gt;
|-&lt;br /&gt;
| Letztes Update&lt;br /&gt;
| Zeigt den Zeitpunkt des letzten bekannten Updates.&lt;br /&gt;
|-&lt;br /&gt;
| Datenquelle&lt;br /&gt;
| Zeigt, aus welcher Datenquelle das Modul seine Daten bezieht oder auf welcher Datenbasis der ETL-Prozess arbeitet.&lt;br /&gt;
|-&lt;br /&gt;
| DB-Verbindung&lt;br /&gt;
| Zeigt, ob die Verbindung zur Datenbank bzw. Datenquelle aktuell erreichbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| Aktionen&lt;br /&gt;
| Zeigt die verfügbaren Aktionen für das jeweilige Modul.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Versionen ===&lt;br /&gt;
&lt;br /&gt;
In der Spalte „Versionen“ werden zwei Werte angezeigt:&lt;br /&gt;
&lt;br /&gt;
* installierte Version&lt;br /&gt;
* verfügbare Version&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der aktuell in der Datenbank installiert ist. Die verfügbare Version beschreibt den ausgelieferten Stand des Moduls, der in der Installation vorliegt.&lt;br /&gt;
&lt;br /&gt;
Wenn die verfügbare Version höher ist als die installierte Version, sollte in der Regel ein Upgrade des Moduls durchgeführt werden. Dadurch werden die Datenstrukturen des Moduls auf den ausgelieferten Stand aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Datenquelle ===&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle gibt an, aus welchem System ein Modul seine Daten bezieht oder auf welcher Datenbasis es arbeitet.&lt;br /&gt;
&lt;br /&gt;
SuperX ist ein Data Warehouse. Viele Module übernehmen Daten aus externen vorsystemen. Beispiele für solche Datenquellen sind:&lt;br /&gt;
&lt;br /&gt;
* cob für Kostenrechnung&lt;br /&gt;
* mbs für Finanzrechnung, Inventar oder Gebäude/Räume/Flächen&lt;br /&gt;
* sva für Personal- und Stelleninformationen&lt;br /&gt;
* hisinone bei entsprechend angebundenen Modulen&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es Module, die auf bereits in SuperX vorhandene Daten zurückgreifen. In solchen Fällen wird als Datenquelle „SuperX“ angezeigt. Das betrifft vor allem Module, die modulübergreifend, auswertungsorientiert oder spezialisiert auf vorhandene SuperX-Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
Beispiele hierfür können sein:&lt;br /&gt;
&lt;br /&gt;
* kenn für Kennzahlen&lt;br /&gt;
* man für Managementberichte&lt;br /&gt;
* erfolg für Studienverlauf bzw. Erfolgsbetrachtungen&lt;br /&gt;
* gang für Studiengänge&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle „SuperX“ bedeutet also nicht, dass keine Daten verarbeitet werden. Sie zeigt an, dass die Verarbeitung auf Daten basiert, die bereits im SuperX-System vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Aktionen ausführen ==&lt;br /&gt;
&lt;br /&gt;
Die verfügbaren Aktionen hängen vom jeweiligen Modul ab. Nicht jedes Modul unterstützt alle Aktionen. Wenn eine Aktion nicht verfügbar ist, wird der entsprechende Button nicht angezeigt oder ist nicht aktiv.&lt;br /&gt;
&lt;br /&gt;
[[Datei:SuperX_ETL_Manager_Aktionsbuttons.png|mini|zentriert|Platzhalter: Modulzeile mit den Aktionsbuttons Unload, Update, Unload &amp;amp; Update und Upgrade.]]&lt;br /&gt;
&lt;br /&gt;
=== Unload ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ entlädt Daten aus einem angebundenen Vorsystem, sofern für das Modul ein Vorsystem angebunden ist.&lt;br /&gt;
&lt;br /&gt;
Der Unload dient dazu, Daten aus der jeweiligen Datenquelle bereitzustellen, damit sie anschließend in SuperX verarbeitet werden können. Je nach Modul und Einrichtung kann der Unload auch dazu dienen, Daten für eine weitere Verarbeitung oder Übertragung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Update“ lädt vorhandene Rohdaten in SuperX ein und führt die Hauptladeroutine des Moduls aus.&lt;br /&gt;
&lt;br /&gt;
Dies ist in vielen Fällen die wichtigste Aktion für den täglichen Betrieb. Beim Update werden die vorhandenen Rohdaten verarbeitet und die zugehörigen SuperX-Tabellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Unload &amp;amp; Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload &amp;amp; Update“ führt zuerst den Unload und anschließend das Update aus.&lt;br /&gt;
&lt;br /&gt;
Diese Aktion ist sinnvoll, wenn neue Daten aus einem angebundenen Vorsystem entladen und direkt anschließend in SuperX verarbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Upgrade“ führt eine Modulaktualisierung durch. Dabei werden die Datenstrukturen des Moduls auf den ausgelieferten Stand gebracht.&lt;br /&gt;
&lt;br /&gt;
Ein Upgrade sollte ausgeführt werden, wenn eine neue verfügbare Version angezeigt wird oder wenn dies im Rahmen eines Modulupdates erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
== Sonderfall Kennzahlen-Modul ==&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ ist die Verarbeitung etwas anders als bei typischen Modulen mit externem Vorsystem.&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist hier in der Regel „SuperX“. Das bedeutet, dass die Kennzahlen nicht primär aus einem externen Fremdsystem entladen werden. Stattdessen basiert die Verarbeitung auf Daten, die bereits in SuperX vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Für den täglichen Betrieb ist beim Kennzahlen-Modul daher häufig vor allem die Aktion „Update“ relevant. Dabei werden die Kennzahlen auf Basis der vorhandenen SuperX-Daten neu berechnet bzw. aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ kann beim Kennzahlen-Modul eine andere Bedeutung haben als bei klassischen Vorsystem-Modulen. Sie kann dazu dienen, Kennzahlen für ein anderes System bereitzustellen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* für ein hochschulübergreifendes SuperX&lt;br /&gt;
* für Vergleichssysteme&lt;br /&gt;
* für landesweite Auswertungen oder Berichtssysteme&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Aktion „Unload &amp;amp; Update“ ist beim Kennzahlen-Modul daher nicht immer die wichtigste Aktion. In vielen Installationen wird das Update gezielt über die Oberfläche ausgeführt, während Export- oder Übertragungsprozesse über automatische Abläufe wie Cronjobs gesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Lauf ==&lt;br /&gt;
&lt;br /&gt;
Der Bereich „Aktueller Lauf“ zeigt Informationen zum zuletzt gestarteten oder aktuell laufenden ETL-Prozess.&lt;br /&gt;
&lt;br /&gt;
Typische Informationen sind:&lt;br /&gt;
&lt;br /&gt;
* JobExecutionId&lt;br /&gt;
* Name des gestarteten Jobs&lt;br /&gt;
* Status&lt;br /&gt;
* Fortschritt&lt;br /&gt;
* Anzahl der ausgeführten Schritte&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
&lt;br /&gt;
[[Datei:SuperX_ETL_Manager_Aktueller_Lauf.png|mini|zentriert|Platzhalter: Bereich „Aktueller Lauf“ mit JobExecutionId, Status, Fortschritt und Log-Ausgabe.]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
Der Status zeigt den aktuellen Zustand des Laufs. Häufige Statuswerte sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| STARTING&lt;br /&gt;
| Der Lauf wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
| STARTED&lt;br /&gt;
| Der Lauf wurde gestartet und wird ausgeführt.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETED&lt;br /&gt;
| Der Lauf wurde erfolgreich abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| FAILED&lt;br /&gt;
| Der Lauf ist mit einem Fehler abgebrochen.&lt;br /&gt;
|-&lt;br /&gt;
| STOPPED&lt;br /&gt;
| Der Lauf wurde gestoppt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fortschritt ===&lt;br /&gt;
&lt;br /&gt;
Der Fortschritt zeigt, wie viele Prozessschritte bereits abgearbeitet wurden. Er ist als technischer bzw. prozessbezogener Fortschritt zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Fortschrittswert ist keine genaue Zeitprognose.&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann schnell auf eine hohe Prozentzahl springen und dort längere Zeit stehen bleiben, wenn ein einzelner Verarbeitungsschritt besonders lange dauert. Umgekehrt können viele kleine Schritte sehr schnell nacheinander abgeschlossen werden. Die Prozentanzeige beschreibt daher den Abarbeitungsstand der Prozessschritte, nicht die tatsächlich vergangene oder verbleibende Zeit.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann bereits 80 % anzeigen, obwohl noch ein größerer Verarbeitungsschritt aussteht. Ebenso kann ein Lauf am Anfang längere Zeit bei einer niedrigen Prozentzahl stehen bleiben, wenn ein früher Prozessschritt besonders umfangreich ist.&lt;br /&gt;
&lt;br /&gt;
== Log-Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe zeigt technische Informationen zum ausgeführten ETL-Prozess. Sie kann helfen, den Ablauf nachzuvollziehen und bei Problemen erste Hinweise zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe ist vor allem für Supportfälle hilfreich. Für eine tiefergehende Fehleranalyse sind in der Regel administrative Kenntnisse erforderlich. Je nach Fehler müssen zusätzlich Serverlogs, Datenbankinhalte, Moduldateien oder Systemkonfigurationen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Log-Ausgabe nicht sofort erscheint, kann sie über „Log laden“ erneut abgefragt werden. Gerade bei umfangreichen Läufen kann es vorkommen, dass die Log-Ausgabe erst kurze Zeit nach Abschluss vollständig verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
== Typische Nutzungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Bereits vorhandene Rohdaten verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Rohdaten bereits vorhanden sind und lediglich erneut verarbeitet werden sollen, wird in der Regel die Aktion „Update“ verwendet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Rohdaten liegen bereits im System vor&lt;br /&gt;
* Berechnungen oder Aggregationen sollen neu ausgeführt werden&lt;br /&gt;
* die SuperX-Tabellen des Moduls sollen aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Daten aus einem Vorsystem übernehmen und verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn neue Daten aus einem externen Vorsystem übernommen und anschließend verarbeitet werden sollen, kann die Aktion „Unload &amp;amp; Update“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden zunächst die Daten aus dem Vorsystem entladen. Anschließend werden die Daten durch das Update in SuperX verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload &amp;amp; Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nur Daten aus einem Vorsystem entladen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten aus einem Vorsystem entladen werden sollen, ohne direkt anschließend die Laderoutine auszuführen, kann die Aktion „Unload“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul auf den ausgelieferten Stand aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue verfügbare Version angezeigt wird, sollte ein Upgrade geprüft bzw. durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen innerhalb von SuperX aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ werden die Daten in der Regel aus SuperX selbst bezogen. Wenn die Kennzahlen neu berechnet oder aktualisiert werden sollen, ist häufig die Aktion „Update“ die passende Aktion.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen für ein anderes System bereitstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Kennzahlen für ein anderes System bereitgestellt werden sollen, kann beim Kennzahlen-Modul die Aktion „Unload“ relevant sein.&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel für hochschulübergreifende Auswertungen, Vergleichssysteme oder landesweite Berichtssysteme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Nutzung ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung des ETL Managers sollten folgende Punkte beachtet werden:&lt;br /&gt;
&lt;br /&gt;
* Ein laufender Prozess sollte nicht unnötig mehrfach parallel gestartet werden.&lt;br /&gt;
* Nach einem Lauf kann die Modulübersicht über „Aktualisieren“ neu geladen werden.&lt;br /&gt;
* Die Prozentanzeige ist kein Zeitindikator, sondern beschreibt den Fortschritt der Prozessschritte.&lt;br /&gt;
* Bei Fehlern sollte zuerst der Status und anschließend die Log-Ausgabe geprüft werden.&lt;br /&gt;
* Für tiefergehende Fehleranalysen sollten Administratorinnen und Administratoren oder technische Ansprechpartner einbezogen werden.&lt;br /&gt;
* Bei neuen verfügbaren Modulversionen sollte geprüft werden, ob ein Upgrade auszuführen ist.&lt;br /&gt;
&lt;br /&gt;
== Details-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Über den Button „Details“ können zusätzliche technische Informationen zu einem Modul angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Der Details-Bereich ist vor allem für fortgeschrittene Benutzerinnen und Benutzer, Administratorinnen und Administratoren oder den Support gedacht. Er kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* technische Modulkennung&lt;br /&gt;
* Systeminfo-ID&lt;br /&gt;
* technische Jobnamen&lt;br /&gt;
* verfügbare Jobs&lt;br /&gt;
* Rohdaten der Schnittstelle&lt;br /&gt;
* zusätzliche technische Moduldetails&lt;br /&gt;
&lt;br /&gt;
Für den normalen Betrieb ist der Details-Bereich meist nicht erforderlich. Er ist vor allem dann hilfreich, wenn bei Rückfragen oder Supportfällen genaue technische Informationen benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diagnose-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist eine technische Hilfsfunktion zur Prüfung der ETL-Manager-Installation. Er ist global angeordnet und nicht auf ein einzelnes Modul beschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Diagnose führt keine Reparaturen automatisch aus. Sie zeigt technische Informationen, mögliche Auffälligkeiten und Hinweise an. Zusätzlich können SQL- oder Shell-Hinweise angezeigt werden, die bei Bedarf von Administratorinnen und Administratoren kopiert und manuell ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* Erreichbarkeit der REST-Schnittstellen&lt;br /&gt;
* Webapp-, Tomcat- und Java-Informationen&lt;br /&gt;
* Pfade und Dateisysteminformationen&lt;br /&gt;
* Festplattenspeicher&lt;br /&gt;
* Datenbankinformationen&lt;br /&gt;
* Prüfung der Log-Tabelle&lt;br /&gt;
* Versionsquellen&lt;br /&gt;
* bekannte Fehlerbilder&lt;br /&gt;
* kopierbare SQL- und Shell-Hinweise&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist vor allem für Administratorinnen und Administratoren oder technische Ansprechpartner gedacht. Für normale Anwenderinnen und Anwender ist er in der Regel nur dann relevant, wenn ein Fehler auftritt oder technische Informationen weitergegeben werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Administratorhinweise ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält ergänzende technische Hinweise. Er richtet sich vor allem an Administratorinnen und Administratoren sowie an den technischen Support.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft der Versionsinformationen ===&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche zeigt eine installierte und eine verfügbare Version an.&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der in der Datenbank installiert ist. Falls die REST-Schnittstelle keinen Wert liefert, kann die Version aus der Tabelle &amp;lt;code&amp;gt;db_version&amp;lt;/code&amp;gt; gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die verfügbare Version beschreibt den ausgelieferten Stand im Dateisystem. Sie kann aus der Modul-XML-Datei gelesen werden. Für normale Module liegt diese Datei typischerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/&amp;lt;modul&amp;gt;/conf/&amp;lt;modul&amp;gt;.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul gilt ein Sonderfall. Die Modul-XML liegt unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/install/conf/kern.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann eine Datei &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; im jeweiligen Modulverzeichnis als Fallback verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Log-Tabelle ===&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe des ETL Managers verwendet eine Datenbanktabelle für die Joblogs. Wenn diese Tabelle fehlt oder unvollständig ist, kann die Log-Ausgabe fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Struktur der Tabelle ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS job_log&lt;br /&gt;
(&lt;br /&gt;
   job_instance_id  bigint   NOT NULL,&lt;br /&gt;
   log              text,&lt;br /&gt;
   status           text&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX IF NOT EXISTS ix_job_log1&lt;br /&gt;
ON public.job_log USING btree (job_instance_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese SQL-Anweisungen sollten nicht automatisch durch die Oberfläche ausgeführt werden. Sie dienen als Hinweis für Administratorinnen und Administratoren und müssen bei Bedarf manuell geprüft und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Typische technische Fehlerbilder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehlerbild&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/jobLog/{id}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Die Tabelle &amp;lt;code&amp;gt;job_log&amp;lt;/code&amp;gt; fehlt, ist unvollständig oder der Logeintrag ist noch nicht verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/job/list/{modul}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Moduldateien fehlen, Pfade stimmen nicht oder die Webapp verwendet nicht den erwarteten Dateistand.&lt;br /&gt;
|-&lt;br /&gt;
| REST-Endpunkt liefert HTTP 404&lt;br /&gt;
| Der Context-Pfad, die Webapp, der Port oder ein Tunnel zeigt möglicherweise nicht auf die erwartete Anwendung.&lt;br /&gt;
|-&lt;br /&gt;
| Log erscheint erst nach erneutem Laden&lt;br /&gt;
| Der ETL-Lauf ist abgeschlossen, aber der Logeintrag war beim ersten Abruf noch nicht vollständig verfügbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager stellt eine zentrale Oberfläche zur Ausführung und Überwachung von ETL-Prozessen bereit. Für den täglichen Betrieb stehen vor allem die Aktionen „Unload“, „Update“, „Unload &amp;amp; Update“ und „Upgrade“ im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt den Installationsstatus, Versionsinformationen, Datenquellen und Datenbankverbindungen. Der Bereich „Aktueller Lauf“ informiert über den Fortschritt eines gestarteten Prozesses. Die Log-Ausgabe liefert technische Zusatzinformationen und kann bei der Fehleranalyse helfen.&lt;br /&gt;
&lt;br /&gt;
Details und Diagnose ergänzen die Oberfläche um technische Informationen für Support- und Administrationsfälle. Sie unterstützen bei der Analyse, führen aber keine automatischen Reparaturen aus.&lt;br /&gt;
&lt;br /&gt;
= Installation und Verwaltung in der Shell mit Skripten =&lt;br /&gt;
&lt;br /&gt;
== Installation von Modulen ==&lt;br /&gt;
Das Kernmodul enthält außer Administrationsabfragen und Tabellen keinerlei Inhalte. Die Inhalte werden in Form von Modulen hinzugefügt. Dazu gibt es vorgefertigte [[Kernmodul_Shellscripte#Modulverwaltung|Installationsscripte]].&lt;br /&gt;
&lt;br /&gt;
=== Architektur von SuperX-Modulen ===&lt;br /&gt;
Die folgende Abbildung zeigt die Architektur von Modulen ab Beispiel vom HISCOB-Modul:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Ein Modul besteht auf Datenbankseite aus Abfragen, Hilfstabellen, Datentabellen und Schlüsseltabellen (sowie Prozeduren).&lt;br /&gt;
Auf Webserver-Seite können auch XSL-Stylesheets vorhanden sein.&lt;br /&gt;
| [[Bild:modularchitektur_cob.png|417x307px]]&lt;br /&gt;
|}&lt;br /&gt;
Die Abbildung zeigt, dass ein Modul eigene Komponenten nutzt, aber auch auf Teile des Kernmoduls zugreift, z.B. das Orgranigramm - dies macht SuperX zu einem integrierten System. Neben dem Organigramm sind alle anderen Komponenten des Kernmoduls natürlich betroffen, z.B. Themenbaum, Userrechte.&lt;br /&gt;
Die Ordnerstruktur eines Moduls spiegelt die Komponenten des Systems wieder. Es gibt je ein Verzeichnis für datentabellen, schluesseltabellen und hilfstabellen. &lt;br /&gt;
Die Installation eines Moduls ist in der Dokumentation des jeweiligen Moduls näher beschrieben. Module, die auf dem Kernmodul 2.1 oder höher basieren, haben einen einheitlichen Aufbau.&lt;br /&gt;
&lt;br /&gt;
=== Modulscripte im Kernmodul ===&lt;br /&gt;
Seit Version 2.1 werden die Datenbankschemata und Scripte der Module in einem einheitlichen Format zusammengestellt und in einer Datei $SUPERX_DIR/db/module/$MODULNAME/conf/$MODULNAME.xml gespeichert. Das XML-Format hat den Vorteil, dass die Scripte dynamisch für Postgres und Informix erzeugt werden können, und dass die Scripte vereinheitlicht werden. Aus dieser Datei werden die Scripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen. Die folgende Abbildung zeigt das Vorgehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Aus der xml-Datei werden die jeweiligen Scripte für die Installation, den Update, die Extraktions-, Transformations- und Ladescripte (ETL) und die Deinstallation erzeugt.&lt;br /&gt;
| [[Bild:modulscripte_erzeugen.png|417x371px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Modul-Scripte liegen als Shellscripte im Verzeichnis $SUPERX_DIR/db/bin, und sind an [[Kernmodul_Shellscripte#Modulverwaltung|anderer Stelle]] im Detail erläutert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| module_install.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_install.x sos $SOS_PFAD&lt;br /&gt;
| Installiert ein Modul, d.h. erzeugt die Tabellen, Views, Funktionen und Abfragen. Die Abfragen werden in den Themenbaum eingehängt. &lt;br /&gt;
|-&lt;br /&gt;
| module_etl.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_etl.x sos $SOS_PFAD&lt;br /&gt;
| Aktualisiert das Modul, d.h. lädt die Rohdaten, Transformiert sie, und aggregiert die Hilfstabellen. Fehler werden in eine Log-Datei geschrieben, diese kann dann per Mail an einen Admin versandt werden. Wenn das Script erfolgreich durchläuft, wird die Tabelle systeminfo aktualisiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Script wird nicht direkt als Cronjob aufgerufen, sondern von einem Shellscript, das die Umgebungsvariablen und Parameter setzt, z.B. cob_update.x.&lt;br /&gt;
|-&lt;br /&gt;
| module_drop.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_ drop.x sos $SOS_PFAD&lt;br /&gt;
| Entfernt das Modul bzw. die Tabellen, Views, Funktionen und Abfragen.&lt;br /&gt;
|-&lt;br /&gt;
| module_scripts_create.x -name- -pfad- -Datenbanksystem(optional, INFORMIX, POSTGRES)- -Versionsnr.-&lt;br /&gt;
| Erzeugt via XSL-Transformation die jeweiligen Scripte, die in den obigen Scripten aufgerufen werden, z.B. bau_install_ids.sql für das Installationsscript des Baumoduls beim Informix Dynamic Server.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den operativen Scripten erzeugt module_scripts_create.x auch html-Dateien zur Dokumentation eines Moduls in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/-Modulname-.html&lt;br /&gt;
(auch als rtf-Datei zu Einbindung in Modul-Dokumentationen) sowie zur Schnittstelle in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/rohdaten/-Modulname-_unload.html&lt;br /&gt;
Darüber hinaus werden auch DBForms-Formulare erzeugt.&lt;br /&gt;
&lt;br /&gt;
=== Installation eines Moduls: Allgemeines Vorgehen ===&lt;br /&gt;
Das Vorgehen bei der Installation eines Moduls ist standardisiert. Im folgenden eine Kurzbeschreibung, weiter unten finden Sie das Vorgehen am Beispiel des ZUL-Moduls im Detail.&lt;br /&gt;
* Entpacken Sie das Modul in $SUPERX_DIR&lt;br /&gt;
* Erweiterung der Umgebung in der Datei $SUPERX_DIR/db/bin/SQL_ENV: fügen Sie den Inhalt der jew. Beispieldatei SQL_ENV_-Modulname-.sam in der SQL_ENV an, wenn noch nicht vorhanden, und ändern Sie ggf. Email-Adressen für log- und Fehlermails.&lt;br /&gt;
* Entladen der Rohdaten; auch hier müssen vorher Umgebungsvariablen zum Vorsystem angepasst werden&amp;lt;br /&amp;gt;&lt;br /&gt;
(Datei $-Modulname-_LOAD_PFAD/-Modulname-_ENV), hier liegt ebenfalls eine *.sam-Datei vor&lt;br /&gt;
* Kopieren der Rohdaten nach -Modulpfad-/rohdaten. Neuere SuperX-Module haben dafür vorgefertigte Scripte mit dem Namen -Modulname-_copy.x (z.B. zul_copy.x)&lt;br /&gt;
* Installieren Sie das Modul mit -Modulname-_erzeugen.x, z.B. mit  zul_modul_erzeugen.x&lt;br /&gt;
* Wenn die Installation erfolgreich war, können Sie das Modul aktualisieren mit&amp;lt;br /&amp;gt;&lt;br /&gt;
-Modulname-_update.x (ggf. mit Parametern)&amp;lt;br /&amp;gt;&lt;br /&gt;
z.B. mit &lt;br /&gt;
 zul__update.x&lt;br /&gt;
d.h. die ETL-Prozesse werden gestartet (s.u.).&lt;br /&gt;
* Wenn das Modul erfolgreich aktualisiert ist, wird eine Prüfprozedur gestartet, die die Daten plausibilisiert. Fehler und Warnungen finden Sie in der Datei $-Modulname-_ERRORDAT.&lt;br /&gt;
* Starten Sie Tomcat neu. Wenn Tomcat auf einem separaten Server installiert ist, müssen Sie vorher die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml dorthin übertragen. &lt;br /&gt;
* Schritt 7 wird bei jedem SuperX-Update wiederholt. Nun muss der Entladerhythmus geplant werden, und die Cronjobs werden eingerichtet. Es gibt eine Musterdatei $SUPERX_DIR/db/module/-MODULNAME-/-MODUL-_update_cron.x.sam , benennen sie diese um nach -MODUL-_update_cron.x und fügen Sie das Script in die crontab ein. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines zum Laden ====&lt;br /&gt;
Zunächst müssen die Rohdaten aus dem Vorsystem entladen werden. &lt;br /&gt;
Für das Entladen gibt es ferner zwei Modi: Das &amp;quot;Pull&amp;quot;-Verfahren und das &amp;quot;Push&amp;quot;-Verfahren. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Pull&amp;quot;-&#039;&#039;&#039;Verfahren wird einer Benutzerkennung auf dem SuperX-Rechner Zugriffsrecht auf die SOSPOS-Datenbank gegeben, und die Daten werden via TCP/IP aus dem Basissystem entladen. Bei APP / HISinOne als Quellsystem ist &amp;quot;Pull&amp;quot; das Standardvorgehen. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Push&amp;quot;-&#039;&#039;&#039;Verfahren werden die Entladescripte auf den SOSPOS-Rechner kopiert und dort von einer Benutzerkennung auf dem SOSPOS-Rechner ausgeführt. Die Rohdaten müssen dann auf den SuperX-Rechner kopiert werden. Dieses Verfahren klappt bei Informix unter Unix problemlos, bei Entladen aus Postgres müsste das komplette SuperX-Kernmodul installiert werden. &lt;br /&gt;
Am einfachsten ist immer das &amp;quot;Pull&amp;quot;-Verfahren, das mit fast allen Quellsystemen funktioniert und wenig Konfiguration auf dem Quellsystem erfordert. Aufgrund von Sicherheitsvorkehrungen oder Netz-Infrastrukturen wählen aber viele Hochschulen das &amp;quot;Push&amp;quot;-Verfahren. Da derzeit Informix /Unix die gängigste Plattform an Hochschulen ist, ist dies auch kein Problem. &lt;br /&gt;
&lt;br /&gt;
==== Einrichtung der Entladescripte ====&lt;br /&gt;
Im Push-Verfahren btw. unter SuperX können Sie mitgelieferte Shellscripte nutzen. Das folgende Beispiel des ZUL-Moduls zeigt das Vorgehen:&lt;br /&gt;
Die Entladescripte liegen im Verzeichnis $SUPERX_DIR/db/module/zul/rohdaten und lauten je nach Systemversion: &lt;br /&gt;
 zul_unload.x&lt;br /&gt;
&lt;br /&gt;
Die Scripte laufen nur, wenn die entsprechenden Umgebungsvariablen in der Datei ZUL_ENV (im gleichen Verzeichnis, ein Muster liegt vor in ZUL_ENV.sam) korrekt gesetzt sind, benennen Sie die Musterdatei um nach ZUL_ENV und tragen die richtigen Umgebungsvariablen ein, z.B. den Pfad für $INFORMIXDIR. &lt;br /&gt;
&#039;&#039;&#039;ZUL_ENV Die Umgebung für Entladescripte aus ZUL-GX(Auszug)&#039;&#039;&#039; &lt;br /&gt;
 ##Pfad für Entladedaten:&lt;br /&gt;
 ZUL_PFAD=.; export ZUL_PFAD &lt;br /&gt;
 ##hier muss Unterverzeichnis unl existieren!&lt;br /&gt;
&lt;br /&gt;
 In der ZUL_ENV müssen außerdem folgende Umgebungsvariablen gesetzt werden (defaults sind bereits vorbelegt, aber hier und da müssen Sie sicher ran): &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Informix gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXDIR&lt;br /&gt;
| Home-Verzeichnis von Informix &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXSERVER&lt;br /&gt;
| Name des Informixservers &lt;br /&gt;
|-&lt;br /&gt;
| ONCONFIG&lt;br /&gt;
| Name der onconfig, wenn auf dem SOS-Rechner mehrere Informix-Instanzen laufen &lt;br /&gt;
|-&lt;br /&gt;
| CLIENT_LOCALE&lt;br /&gt;
| Sprachumgebung (wichtig fürs Entladen von Datumsformaten) &lt;br /&gt;
|-&lt;br /&gt;
| SERVER_LOCALE&lt;br /&gt;
| dito &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Postgres gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| PGDATESTYLE&lt;br /&gt;
| Datumsformat &amp;quot;German&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| PGPORT&lt;br /&gt;
| Port vom Postgres-Server, standardmäßig 5432 &lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname oder IP-Adresse vom Postgres-Server &lt;br /&gt;
|-&lt;br /&gt;
| PGUSER&lt;br /&gt;
| Benutzerkennung für Postgres-Server (nur Datenbank, nicht Betriebssystem) &lt;br /&gt;
|-&lt;br /&gt;
| PGPATH&lt;br /&gt;
| Installationsverzeichnis von Postgres, z.B. /usr/local/pgsql &lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur db-zul.properties-Datei mit den Zugangsparametern für SOSPOS unter Postgres &lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Pfad zur Steuerungsdatei mit den Parametern für das Logging beim Entladen, voreingestellt auf ./logging.properties. Normalerweise brauchen Sie hier nichts ändern, wenn beim Entladen Probleme auftauchen, kann man den Level von SEVERE auf INFO oder FINEST ändern, dann werden die konkreten SQLs geloggt. Aber Achtung: wenn keine Fehler mehr auftreten, müssen Sie den Level wieder auf SERVERE ändern, sonst kommen Schlüsselworte in die Logdatei zul_unload.err, die dann bei der Übernahme nach SuperX fälschlicherweise zu Fehlermeldungen führen. &lt;br /&gt;
|}&lt;br /&gt;
Unter Postgres muss für das &amp;quot;Pull&amp;quot;-Verfahren beim Entladen die Datenbankverbindung in der Datei db-zul.properties eingetragen werden (Muster für Postgres liegt bei in db-zul_pg.properties). Dazu laden Sie einmal die Datei ZUL_ENV mit den obigen Parameter, starten den SuperX-Propadmin (siehe Administrationshandbuch Kernmodul) und richten die Verbindung zum SOSPOS-Server ein. Das Kennwort wird verschlüsselt gespeichert. Danach sind die Entladescripte für Postgres ausführbar. &lt;br /&gt;
Hinweis: Anders als Informix hat Postgres hat eine eigene, vom Basissystem unabhängige Benutzerverwaltung. Daher brauchen Sie den User, den Sie zum Entladen aus Postgres nutzen, nicht auf dem SuperX- oder SOSPOS-Rechner auf Betriebssystem-Ebene einrichten. Sie können also z.B. auf dem SuperX-Rechner zum Entladen aus SOSPOS die Kennung sospos des Postgres- Rechners verwenden. Oder Sie richten in der SOSPOS -Datenbank den Benutzer SuperX ein und geben ihm Leserecht auf die Tabellen sowie das Recht, Tabellen und Stored Procedures anzulegen. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Für alle Platformen gelten folgende Variablen:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ERRORMAIL&lt;br /&gt;
| An wen solle eine Logmail verschickt werden, wenn das Entladen nicht geklappt hat? (nur Unix). &lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL&lt;br /&gt;
| An wen soll immer eine Logmail verschickt werden &lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Pfad zum ausführbaren Mailprogramm unter Unix, Vorbelegung ist &amp;quot;mail&amp;quot;, manche Unixe haben aber auch &amp;quot;mutt&amp;quot; oder &amp;quot;mailx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom ZUL-Rechner auf den SuperX-Rechner kopiert werden sollen, dann werden für das Script zul_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync und scp sind wählbar. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem SuperX-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/zul/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem SuperX-Rechner, in der Regel &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des SuperX-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Dann starten Sie das Script zul_unload.x. Wenn es gelaufen ist, müssten die Dateien im unl-Verzeichnis stehen. Prüfen Sie dann bitte, ob dort Dateien mit 0 bytes stehen. Die Logdatei heisst zul_unload.err. &lt;br /&gt;
&lt;br /&gt;
===== Entladen unter Windows =====&lt;br /&gt;
Für das Entladen unter Windows gibt es Muster-Dateien im jew. Rohdaten-Verzeichnis, z.B. $SOS_PFAD/rohdaten/sos_unload.bat. Die Einrichtung geschieht dann in [[Kernmodul_Komponentenverwaltung#Java-Client_zum_Entladen_von_Quell-Datenbanken|Java]]. Ans Ende der Datei können Sie noch schreiben:&lt;br /&gt;
date /T &amp;gt;superx.datum&lt;br /&gt;
Dann wird auch die Datumsdatei geschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Dateitransfer beim Push-Verfahren =====&lt;br /&gt;
Wenn Sie das Verzeichnis nicht gemounted haben, müssen das Verzeichnis unl, die zul_unload.err und die superx.datum dann in das Verzeichnis $ZUL_LOAD_PFAD auf dem SuperX-Rechner kopiert werden, ein Script dafür liegt ebenfalls bei (zul_copy.x). Das Entladedatum wird danach in der Textdatei $ZUL_LOAD_PFAD/superx.datum gespeichert; wenn das Script einen Fehler findet, dann wird das vorherige Datum (in der Datei superx.datum.alt) gesetzt. &lt;br /&gt;
&lt;br /&gt;
Für den Transfer der Rohdaten beim Push-Verfahren wird in SuperX die dateibasierte Schnittstelle genutzt. Unter UNIX läßt sich dieser Transfer vollends automatisieren, indem die Programme scp oder rsync auf der Basis des OpenSSH-Pakets genutzt werden. Beide setzen auf das ssh-Protokoll 2 auf und stellen somit einen verschlüsselten Dateitransfer sicher. Auch [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] ist möglich. &lt;br /&gt;
In den jeweiligen Modulen wird im Verzeichnis rohdaten eine Beispieldatei mit dem Namen -MODULNAME-_ENV.sam ausgeliefert, die Sie umbenennen können nach -MODULNAME-_ENV. Darin werden am Ende der Datei die Parameter zum Kopieren festgelegt, also die Userkennung REMOTE_USER, der Hostname REMOTE_HOST, und die Methode des Kopierens (COPY_METHOD) sowie die jeweiligen Zielpfade. Diese Umgebungsvariablen werden von dem jeweiligen Script -modulname-_copy.x benutzt. &lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Unix =====&lt;br /&gt;
Damit die Passworteingabe unter Unix entfällt, muss man wie folgt vorgehen:&lt;br /&gt;
Loggen Sie sich zunächst testweise einmal ein. Wenn Sie z.B. vom COB-Server auf den SuperX-Server kopieren wollen, loggen Sie sich als user cob auf cobhost ein mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh superx@superxhost&lt;br /&gt;
Beim ersten Mal müssen Sie die Sicherheitsabfrage mit &amp;quot;yes&amp;quot; bestätigen.&lt;br /&gt;
Erzeugen Sie auf dem Quellrechner einen öffentlichen Schlüssel mittels &lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;cob@cobhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 wobei man eine leere Passphrase vergibt. Der öffentliche Teil dieses Schlüssels (~/.ssh/id_ed25519.pub) muss auf dem Zielrechner in die Datei ~/.ssh/authorized_keys eingefügt werden, ggf. muss die Datei neu erzeugt werden.&lt;br /&gt;
Wenn z.B. auf dem COB-Server unter der Kennung cob ein Key wie folgt erzeugt wurde:&lt;br /&gt;
&lt;br /&gt;
;Beispieleintrag eines Public Keys:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-ed25519 AAAAC3N.[hier viele kryptische Zeichen]....4V cob@cobhost&lt;br /&gt;
&lt;br /&gt;
Dann wird genau diese Zeile in der Datei /home/superx/.ssh/authorized_keys angefügt (die Datei kann mehrere PublicKeys enthalten, ein Eintrag pro Absatz).&lt;br /&gt;
Achten Sie auch auf Dateirechte: Die Verzeichnisse und Dateien sollten keine Schreibrechte für Gruppen haben. Im Zweifelsfall z.B. für den user superx:&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 600 /home/superx/.ssh/authorized_keys&lt;br /&gt;
Danach sollte z.B. der Login vom cobhost als user cob mit ssh superx@superxhost ohne Passworteingabe klappen. Wenn nicht, schalten Sie das Logging mit ssh -v superx@superxhost ein. Eine Möglichkeit ist, dass die PublicKey-Authentifizierung in der Konfigurationsdatei des SSHD (normal /etc/ssh/ssh_config) abgeschaltet ist. Weitere Diagnosen liefert die Datei /var/log/messages.&lt;br /&gt;
Sie können außerdem noch einschränken, von welchem Host die obige Authentifizierung ermöglicht wird. Dazu setzen Sie den Parameter &amp;quot;from=*.uni-xy.de&amp;quot; davor, z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Einschränkung &amp;quot;from&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
in authorized_keys&lt;br /&gt;
| from=&amp;quot;*.uni-xy.de&amp;quot; ssh-rsa AAAAB3Nza…[hier viele kryptische &lt;br /&gt;
Zeichen]…pg6VkCc= cob@cobhost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Kopiermethode scp benutzen, und die obige &amp;quot;authorized_keys&amp;quot;-Metohde mit PublicKey nicht nutzen wollen, können Sie auch mit Private Keys arbeiten (siehe SSH-Doku). Dazu können sie in der *_ENV-Datei in dem Parameter SCP_OPTS den Verweis auf den private Key setzen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| SCP_OPTS in *_ENV:&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel COB_ENV&lt;br /&gt;
| SCP_OPTS=&amp;quot;-p -B -i /home/cob/.ssh/superx_key&amp;quot;&lt;br /&gt;
export SCP_OPTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Windows =====&lt;br /&gt;
Wenn Sie die ssh-Shell putty aus dem Installationspaket nutzen, haben Sie im Installationsordner auch die Anwendung &amp;quot;puttyGen.exe&amp;quot;. Wenn Sie putty als reine Executable nutzen, laden Sie die Anwendung separat herunter. [http://winscp.net/download/puttygen.exe PuttyGen]&lt;br /&gt;
*     Folgen Sie der Anleitung auf der Seite http://winscp.net/eng/docs/ui_puttygen, um den SSH2-DSA oder RSA Schlüssel zu erzeugen. Für den Schlüssel bitte kein Passwort vergeben, wenn Sie das Tool automatisiert nutzen.&lt;br /&gt;
*     Den privaten Schlüssel geben Sie in Putty bzw. Winscp im Menü &amp;quot;Session&amp;quot; im Feld &amp;quot;Private Key File&amp;quot; an.&lt;br /&gt;
*    Der Button &amp;quot;Save public key&amp;quot; ist nicht für OPENSSH unter Linux als Zielserver geeignet. Im folgenden Screenshot sehen Sie den markierten Bereich, den Sie kopieren müssen:&lt;br /&gt;
[[Bild:puttygen.png|413x402px]]&lt;br /&gt;
*     Kopieren Sie Ihren Public Key, den Sie oben mit PuttyGen erzeugt haben, zur Datei &amp;quot;authorized_keys&amp;quot; und kopieren Sie diese in das Verzeichnis ~/.ssh/&lt;br /&gt;
* Im Profil unter Connection -&amp;gt; SSH -&amp;gt; Auth -&amp;gt; Credentials geben Sie den Pfad zum privaten Schlüssel in &amp;quot;Private key file&amp;quot; an.&lt;br /&gt;
* Bei erneutem Login mit Putty oder Winscp sollte die Passwortabfrage entfallen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP (Server) =====&lt;br /&gt;
Beim Push-Verfahren wird, wenn mit scp oder rsync kopiert wird, eine Login-Shell vorausgesetzt. Wenn dies aus Sicherheitsgründen nicht gewünscht ist bzw. wg. Einsatz von Windows nicht möglich ist, können Sie auch sftp nutzen, dies wird in modernen ssh-Servern mitgeliefert und bietet ebenfalls verschlüsselten Datentransfer. Zur Einrichtung des Servers:&lt;br /&gt;
Der SSH-Dienst wird wie folgt konfiguriert (am Beispiel Ubuntu Linux 22.04 LTS) mit dem SFTP-Verzeichnis /home/sftp/-benutzername: &lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/ssh/sshd_config die Zeile auskommentieren:&lt;br /&gt;
 #Subsystem      sftp    /usr/lib/openssh/sftp-server&lt;br /&gt;
und stattdessen:&lt;br /&gt;
 Subsystem sftp internal-sftp&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
         ChrootDirectory /home/sftp/%u&lt;br /&gt;
         ForceCommand internal-sftp&lt;br /&gt;
        AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Danach starten Sie den SSH-Dienst neu:&lt;br /&gt;
 service ssh restart&lt;br /&gt;
&lt;br /&gt;
Dann legen Sie die Gruppe &amp;quot;sftponly&amp;quot; an:&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
 und dann den Unix-User an, und geben ihm die Gruppe &amp;quot;sftponly&amp;quot;. Hier ein Script:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SFTPUSERNAME=$1&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 useradd -b /home/sftp -s /bin/false -G sftponly $SFTPUSERNAME&lt;br /&gt;
 chown root:root /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 chmod 755 /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
 chown $SFTPUSERNAME:sftponly /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
&lt;br /&gt;
Danach legen Sie mit &lt;br /&gt;
 passwd $SFTPUSERNAME&lt;br /&gt;
ein Passwort fest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der User kann sich dann nicht mehr mit ssh einloggen, nur noch mit sftp, und landet beim Login in /home/$KENNUNG, in einem &amp;quot;chroot-Käfig&amp;quot;, und der User kann mit SFTP in den Ordner &amp;quot;incoming&amp;quot; schreiben. Zum Testen geben Sie ein: &lt;br /&gt;
 sftp $KENNUNG@-Host-&lt;br /&gt;
&lt;br /&gt;
Wenn beim SFTP Login die Meldung kommt:&lt;br /&gt;
 client_loop: send disconnect: Broken pipe&lt;br /&gt;
müssen Sie darauf achten dass das Home-Verzeichnis des Users nicht dem User gehört, sondern root.&lt;br /&gt;
&lt;br /&gt;
Wenn der Login klappt, können Sie nach dem [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|oben]]  beschriebenen Verfahren die Passworteingabe durch PublicKey-Authentifizierung ersetzen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP =====&lt;br /&gt;
Für das Kopieren der Rohdaten können Sie im Kopierscript &amp;quot;-modulname-_copy.x&amp;quot; auch sftp-Kommandos nutzen. Sie müssen nur in der ENV-Datei die Variable&lt;br /&gt;
 COPY_METHOD=sftp&lt;br /&gt;
setzen. Alle anderen Variablen und Mechanismen wie z.B. [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|Entfernen der Passworteingabe]] entsprechen denen von SCP / SSH (s.o.). &lt;br /&gt;
Spezielle Optionen fürs sftp können Sie in der Umgebungsvariable SFTP_OPTS setzen. Es kann z.B. sein, dass das Kopieren großer Dateien in einen Timeout läuft. Bei CSV bietet es sich an, die Dateien zu komprimieren, sie können also setzen:&lt;br /&gt;
 SFTP_OPTS=&amp;quot;-oCompression=yes&amp;quot;&lt;br /&gt;
 export SFTP_OPTS&lt;br /&gt;
Danach wiederholen Sie das kenn_copy.x&lt;br /&gt;
Dies ist nur ein Beispiel. Weitere Optionen für SFTP entnehmen Sie der manpage.&lt;br /&gt;
Das Kopieren mit sftp klappt übrigens auch unter Windows z.B. mit dem Programm [http://winscp.net/eng/docs/lang:de winscp]. Dies wird im folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP unter Windows =====&lt;br /&gt;
Unter Windows ist das Standardprogramm für SFTP die Anwendung [http://winscp.net/eng/docs/lang:de winscp]. Sie können die Passworteingabe analog zu Putty [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|entfernen]]. Danach können Sie eine Session erzeugen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp1.png|517x364px]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;quot;Private key file&amp;quot; geben Sie den private key ein, den Sie [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|oben]] erzeugt haben. Klicken Sie dann auf &amp;quot;Save session&amp;quot;, und geben Sie einen kurzen, sprechenden Namen ohne Leerzeichen oder Umlaute, z.B. &amp;quot;superx@vmmulti1&amp;quot;&lt;br /&gt;
Sie müssen nun die Verzeichnisse lokal und remote in der Winscp-Session speichern, im Menüpunkt &amp;quot;Directories&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp2.png|517x359px]]&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie auch hiernach nicht, die Session zu speichern. &lt;br /&gt;
Danach testen Sie einmal den Zugang. Wenn das klappt können Sie Winscp auch für die Kommandozeile automatisieren. Sie erzeugen zunächst eine Textdatei mit den Kommandos für Winscp, dies enthält auch die zu übertragenden Dateien. Der Aufbau der Datei ist wie folgt:&lt;br /&gt;
 open -Sessionname-&lt;br /&gt;
 # Upload the file to current working directory&lt;br /&gt;
 put -Datei-&lt;br /&gt;
 # Disconnect&lt;br /&gt;
 close&lt;br /&gt;
 # Exit WinSCP&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Die zu übertragenden Dateien sind in der Musterdatei des jew. Moduls in rohdaten/-Modulname-_sftp.txt aufgelistet, Sie müssen lediglich &lt;br /&gt;
* den &amp;quot;/&amp;quot; durch einen &amp;quot;\&amp;quot; ersetzen&lt;br /&gt;
* das Entladeprotokoll -Modulname-_unload.err und die Datumsdatei superx.datum hinzufügen&lt;br /&gt;
Hier ein Beispielscript fürs das Studierenden-Modul:&lt;br /&gt;
	open superx@vmmulti1&lt;br /&gt;
	# Change remote directory&lt;br /&gt;
	# Upload the file to current working directory&lt;br /&gt;
	put sos_unload.err&lt;br /&gt;
	put superx.datum&lt;br /&gt;
	put unl\konstanten.unl&lt;br /&gt;
	put unl\sos_studenten.unl&lt;br /&gt;
	put unl\sos_hzb.unl&lt;br /&gt;
	put unl\sos_faecher.unl&lt;br /&gt;
	put unl\sos_pord_to_stg.unl&lt;br /&gt;
	put unl\sos_pruefungenext.unl&lt;br /&gt;
	put unl\sos_pruefungen.unl&lt;br /&gt;
	put unl\sos_lab_astat_attributes.unl&lt;br /&gt;
	put unl\sos_stud_loe.unl&lt;br /&gt;
	put unl\sos_faecher_ext.unl&lt;br /&gt;
	put unl\sos_faecher_kontrolle.unl&lt;br /&gt;
	put unl\sos_pruefungen_kontrolle.unl&lt;br /&gt;
	put unl\sos_anschri.unl&lt;br /&gt;
	put unl\sos_parstg.unl&lt;br /&gt;
	put unl\sos_hsnr.unl&lt;br /&gt;
	put unl\semester.unl&lt;br /&gt;
	put unl\cif.unl&lt;br /&gt;
	put unl\cifx.unl&lt;br /&gt;
	put unl\k_pvers.unl&lt;br /&gt;
	put unl\k_stg.unl&lt;br /&gt;
	put unl\k_stgext.unl&lt;br /&gt;
	put unl\k_abstgv.unl&lt;br /&gt;
	put unl\sos_pord.unl&lt;br /&gt;
	put unl\sos_dipl.unl&lt;br /&gt;
	put unl\sos_minder.unl&lt;br /&gt;
	put unl\sos_stud_d.unl&lt;br /&gt;
	put unl\sos_pords.unl&lt;br /&gt;
	put unl\sos_porg.unl&lt;br /&gt;
	put unl\sos_labzuord.unl&lt;br /&gt;
	put unl\sos_pnrzuord.unl&lt;br /&gt;
	put unl\sos_gewichtungsvariante.unl&lt;br /&gt;
	put unl\sos_gewichtungregel_filter.unl&lt;br /&gt;
	put unl\sos_gewichtungregel.unl&lt;br /&gt;
	put unl\personattribute.unl&lt;br /&gt;
	put unl\personattributetype.unl&lt;br /&gt;
	put unl\personattribute_value_list.unl&lt;br /&gt;
	put unl\stu_update_prot.unl&lt;br /&gt;
	put unl\exa_update_prot.unl&lt;br /&gt;
	put unl\sos_accredited_ects.unl&lt;br /&gt;
	put unl\sos_pord_orgeinheit.unl&lt;br /&gt;
	# Disconnect&lt;br /&gt;
	close&lt;br /&gt;
	# Exit WinSCP&lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
Die Datei hat z.B. den Namen winscp_example_script.txt. Dann können Sie das Script aufrufen mit dem DOS-Kommando:&lt;br /&gt;
 winscp /script=-Pfad zu-\winscp_example_script.txt&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot wie das dann aussieht:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp3.png|609x337px]]&lt;br /&gt;
&lt;br /&gt;
Das DOS-Kommando läßt sich dann über die Windows-Taskverwaltung automatisieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Java-Client zum Entladen von Quell-Datenbanken =====&lt;br /&gt;
Zum Entladen aus dem operativen Vorsystem wird unter Informix dbaccess genutzt. Unter Postgres wird generell der SuperX-JAVA-Client zum Entladen genutzt, denn SuperX benötigt ein spezielles, an Informix angepasstes [[Kernmodul_Komponentenverwaltung#Format_der_Unload_Dateien_CSV|CSV-Format]], das sich mit Bordmitteln von Postgres (copy-Befehl) nicht erzeugen lässt. Es kann aber auch sinnvoll sein, aus der Informix-Datenbank mit SuperX-JAVA-Client zu entladen, z.B. wenn Sie kein UNIX-dbaccess auf dem Vorsystem installiert haben. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie das jew. operative Vorsystem im PUSH-Verfahren entladen wollen, d.h. die Rohdaten werden auf dem Vorsystem entladen und auf den SuperX-Rechner kopiert, dann müssen Sie spezielle Vorkehrungen treffen. SuperX nutzt generell zum Entladen eigene Java-Klassen. Beim Entladen im PULL-Verfahren sind diese Klassen vorhanden, denn die Entladeroutine läuft auf dem SuperX Rechner. Wenn Sie aber PUSH nutzen wollen, werden die SuperX-Java-Klassen auf dem Liefersystem benötigt, und die Entladeroutine muss konfiguriert sein. Im Folgenden nutzen wir das Beispiel &amp;quot;Entladen im Push-Verfahren aus SVA-GX unter Postgres&amp;quot;. Gehen Sie dazu wie folgt vor:&lt;br /&gt;
* Kopieren Sie die Dateien &lt;br /&gt;
** superx*jar&lt;br /&gt;
** postgresql-*.jar&lt;br /&gt;
** jfor-0.7.2rc1.jar&lt;br /&gt;
* vom SuperX-Rechner im Verzeichnis $SUPERX_DIR/tomcat/webapps/superx/WEB-INF/lib auf den Quellrechner in ein Unterverzeichnis lib unter rohdaten (z.B. /home/sva/superx/rohdaten/lib). In rohdaten liegt die bisherige Entladeroutine (z.B. sva_unload.x). &lt;br /&gt;
* Kopieren Sie die *_ENV.sam -Datei nach *_ENV, also hier SVA_ENV.sam nach SVA_ENV&lt;br /&gt;
* Fügen Sie dann folgenden Passus in die Umgebungs-Datei der Entladeroutine, hier also SVA_ENV:&lt;br /&gt;
 #Pfad zu den SuperX-Java-Libraries&lt;br /&gt;
 #Der JDBC_CLASSPATH enthält alles, was der jdbc-Client in superx für den Datenbankzugriff braucht.&lt;br /&gt;
 #jfor*.jar, postgresql*.jar&lt;br /&gt;
 JDBC_CLASSPATH=&amp;quot;$SVA_LOAD_PFAD/lib/superx5.0.jar:$SVA_LOAD_PFAD/lib/postgresql-42.2.19.jar:$SVA_LOAD_PFAD/lib/jfor-0.7.2rc1.jar&amp;quot;&lt;br /&gt;
 export JDBC_CLASSPATH&lt;br /&gt;
&lt;br /&gt;
Wenn dann noch die Variablen [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] und LOGGER_PROPERTIES korrekt gesetzt sind, kann die Entladeroutine bei SX_CLIENT=jdbc (Wenn Sie unter Windows entladen, oder Informix ohne dbaccess entladen wollen) oder SX_CLIENT=psql (wenn Sie Postgres unter UNIX nutzen) mit Java entladen.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Entladescript ausführen:&lt;br /&gt;
 sva_unload.x&lt;br /&gt;
Die Logdatei lautet sva_unload.err&lt;br /&gt;
&lt;br /&gt;
Zum Kopieren der Rohdaten zum SuperX-Server passen Sie folgende Variablen an:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom SVA-Rechner auf den BI-Rechner kopiert werden sollen, dann werden für das Script sva_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync, [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] und scp sind wählbar [Achtung: diese müssen dann betriebssystemseitig installiert sein]. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem BI-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/sva/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem BI-Rechner, in der Regel &amp;quot;tomcat&amp;quot; oder &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des BI-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Danach starten Sie &lt;br /&gt;
 sva_copy.x&lt;br /&gt;
Die Logdatei lautet sva_copy.err&lt;br /&gt;
&lt;br /&gt;
Weitere Entladeparameter werden in den modulspezifischen Administrationshandbüchern beschrieben.&lt;br /&gt;
{{Hinweis|Bei neuen SuperX-Versionen reicht es in der Regel, die modulspez. Dateien auszutauschen, also hier sva_unload.* etc.}}&lt;br /&gt;
&lt;br /&gt;
== Update eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Wenn das Entladen aus dem Vorsystem geklappt hat (sofern es ein Vorsystem gibt), können Sie die Daten laden. Zum Update bzw. zum Laden der Rohdaten gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname- und führen das Script aus:&lt;br /&gt;
-Modulname-_update.x&lt;br /&gt;
Die Logdatei lautet L_-Modulname-_UPDATE.log, im Mandantenfähigen Betrieb &amp;quot;L_-Modulname-_UPDATE-MANDANTID-.log&amp;quot;.&lt;br /&gt;
Für die Aufnahme der Laderoutine in die crontab gibt es im gleichen Verzeichnis Musterscripte nach dem Namensmuster:&lt;br /&gt;
-Modulname-_update_cron.x&lt;br /&gt;
Je nach Push/Pull-Szenario können Sie auch den Unload darin starten oder nicht.&lt;br /&gt;
&lt;br /&gt;
=== Modulupdate in mandantenfähigen Installationen ===&lt;br /&gt;
Der Modulupdate in mandantenfähigen Installation findet in einer SuperX-Installation statt, allerdings werden die einzelnen Scripte mit unterschiedlichen Umgebungsvariablen, wie sie in SQL_ENV.-MANDANTID- definiert ist, z.B. SQL_ENV.FHRO.&lt;br /&gt;
In der SQL_ENV.-MANDANTID- werden unterschiedliche Pfade für den jeweiligen *_LOAD_PFAD gesetzt, wobei in der Regel die Mandandid ein Unterverzeichnis vom &amp;quot;normalen&amp;quot; LOAD_PFAD ist. So ist z.B. beim COB-Modul folgender Pfad anzusetzen:&lt;br /&gt;
Normale SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten&lt;br /&gt;
Mandantenfähige SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten/FHRO&lt;br /&gt;
Unterhalb von FHRO befindet sich noch einmal die Entladeroutine sowie das Unterverzeichnis unl mit den Rohdaten. Dieses Verzeichnis FHRO kann der Einfahheit halber auch ein symbolischer Link auf den gemounteten COB-Rechner sein.&lt;br /&gt;
Durch Setzen der Mandantennummer in der Umgebungsvariable MANDANTID in der jeweiligen SQL_ENV des Mandanten werden die ETL-Scripte anders ausgeführt: Die Logdateien werden jeweils mit der Mandantennummer versehen (z.B. L_cob_updateFHRO.log), damit die Übersicht nicht verloren geht und der gleichzeitige Update mehrerer Mandanten in eine rsuperX-Installation möglich ist.&lt;br /&gt;
Außerdem können weitreichende Steuerungsmechanismen im Modulupdate eingesetzt werden: Nach jedem ETL-Schritt können optional mandantenspezifische Scripte aufgerufen werden. Diese müssen folgende Namenskonvention einhalten:&lt;br /&gt;
 -Scriptname-_-MANDANTID-.sql&lt;br /&gt;
Also für eine hochschulspezifische Transformation im COB-Modul des Mandanten FHRO wird eine Datei namens&lt;br /&gt;
 cob_trans_FHRO.sql &lt;br /&gt;
mit entsprechenden SQL-Anweisungen angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Format der Unload Dateien CSV ===&lt;br /&gt;
Generell gilt das Prinzip, daß Daten vom Vorsystem in CSV entladen werden, und dann in sog. Ladetabellen hochgeladen werden. Da CSV je nach DBMS unterschiedlich implementiert wird, hier eine kurze Beschreibung des Formats, das im wesentlichen den Vorgaben von Informix LOAD entspricht:&lt;br /&gt;
* Zeichenformat: UNIX LATIN1 oder UTF-8&lt;br /&gt;
* Feldtrenner: ^ &lt;br /&gt;
* Satztrenner: Feldtrenner + UNIX NEWLINE&lt;br /&gt;
* Zeilenschaltung: Umbrüche innerhalb von Textfeldern sind als \ + NEWLINE codiert&lt;br /&gt;
* Feldtrenner, die im Textfeld vorkommen, werden mit &amp;quot;\&amp;quot; maskiert. Ebenso das Zeichen &amp;quot;\&amp;quot; selbst&lt;br /&gt;
* Die Datumsformate sind bei Datumsfeldern immer im deutschen Format (DD.MM.YYYY) vorgesehen&lt;br /&gt;
* Boolean-Werte werden durch &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; codiert&lt;br /&gt;
* Der Dezimaltrenner ist &amp;quot;.&amp;quot;, kein 1000-er Punkt bei Zahlen. &lt;br /&gt;
* Leerstrings und Leerzeichen werden als &amp;quot; &amp;quot; (Leerzeichen) exportiert.&lt;br /&gt;
&lt;br /&gt;
== Upgrade eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Zum Upgrade bzw. zum Zurücksetzen des Moduls auf den Auslieferungszustand entpacken Sie das Paket in $SUPERX_DIR und gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname-/upgrade und führen das Script aus:&lt;br /&gt;
-Modulname-_upgrade.x&lt;br /&gt;
Ausnahme: beim Kernmodul gibt es i.d.R. ein spezielles [[Kern_Installation_Upgrade#Standardvorgehen_beim_Upgrade|Upgrade Script]].&lt;br /&gt;
&lt;br /&gt;
Die Logdatei lautet upgrade.log, im Mandantenfähigen Betrieb &amp;quot;upgrade-MANDANTID-.log&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen separaten Tomcat-Rechner betreiben, müssen Sie das Paket dort ebenfalls entpacken, und vom Datenbankserver die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml an die gleiche Stelle auf den Tomcat Rechner kopieren. Ein nochmaliges Ausführen des Upgrade Scriptes ist nicht nötig, weil dies nur die Datenbank betrifft.&lt;br /&gt;
&lt;br /&gt;
== Hochschulspezifische Anpassung eines Moduls ==&lt;br /&gt;
=== Dateibasierte hochschulspezifische Anpassung ===&lt;br /&gt;
Nach der Installation bzw. beim Upgrade können Sie hochschuleigene SQL Scripte ausführen lassen. Erzeugen Sie dazu eine Datei &lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/customize.sql &lt;br /&gt;
bei Mandantenbetrieb&lt;br /&gt;
  $SUPERX_DIR/db/module/-Modulname-/conf/customize-MANDANTID-.sql &lt;br /&gt;
und füllen Sie diese mit einem beliebigen Inhalt. Das Script wird beim Upgrade des Moduls automatisch am Ende ausgeführt.&lt;br /&gt;
=== Datenbankbasierte hochschulspezifische Laderegeln ===&lt;br /&gt;
Eine Laderoutine gliedert sich in die Schritte&lt;br /&gt;
#Unload: Entladen der CSV Dateien aus dem jew. Vorsystem&lt;br /&gt;
#Load: Upload der CSV Dateien&lt;br /&gt;
#Trans: Transformation der Daten&lt;br /&gt;
#Aggr: Aggregation der Daten&lt;br /&gt;
#Test: Test der Daten&lt;br /&gt;
#System: Standdatum bei Erfolg aktualisieren&lt;br /&gt;
Es ist möglich über sog. &amp;quot;Preparation&amp;quot;- oder &amp;quot;Finalize&amp;quot;-[[Kernmodul_Shellscripte#Hochschulspezifische_Transformationen_im_ETL-Prozess|Scripte]] die Laderoutine am Ende von LOAD bzw. TRANS anzupassen. Dieses Verfahren ist weiterhin möglich, ist aber bzgl. Clustering und Schreibzugriff recht unflexibel.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich im Browser hochschulspezifische Scripte am Ende des jeweiligen Schrittes einer Laderoutine anzulegen. Dies funktioniert so: Die Laderoutine führt zunächst den allgemeinen, von uns vorgegebenen Ladeschritt aus. Wenn dann eine Repository-Variable mit einem gewissen Namensschema existiert, wird sie ausgeführt. Das Namensschema lautet &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Kürzel der Komponente&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;_CUSTOM&lt;br /&gt;
&amp;lt;/source&amp;gt;. &lt;br /&gt;
* Bei Hauptladeroutinen ist dies&lt;br /&gt;
*# Laden: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_load_CUSTOM, z. B. sos_load_CUSTOM&lt;br /&gt;
*# Transformation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_trans_CUSTOM, z. B. sos_trans_CUSTOM&lt;br /&gt;
*# Aggregation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_aggr_CUSTOM, z. B. sos_aggr_CUSTOM&lt;br /&gt;
* Bei Unterladeroutinen ist dies &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_&#039;&#039;&#039;ID des Ladeschritts&#039;&#039;&#039;_CUSTOM, also z. B. cob_trans_fin_busa_CUSTOM für die Unterladeroutine &amp;quot;Lade Buchungen aus FIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um eine Variable neu einzurichten:&lt;br /&gt;
* Gehen Sie in den BI-Standardberichten auf Administration/Hochschul-Repository.&lt;br /&gt;
* Wählen Sie das jeweilige Sachgebiet und schicken Sie das Formular ab.&lt;br /&gt;
* Klicken Sie bei einer Beispielzeile auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;.&lt;br /&gt;
* Im neuen Fenster klicken Sie oben ganz rechts auf das Symbol &#039;&#039;&#039;Datensatz kopieren&#039;&#039;&#039;.&lt;br /&gt;
* Definieren Sie die Variable z. B.&lt;br /&gt;
** als Variablenname die ID z. B.: fin_load_CUSTOM&lt;br /&gt;
** Art der Variable: ein für Sie sprechender Schlüssel mit Modulkürzel, z. B. &amp;quot;fin_Laderegel&amp;quot;&lt;br /&gt;
** als Inhalt der Variable die gewünschten Befehle, z. B. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update fin_buch_neu set ch110_institut=buchungsab_fb where length(buchungsab_fb)=5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** aktiv=1&lt;br /&gt;
** gültig seit 1.1.1900&lt;br /&gt;
** gültig bis 1.1.3000&lt;br /&gt;
* Klicken Sie oben rechts auf das Häkchen-Symbol für &#039;&#039;&#039;Datensatz einfügen&#039;&#039;&#039;.&lt;br /&gt;
* Schließen Sie das Fenster.&lt;br /&gt;
&lt;br /&gt;
Analog können Sie auch die [[Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung|customize]]-Regeln&amp;quot; ins Repository verlagern. Hier heißt die Variable z.B. fin_install_CUSTOM.&lt;br /&gt;
&lt;br /&gt;
== Entfernen eines Moduls ==&lt;br /&gt;
Wenn Sie ein Modul nicht mehr benötigen, starten Sie das Script&amp;lt;br /&amp;gt;&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/-Modulname-_modul_entfernen.x.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses Script löscht alle Tabellen, Prozeduren und Abfragen aus der Datenbank, und löscht auch die Einträge im Themenbaum. Danach können Sie den Pfad $SUPERX_DIR/db/module/-Modulname-löschen.&lt;br /&gt;
Wenn Sie nur die Inhalte der Daten- und Hilfstabellen des Moduls löschen wollen (z.B. aus Datenschutzgründen), ohne das ganze Modul zu deinstallieren, können Sie dies mit folgendem Befehl tun:&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_pg.sql (für Postgres)&amp;lt;br /&amp;gt;&lt;br /&gt;
bzw.&amp;lt;br /&amp;gt;&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_ids.sql (für Informix)&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Modul_GXStage_Nutzungshandbuch&amp;diff=16363</id>
		<title>Modul GXStage Nutzungshandbuch</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Modul_GXStage_Nutzungshandbuch&amp;diff=16363"/>
		<updated>2026-07-09T09:17:31Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Allgemeine Hinweise=&lt;br /&gt;
Der Finanzbericht ist eine web-basierte Anwendung auf Basis des Auswertesystems SuperX. Für jeden User werden spezifische Rechte auf Finanzstellen und/oder Haushaltsprogramme gepflegt.&lt;br /&gt;
&lt;br /&gt;
Bei den Berichten handelt es sich um ein reines Auswertesystem ohne Zugriffsmöglichkeit in das „echte Buchungssystem“. Sie haben nicht die Möglichkeit, selbst Auszahlungen vorzunehmen oder andere Buchungen durchzuführen. Somit besteht auch nicht die Gefahr, dass durch Ihre Auswertungen Daten in SAP beschädigt werden können.&lt;br /&gt;
&lt;br /&gt;
Im Finanzbericht werden immer die Daten zum Buchungsschluss des Vortages dargestellt.&lt;br /&gt;
&lt;br /&gt;
Am 30. Juli 2015 finden Sie im Finanzbericht die Daten des Buchungsabschlusses vom 29. Juli 2015.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie die Vorgaben des Datenschutzes.&lt;br /&gt;
&lt;br /&gt;
Als Standarduser werden Ihnen nur die Werte auf zahlungswirksamen Finanzpositionen angezeigt, als Experte können Sie auswählen, ob auch Finanzpositionen mit statistischer Fortschreibung berücksichtigt werden sollen, vergl. dazu Kapitel [[Modul_GXStage_Nutzungshandbuch#Für Experten – auch Finanzposition mit statistischer Fortschreibung berücksichtigen|Für Experten – auch Finanzposition mit statistischer Fortschreibung berücksichtigen]].&lt;br /&gt;
&lt;br /&gt;
Wichtiger Hinweis:&lt;br /&gt;
&lt;br /&gt;
Der Administrator kann einstellen, dass bestimmte Daten, z.B. Buchungen zu Personalkosten nicht in die Kontostände eingerechnet werden und auch nicht als einzelne Buchungen angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Derzeit ist das:&lt;br /&gt;
&lt;br /&gt;
* An der HAW Karlsruhe der Fonds 80561002&lt;br /&gt;
* An der HAW Reutlingen der Fonds 80641001&lt;br /&gt;
* An der HAW Pforzheim der Fonds 80621002&lt;br /&gt;
&lt;br /&gt;
=Anmeldung am System=&lt;br /&gt;
Melden Sie sich in SuperX mit Ihrer Kennung und Ihrem Passwort an.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-anmeldung.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Danach erscheint links ein Themenbaum, der je nach Ihren Rechten unterschiedlich aussehen kann.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf den Menüpunkt „Kaufmänn. Auswertungen“&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-themenbaum.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Es erscheinen auf der rechten Seite vier Berichte, die Sie anklicken können.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nach einer Auswertung wieder zurück zu dieser Übersicht wollen, können Sie immer im linken Navigationsteil wieder auf „Kaufmänn. Auswertungen“ klicken.&lt;br /&gt;
&lt;br /&gt;
=SAP-Budget nach Finanzstelle=&lt;br /&gt;
Dieser Bericht ist für Sie geeignet, wenn Sie für mindestens eine Finanzstelle Berechtigung haben. Wenn Sie nur für einzelne Haushaltsprogramme die Berechtigung haben, nehmen Sie den Bericht „SAP Budget nach HHProgramm“.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass die Gesamtsumme nur die Summe der ausgewählten Finanzstellen darstellt. Wenn Sie eine Berechtigung für zusätzliche Haushaltsprogramme auf anderen Finanzstellen haben, nutzen Sie den Bericht SAP-Budget nach HHProgramm, um Ihren Gesamtkontostand abzurufen.&lt;br /&gt;
&lt;br /&gt;
==Die Maske==&lt;br /&gt;
Nach dem Anklicken des Berichts im Menü erscheint folgende Maske:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie das gewünschte Jahr aus. Bei „Details zu Budgetarten“ können Sie auswählen, ob Sie diese sehen möchten oder nicht. Dies wird weiter unten noch am Beispiel gezeigt.&lt;br /&gt;
&lt;br /&gt;
==Auswahl Finanzstelle==&lt;br /&gt;
Als Nächstes wählen Sie eine Finanzstelle aus, dies ist bei diesem Bericht obligatorisch.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf den Button Finanzstelle, es erscheint ein Auswahldialog:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-auswahl_finanzstelle.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie die gewünschte Finanzstelle. Wenn Sie für mehrere Finanzstellen die Berechtigung haben, können Sie eine oder mehrere Finanzstellen auswählen.&lt;br /&gt;
&lt;br /&gt;
Der Hinweis „(Auswahl)“ hinter der Bezeichnung wie im Beispiel nach Hochschule und HsKA Allg. bedeutet, dass Sie nicht für die komplette Finanzstelle einschließlich untergeordneter die Berechtigung haben, sondern eben nur für eine Auswahl.&lt;br /&gt;
&lt;br /&gt;
Bei Bedarf können Sie auch den „Suchen“ Button benutzen.&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist möglich, eine Finanzstellennummer auch direkt einzutippen, vergl. dazu [[Modul_GXStage_Nutzungshandbuch#Direkteingabe von Schlüsseln|Direkteingabe von Schlüsseln]].&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Berechtigung für mehrere Finanzstellen haben, könnte es interessant sein, die „organisatorisch Sicht“ auf Finanzstellen zu nutzen. Klicken Sie dazu auf den Button „Sichtauswahl“.&lt;br /&gt;
&lt;br /&gt;
Es öffnet sich ein Dialog, in dem Sie die „organisatorische Sicht“ auswählen und OK anklicken.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-sicht_organisatorisch.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Danach öffnen sich diese Sicht und Sie haben die Möglichkeit, z.B. eine Fakultät auszuwählen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-sicht_organisatorisch2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Das war die Auswahl der Finanzstelle.&lt;br /&gt;
&lt;br /&gt;
==Auswahl Haushaltsprogramm==&lt;br /&gt;
Noch mal die Auswahlmaske:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Als Nächstes gilt es festzulegen, welche Haushaltsprogramme/Innenaufträge berücksichtigt werden sollen. Standardmäßig ist das Dummy-Haushaltsprogramm (9999) vorausgewählt, so dass Sie nur Kontostände sehen, die direkt die Finanzstelle betreffen, nicht die von weiteren Haushaltsprogrammen.&lt;br /&gt;
&lt;br /&gt;
Sie können den Button „Haushaltsprog./Innenauftrag“ anklicken. Es öffnet sich ein Dialog.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-button_hhprog.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wenn Sie im Feld vorher bestimmte Finanzstellen ausgewählt haben, werden bei diesem Button nur die HHProgramme angezeigt, die für die gewählten Finanzstellen relevant sind.&lt;br /&gt;
&lt;br /&gt;
Falls Sie andere Haushaltsprogramme sehen möchten, müssen Sie ggfs. einmal den Button „Finanzstelle“ anklicken und dann auf „Leeren“.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Gesamt-Kontostände für die Finanzstellen sehen möchten, klicken Sie auf den Button „Leeren“ - dann wird nicht mehr auf das Dummy-Haushaltsprogramm eingeschränkt.&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie ein oder mehrere Haushaltsprogramme auswählen, für die Sie den Gesamtkontostand sehen möchten. Bitte beachten Sie, dass dieser Bericht dann nur die Gesamtwerte auf der Finanzstelle für die gewählten Haushaltsprogramme anzeigt. Wenn Sie Details zu den einzelnen Haushaltsprogrammen benötigten, können Sie statt dessen den Bericht „SAP Budget nach HHProg“ benutzen.&lt;br /&gt;
&lt;br /&gt;
Noch mal die Maske:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wenn an Ihrer Hochschule mit Kurz-IDs für Haushaltsprogramme gearbeitet wird, können Sie beim Button Haushaltsprog./Innenauftrag auf „Leeren“ Klicken und dann direkt die KurzID des gewünschten Haushaltsprogramms eingeben.&lt;br /&gt;
&lt;br /&gt;
==Optionale Einschränkung auf Fonds==&lt;br /&gt;
Bei Bedarf können Sie auf bestimmte Fonds einschränken, klicken Sie dazu auf den Button „Fonds“. Bitte beachten Sie, dass bestimmte Fonds ggfs. generell nicht berücksichtigt werden, siehe dazu unter 1. Allgemeine Hinweise.&lt;br /&gt;
&lt;br /&gt;
==Netto oder Brutto?==&lt;br /&gt;
Schließlich wählen Sie noch, ob Sie Netto oder Brutto Beträge sehen möchten und klicken auf „Abschicken“.&lt;br /&gt;
&lt;br /&gt;
==Abschicken==&lt;br /&gt;
Wenn Sie mehr mit den Berichten arbeiten, wird Ihnen vielleicht auffallen, dass die Auswahlwerte, die Sie in einem Bericht getroffen haben, standardmäßig auch als Vorauswahl für einen anderen Bericht genommen werden. Falls Sie diese Vorbelegungen mal entfernen möchten, können Sie den Button „Zurücksetzen“ anklicken.&lt;br /&gt;
&lt;br /&gt;
==Ergebnisdarstellung==&lt;br /&gt;
Die Ergebnisdarstellung sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Man sieht auf einen Blick, dass auf der Finanzstelle ein Budget von 9.969,70 Euro eingestellt wurde. Einnahmen und Mittelbindungen wurden nicht gebucht. Es gab Ausgaben von 13.250,13 Euro. Verfügbar sind noch -3290,43. Falls Mittelbindungen gebucht wurden, unterscheidet sich natürlich das Verfügbar ohne Mittelbindungen von der Verfügbar-Spalte.&lt;br /&gt;
&lt;br /&gt;
Alles hier im Beispiel sind natürlich fiktive Zahlen.&lt;br /&gt;
&lt;br /&gt;
==Durchklicken zu Einzelbuchungen==&lt;br /&gt;
Die blau dargestellten Zahlen in der Ergebnistabelle kann man anklicken, um sich die Einzelbuchungen zu diesen Werten anzeigen zu lassen. Klickt man z.B. auf die -13250,13 bei Ausgaben, erscheint folgende Darstellung in einem neuen Fenster:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle-buchungen.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Es wird noch mal die gewählte Finanzstelle, Haushaltsprogramm, Finanzposition, ggfs. Zahlungspartner (Kreditor/Debitor), der Werttyp, Buchungsdatum, Betrag, Belegnummer und Buchungstext dargestellt.&lt;br /&gt;
&lt;br /&gt;
Standardmäßig werden bei der Darstellung von Ausgaben die Werttypen inkl. Rechnungen und Zahlungen dargestellt, wenn Sie nur die Zahlungen sehen möchten, klicken Sie auf den kleinen rot umrandeten Zurück-zur-Maske-Button:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-buchungsbericht_zurueck.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Sie kommen dann von der Ergebnistabelle zur Buchungsberichtsmaske mit den aktuellen Einstellungen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-buchungsbericht_maske_werttyp.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf den Button „Werttyp/Budgetart“ und wählen 57-Zahlungen aus. Wenn Sie dann unten auf „Abschicken“ klicken, erscheinen nur die Zahlungen zu den aktuell ausgewählten Parametern.&lt;br /&gt;
&lt;br /&gt;
==Darstellung von Hierarchieebenen==&lt;br /&gt;
Wenn Sie die Berechtigung für mehrere Finanzstellen haben, die unter eine Hierarchie hängen (insb. bei organisatorischer Sicht), kann die Ergebnisdarstellung so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen.&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile (Gliederung 1) sieht man die Gesamtwerte für alle untergeordneten Finanzstellen. Bei den Ausgaben z.B. -3.313,734,43 Euro. Vor der Finanzstelle ist jeweils ein kleiner gelbes Ordnersymbol dargestellt, wie im Windows-Dateiexplorer. Sie können diese Ordner auf- und zuklappen. Man sieht in den Zeilen mit der Gliederungsebene 2, wie sich die Ausgaben über die einzelnen Fächergruppen verteilen. Die Fächergruppe BI wurde wiederum aufgeklappt und man sieht, wie sich die Ausgaben von 452.748,11 Euro auf die Fachgruppe Bauing. und das Bauingenieurwesen verteilen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Daten nach Excel exportieren möchten, klicken Sie auf den Text „XLS“ im Exportmenü.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-excelexport1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Danach werden Sie gefragt, ob Sie alle Daten exportieren möchten oder nur die aktuell sichtbaren:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-excelexport2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Darstellung in Excel so haben möchten, wie Sie die Tabelle gerade aufgeklappt haben, klicken Sie auf „Nur die sichtbaren Tabellenzeilen“, wenn Sie alle Daten möchten, klicken Sie auf „Alle Daten“.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie, dass die Nutzung der Summenfunktion in Excel selbst nicht sinnvoll ist, weil die oberen Hierarchieebenen schon die Teilsummen der untergeordneten Finanzstellen enthalten.&lt;br /&gt;
&lt;br /&gt;
==Gesamtsumme bei Auswahl mehrerer Finanzstellen==&lt;br /&gt;
Wenn Sie mehrere Finanzstellen im Bericht einzeln ausgewählt haben, z.B.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-auswahl-finanzstelle_mehrfach.png|600px]]&lt;br /&gt;
&lt;br /&gt;
wird unter der Darstellung der Kontostände für die einzelnen Finanzstellen, noch mal die Gesamtsumme für die ausgewählten Finanzstellen angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass die Gesamtsumme nur die Summe der ausgewählten Finanzstellen darstellt. Wenn Sie eine Berechtigung für zusätzliche Haushaltsprogramme auf anderen Finanzstellen haben, nutzen Sie den Bericht SAP-Budget nach HHProgramm, um Ihren Gesamtkontostand abzurufen.&lt;br /&gt;
&lt;br /&gt;
==Details nach Finanzposition==&lt;br /&gt;
In den einzelnen Zeilen der Kontodarstellung gibt es eine Spalte „Details Fipos“&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle5b.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Hier als letzte Spalte zu sehen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie für die erste Zeile, die Automatisierungstechnik L, Details pro Finanzposition sehen möchten, klicken Sie auf das gelbe Symbol in der ersten Zeile.&lt;br /&gt;
&lt;br /&gt;
Es öffnet sich ein neues Fenster:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-fipos2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile steht noch einmal der Gesamtwert über alle Finanzpositionen. Die gelben Ordnersymbole vor den Finanzpositionen können Sie aufklappen, um einzelne Finanzpositionen zu betrachten. Wie schon vorher erläutert, können die blau dargestellten Eurobeträge angeklickt werden, um sich die Einzelbuchungen anzusehen. Bei den Ausgaben werden die relevanten Monate dargestellt und dann die Gesamtsumme der Ausgaben.&lt;br /&gt;
&lt;br /&gt;
In der Standardhierarchie im Finanzpositionsbericht wird auf der Topfinanzposition 6 Drittmittel nur der gebuchte Budgetwert angezeigt. Die Ausgaben werden auf die Einzelfinanzpositionen gebucht und auf den TopFipos 1-4 in Summe angezeigt.&lt;br /&gt;
&lt;br /&gt;
==Details zu Budgetarten==&lt;br /&gt;
Im Normalfall werden keine Details zu den einzelnen Budgetarten benötigt. Daher steht das zweite Auswahlfeld der Maske „Details zu Budgetarten“ standardmäßig auf Nein.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wenn Sie Details benötigen, wählen Sie hier „Ja“ aus.&lt;br /&gt;
&lt;br /&gt;
Nach dem Abschicken der Maske erscheinen zusätzliche Spalten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budgetarten.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Es erscheinen nach dem Finanzstellennamen die zwei Spalten Drittmittel und Reste und dann Gesamtbudget. Das Gesamtbudget von 1,9 Mio setzt sich also aus den zwei Budgetarten Drittmittel und Reste zusammen.&lt;br /&gt;
&lt;br /&gt;
=SAP-Budget nach HHProgramm=&lt;br /&gt;
Wählen Sie diesen Bericht, wenn Sie Details zu einzelnen Haushaltsprogrammen sehen möchten. Wenn Sie keine Berechtigung für komplette Finanzstellen haben, ist dieser Bericht Ihre erste Anlaufstelle.&lt;br /&gt;
&lt;br /&gt;
Außerdem ist er praktisch, wenn Sie neben der Berechtigung für einzelne Finanzstellen noch Rechte auf zusätzliche Haushaltsprogramme haben. In dem Fall können Sie in diesem Bericht Ihren „Gesamtkontostand“ einsehen.&lt;br /&gt;
&lt;br /&gt;
==HHProgramm – die Maske==&lt;br /&gt;
Nach dem Anklicken im Menü erscheint folgende Maske:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_hhprog1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie das gewünschte Jahr aus.&lt;br /&gt;
&lt;br /&gt;
Optional können Sie auf eine oder mehrere Finanzstellen einschränken. Wenn Sie keine Berechtigung für komplette Finanzstellen haben, lassen Sie den Button links liegen.&lt;br /&gt;
&lt;br /&gt;
Zur Bedienung des Buttons vergl.[[Modul_GXStage_Nutzungshandbuch#Auswahl Finanzstelle|Auswahl Finanzstelle]].&lt;br /&gt;
&lt;br /&gt;
Wählen Sie optional ein Haushaltsprogramm aus oder geben eine KurzID ein (vergl. [[Modul_GXStage_Nutzungshandbuch#Auswahl Haushaltsprogramm|Auswahl Haushaltsprogramm]] ).&lt;br /&gt;
&lt;br /&gt;
Schließlich können Sie bei Bedarf auf einen oder mehrere Fonds einschränken und klicken auf den Button „Fonds“.&lt;br /&gt;
&lt;br /&gt;
Wählen Sie aus, ob Sie Brutto oder Nettobeträge sehen wollen und klicken Sie auf „Abschicken“.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mehr mit den Berichten arbeiten, wird Ihnen vielleicht auffallen, dass die Auswahlwerte, die Sie in einem Bericht getroffen haben, standardmäßig auch als Vorauswahl für einen anderen Bericht genommen werden. Falls Sie diese Vorbelegungen mal entfernen möchten, können Sie den Button „Zurücksetzen“ anklicken.&lt;br /&gt;
&lt;br /&gt;
==HHProgramm – die Ergebnistabelle==&lt;br /&gt;
Die Ergebnisdarstellung kann so aussehen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-hhprog_erg.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Pro Haushaltsprogramm werden das Budget, die Einnahmen, Mittelbindung, Ausgaben und das Verfügbar mit/ohne Mittelbindung dargestellt.&lt;br /&gt;
&lt;br /&gt;
Wie in Kapitel [[Modul_GXStage_Nutzungshandbuch#Durchklicken zu Einzelbuchungen|Durchklicken zu Einzelbuchungen]] beschrieben, können Sie die blauen Zahlen anklicken, um sich Einzelbuchungen anzusehen.&lt;br /&gt;
&lt;br /&gt;
In der letzten Spalte gibt es die Möglichkeit auch „Details zu Finanzpositionen“ abzurufen, vergl. Kapitel [[Modul_GXStage_Nutzungshandbuch#Details nach Finanzposition|Details nach Finanzposition]].&lt;br /&gt;
&lt;br /&gt;
=SAP-Finanzpositionsbericht=&lt;br /&gt;
Dieser Bericht kann per Link direkt von den Berichten SAP-Budget nach Finanzstelle bzw. HHProg aufgerufen werden. Sie können ihn aber auch manuell aufrufen.&lt;br /&gt;
&lt;br /&gt;
==Finanzpositionen – die Maske==&lt;br /&gt;
Die Maske sieht folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-finanzpos_maske.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie das gewünschte Jahr aus.&lt;br /&gt;
&lt;br /&gt;
Optional können Sie auf eine oder mehrere Finanzstellen einschränken. Wenn Sie keine Berechtigung für komplette Finanzstellen haben, lassen Sie den Button links liegen.&lt;br /&gt;
&lt;br /&gt;
Zur Bedienung des Buttons vergl. [[Modul_GXStage_Nutzungshandbuch#Auswahl Finanzstelle|Auswahl Finanzstelle]] in Kapitel 3.&lt;br /&gt;
&lt;br /&gt;
Wählen Sie optional ein Haushaltsprogramm aus oder geben eine KurzID ein (vergl. [[Modul_GXStage_Nutzungshandbuch#Auswahl Haushaltsprogramm|Auswahl Haushaltsprogramm]] in Kapitel 3).&lt;br /&gt;
&lt;br /&gt;
Schließlich können Sie bei Bedarf auf einen oder mehrere Fonds einschränken und klicken auf den Button „Fonds“.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nur bestimmte Finanzpositionen sehen möchten, klicken Sie auf den Button „Finanzposition“.&lt;br /&gt;
&lt;br /&gt;
Schließlich wählen Sie aus, ob Sie Brutto oder Nettobeträge sehen wollen und klicken Sie auf „Abschicken“.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mehr mit den Berichten arbeiten, wird Ihnen vielleicht auffallen, dass die Auswahlwerte, die Sie in einem Bericht getroffen haben, standardmäßig auch als Vorauswahl für einen anderen Bericht genommen werden. Falls Sie diese Vorbelegungen mal entfernen möchten, können Sie den Button „Zurücksetzen“ anklicken.&lt;br /&gt;
&lt;br /&gt;
==Finanzpositionen – die Ergebnisdarstellung==&lt;br /&gt;
Die Ergebnisdarstellung sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-fipos2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
In der ersten Zeile steht der Gesamtwert über alle Finanzpositionen. Die gelben Ordnersymbole vor den Finanzpositionen können Sie aufklappen, um einzelne Finanzpositionen zu betrachten. Wie schon vorher erläutert, können die blau dargestellten Eurobeträge angeklickt werden, um sich die Einzelbuchungen anzusehen. Bei den Ausgaben werden die relevanten Monate dargestellt und dann die Gesamtsumme der Ausgaben. Zu den Möglichkeiten beim Export vergl. auch [[Modul_GXStage_Nutzungshandbuch#Darstellung von Hierarchieebenen|Darstellung von Hierarchieebenen]].&lt;br /&gt;
&lt;br /&gt;
In der Standardhierarchie im Finanzpositionsbericht wird auf der Topfinanzposition 6 Drittmittel nur der gebuchte Budgetwert angezeigt. Die Ausgaben werden auf die Einzelfinanzpositionen gebucht und auf den TopFipos 1-4 in Summe angezeigt.&lt;br /&gt;
&lt;br /&gt;
=SAP-Buchungsbericht=&lt;br /&gt;
Der SAP-Buchungsbericht kann durch Anklicken von blau dargestellten Eurobeträgen aufgerufen werden oder auch manuell, in dem man ihn im Themenbaum auswählt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-themenbaum.png|600px]]&lt;br /&gt;
&lt;br /&gt;
==Buchungsbericht – die Maske==&lt;br /&gt;
Die Maske sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-buchungsbericht_maske.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Das gewünschte Jahr muss ausgewählt werden. Optional kann als Zweites eine Periode ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
Als Drittes folgt die Buchungsart. Sie haben folgende Auswahlmöglichkeiten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-buchungbericht_bucharten.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Je nach dem, was Sie hier auswählen, können Sie im nächsten Feld „Werttyp/Budgetart“ noch optional weiter auf bestimmte Werttypen oder Budgetarten einschränken.&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl der Finanzstelle vergleiche [[Modul_GXStage_Nutzungshandbuch#Auswahl Finanzstelle|Auswahl Finanzstelle]].&lt;br /&gt;
&lt;br /&gt;
Zur Auswahl eines Haushaltsprogrammes vergleiche [[Modul_GXStage_Nutzungshandbuch#Auswahl Haushaltsprogramm|Auswahl Haushaltsprogramm]].&lt;br /&gt;
&lt;br /&gt;
Weiterhin können Sie optional auf bestimmte Fonds oder Zahlungspartner (=Debitoren/Kreditoren) einschränken.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf Zahlungspartner klicken, erscheint folgender Dialog:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-buchungbericht_zp.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Anders als in anderen Felder sind nicht Zahlungspartner (Debitoren/Kreditoren) nicht nach Schlüssel sortiert, sondern nach Anfangsbuchstabe. Wenn Sie also die AA Pharma AG suchen, klappen Sie den Menüpunkt Ax auf. Oder Sie klicken auf den „Suchen“-Button, geben im Textfeld „AA Ph“ ein und dann auf OK.&lt;br /&gt;
&lt;br /&gt;
In den weiteren Feldern der Buchungsberichtsmaske können Sie Buchungsdatum von/bis und Betrag von/bis angeben.&lt;br /&gt;
&lt;br /&gt;
Als Letztes werden verschiedene Sortiermöglichkeiten für die Ergebnisdarstellung angeboten.&lt;br /&gt;
&lt;br /&gt;
==Buchungsbericht – die Ergebnisdarstellung==&lt;br /&gt;
Es erscheint folgende Darstellung in einem neuen Fenster:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-budget_nach_finanzstelle-buchungen.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Es wird die Finanzstelle, Haushaltsprogramm, Finanzposition, ggfs. Zahlungspartner (Kreditor/Debitor), der Werttyp, Buchungsdatum, Betrag, Belegnummer und Buchungstext dargestellt.&lt;br /&gt;
&lt;br /&gt;
=Für Experten – auch Finanzposition mit statistischer Fortschreibung berücksichtigen=&lt;br /&gt;
Wenn Ihr Admin Ihnen dies freigeschaltet hat, können Sie entscheiden, ob nur zahlungswirksame Finanzpositionen berücksichtigt werden sollen (=Standard) oder alle Finanzpositionen inkl. solche mit statistischer Fortschreibung.&lt;br /&gt;
&lt;br /&gt;
Bei den Berichten SAP-Buchungsbericht, SAP Budget nach Finanzstelle und SAP Budget nach HHProg haben Sie ein zusätzliches Auswahlfeld „Finanzpositionswahl“.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-fipos_alle1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie bei Finanzpositionswahl den Eintrag „alle (inkl. Stat. Fortschreibung)“.&lt;br /&gt;
&lt;br /&gt;
Beim Durchklicken zum Finanzpositionsbericht und zu den Einzelbuchungen wird Ihre Auswahl automatisch berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie den SAP-Finanzpositionsbericht direkt aufrufen und alle Finanzpositionen sehen möchten, gehen Sie wie folgt vor.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf den Button „Finanzposition“ klicken, ist die Voreinstellung die „reguläre Sicht“ mit nur zahlungswirksamen Einnahmen/Ausgaben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-fipos_alle2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf „Sichtauswahl“.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-fipos_alle3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie die Sicht „inkl. Stat. Fortschreibung“ aus und klicken auf OK.&lt;br /&gt;
&lt;br /&gt;
Die Darstellung ändert sich:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-fipos_alle4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Diese Ansicht wird auch für die Ergebnisdarstellung benutzt.&lt;br /&gt;
&lt;br /&gt;
=Weitere Optionen=&lt;br /&gt;
==Direkteingabe von Schlüsseln==&lt;br /&gt;
Geübte Anwender arbeiten lieber bei Maskenfeldern, die aus Dialogboxen oder Klappmenüs bestehen, mit der direkten Schlüsseleingabe. Wenn Sie den Schlüssel z.B. einer Finanzstelle auswendig wissen, geht dies u.U. schneller als die Auswahl im Dialog-Baum.&lt;br /&gt;
&lt;br /&gt;
Wählen dazu das Punktsymbol auf einer Maske an:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-punktfunktion1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Danach erscheinen gelbe Eingabefelder in die Sie direkt eine Eingabe machen können:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-punktfunktion2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wenn Mehrfachauswahl möglich ist, können Sie mit Komma getrennt auch mehrere Werte eintragen oder Sie arbeiten mit der Sternchen Funktion, geben z.B. 80562* ein. Dann werden alle HHProgramme selektiert, die mit 80562 anfangen.&lt;br /&gt;
&lt;br /&gt;
==Arbeiten mit der Sternchen * Funktion==&lt;br /&gt;
Siehe unter [[Modul_GXStage_Nutzungshandbuch#Direkteingabe von Schlüsseln|Direkteingabe von Schlüsseln]]&lt;br /&gt;
&lt;br /&gt;
==Exportfunktion==&lt;br /&gt;
Im Exportmenü oben auf der Maske können Sie wählen zwischen Druckversion, XML, PDF, XLS (Excel) oder auch CSV-Export. Druckversion, Excel und PDF sind natürlich die meist genutzten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-exportmenue.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wenn in einer Ergebnistabelle mehrere Hierarchieebenen vorhanden sind – man also per Ordnersymbol Zeilen auf- bzw. zuklappen gibt es beim Export die Möglichkeit alle Daten zu exportieren oder nur die aktuell sichtbaren, vergl. dazu auch [[Modul_GXStage_Nutzungshandbuch#Darstellung von Hierarchieebenen|Darstellung von Hierarchieebenen]].&lt;br /&gt;
&lt;br /&gt;
==Lesezeichen==&lt;br /&gt;
Einen besonderen Komfort stellen die speziellen SuperX-Lesezeichen dar.&lt;br /&gt;
&lt;br /&gt;
Vermutlich werden Sie für bestimmte Haushaltsprogramme oder Ihre Finanzstelle/n immer wieder den entsprechenden Bericht mit den gleichen Einstellungen aufrufen wollen.&lt;br /&gt;
&lt;br /&gt;
Statt jedes Mal im Themenbaum die Maske anzuklicken, die Parameter einzustellen und dann auf Abschicken zu klicken, können Sie folgendes machen.&lt;br /&gt;
&lt;br /&gt;
Wählen Sie den oft benötigten Bericht aus und stellen die Parameter wie gewünscht ein, z.B.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-lesezeichen1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie dann auf Abschicken, es erscheint die Ergebnistabelle:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-lesezeichen2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie dann oben auf das Lesezeichensymbol (Büroklammer).&lt;br /&gt;
&lt;br /&gt;
Es erscheint folgender Dialog.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-lesezeichen3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie wie angegeben mit der rechten Maustaste auf diesen Link.&lt;br /&gt;
&lt;br /&gt;
Im Firefox sieht der Dialog dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-lesezeichen4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Geben Sie dem Lesezeichen einen aussagekräftigen Namen und Klicken dann auf „Speichern“.&lt;br /&gt;
&lt;br /&gt;
Anschließend steht das Lesezeichen Ihnen wie ein normales Browserlesezeichen im Lesezeichenmenü von Firefox zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Im InternetExplorer (Edge) sieht der Dialog etwas anders aus, wenn Sie mit der rechten Maustaste auf den Link geklickt haben:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-lesezeichen5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie hier den vorletzten Punkt „Zu Favoriten“ hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Danach erscheint folgender Dialog:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-lesezeichen6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Geben Sie wieder einen aussagekräftigen Namen ein und klicken auf „Hinzufügen“. Danach steht das Lesezeichen Ihnen unter den Favoriten des InternetExplorers zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie bei einem Lesezeichen werden die eingestellten Parameter gespeichert, nicht der Stand der Daten. Wenn Sie ein Lesezeichen am 1.7. erstellt haben und am 20.7. wieder aufrufen, bekommen Sie -wie üblich- den Datenstand vom Vortag als dem 19.7. .&lt;br /&gt;
&lt;br /&gt;
Der Stand der Daten wird immer am Ende der Legende angezeigt:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Benutzer-stand_der_daten.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Falls Sie den Kontostand zu einem bestimmten Stichtag speichern möchten, nutzen Sie die Druckversion, Excel- oder PDF-Exportfunktion – dabei gilt es natürlich die Datenschutzbestimmungen einzuhalten.&lt;br /&gt;
&lt;br /&gt;
==Weitere Funktionen==&lt;br /&gt;
Es gibt noch einige weitere Funktionen, die für fortgeschrittene User interessant sein könnten, z.B. das Ausblenden oder Umsortieren von Ergebnisspalten oder die Änderung der Sortierreihenfolge von Ergebnissen.&lt;br /&gt;
&lt;br /&gt;
Hier sei auf das allgemeine Benutzerhandbuch verwiesen: [http://benutzerhandbuch.superx-projekt.de/ SuperX-Benutzerhandbuch], Kapitel 3.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Modul_GXStage_Konfigurationshandbuch&amp;diff=16362</id>
		<title>Modul GXStage Konfigurationshandbuch</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Modul_GXStage_Konfigurationshandbuch&amp;diff=16362"/>
		<updated>2026-07-09T09:06:44Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Einführung=&lt;br /&gt;
&lt;br /&gt;
Das GX-Stage-Modul wird derzeit für SAP-Finanzberichte in SuperX genutzt. Dieses Konfigurationshandbuch beschreibt die administrativen Einstellungen für das Modul, insbesondere das Customizing, die Rechtevergabe auf Finanzstellen und Haushaltsprogramme sowie die Einrichtung geeigneter Benutzergruppen.&lt;br /&gt;
&lt;br /&gt;
==Installation des Moduls==&lt;br /&gt;
&lt;br /&gt;
Die Installation des Moduls ist in der GXSTAGE-Installationsanleitung beschrieben:&lt;br /&gt;
&lt;br /&gt;
[https://superxhosting.de/wiki/index.php/GXSTAGE_Installationsanleitung GXSTAGE Installationsanleitung]&lt;br /&gt;
&lt;br /&gt;
=Customizing=&lt;br /&gt;
&lt;br /&gt;
==Bestimmte Daten, z. B. Fonds mit Personalbuchungen, nicht anzeigen==&lt;br /&gt;
&lt;br /&gt;
Über die Repository-Variable &#039;&#039;&#039;GXSTAGE_CUSTOM&#039;&#039;&#039; können bestimmte Daten aus den GX-Stage-Auswertungen ausgeschlossen werden. Das ist beispielsweise sinnvoll, wenn Fonds mit Personalbuchungen nicht in den Berichten erscheinen sollen.&lt;br /&gt;
&lt;br /&gt;
Gehen Sie dazu als Administrator/-in in den Bereich &#039;&#039;&#039;Administration Kaufmännische Auswertungen / Prüfprotokoll Kaufmännische Auswertungen&#039;&#039;&#039;. Öffnen Sie dort oben links unter &#039;&#039;&#039;Weitere Einstellungen&#039;&#039;&#039; den Punkt &#039;&#039;&#039;Filter und Variablen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Im neuen Fenster geben Sie oben rechts bei &#039;&#039;&#039;Variable suchen&#039;&#039;&#039; den Suchbegriff &#039;&#039;&#039;GXSTAGE_CUSTOM&#039;&#039;&#039; ein. Wenn die Variable bereits vorhanden ist, können Sie sie bearbeiten. Andernfalls legen Sie sie neu an.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Gxstage_custom.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Tragen Sie im Inhalt der Variable einen passenden SQL-Abschnitt ein und speichern Sie die Änderung. Ein Beispiel zum Ignorieren des Fonds 80561002 lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
and ggnr!=&#039;80561002&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Der SQL-Abschnitt muss syntaktisch zur bestehenden WHERE-Bedingung passen. Im Screenshot fehlt beispielsweise noch ein &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;. Wenn nach der Änderung ein SQL-Fehler auftritt, muss die Bedingung in der Repository-Variable korrigiert werden.}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Speichern muss der SuperX-Manager-Cache aktualisiert werden. Klicken Sie dazu oben rechts auf &#039;&#039;&#039;SuperX Manager&#039;&#039;&#039; und anschließend im neuen Fenster auf &#039;&#039;&#039;Server-Cache aktualisieren&#039;&#039;&#039;. Testen Sie danach die betroffenen Berichte.&lt;br /&gt;
&lt;br /&gt;
==Weitere einstellbare Parameter==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Parameter können im Repository angepasst werden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;99%&amp;quot;&lt;br /&gt;
! width=&amp;quot;25%&amp;quot; bgcolor=&amp;quot;#CCE1EF&amp;quot;|Variable&lt;br /&gt;
! width=&amp;quot;35%&amp;quot; bgcolor=&amp;quot;#CCE1EF&amp;quot;|Defaultwert / Beispiel&lt;br /&gt;
! width=&amp;quot;40%&amp;quot; bgcolor=&amp;quot;#CCE1EF&amp;quot;|Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| GXSTAGE_DUMMY_HHPROG&lt;br /&gt;
| &amp;lt;code&amp;gt;9999&amp;lt;/code&amp;gt;&lt;br /&gt;
| Nummer des Dummy-Haushaltsprogramms.&lt;br /&gt;
|-&lt;br /&gt;
| GXSTAGE_CUSTOM&lt;br /&gt;
| &amp;lt;code&amp;gt;and 1=1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Allgemeine Einschränkung für das GX-Stage-Modul.&lt;br /&gt;
|-&lt;br /&gt;
| GXSTAGE_IGNORE_EINNAHMEN_BRUTTO_FIPOS&lt;br /&gt;
| &amp;lt;code&amp;gt;and sachkonto not in (&#039;400000101&#039;, &#039;48000100&#039;, &#039;48000199&#039;,&#039;48100000&#039;, &#039;40000901&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
| Steuerkonten, die für Einnahmen netto nicht berücksichtigt werden sollen.&lt;br /&gt;
|-&lt;br /&gt;
| GXSTAGE_IGNORE_AUSGABEN_BRUTTO_FIPOS&lt;br /&gt;
| &amp;lt;code&amp;gt;and sachkonto not in (&#039;26000000&#039;, &#039;26000099&#039;, &#039;26200020&#039;,&#039;26200029&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
| Steuerkonten, die für Ausgaben netto nicht berücksichtigt werden sollen.&lt;br /&gt;
|-&lt;br /&gt;
| GXSTAGE_ADAPT_FIPOS_TYPE&lt;br /&gt;
| &amp;lt;code&amp;gt;update gxstage_fipos set potyp=&#039;3&#039; where variante=1 and key in (&#039;26000000&#039;, &#039;26000099&#039;, &#039;26200020&#039;,&#039;26200029&#039;);&amp;lt;/code&amp;gt;&lt;br /&gt;
| Ändert den Typ von Finanzpositionen. &amp;lt;code&amp;gt;potyp=2&amp;lt;/code&amp;gt; steht für Einnahmen, &amp;lt;code&amp;gt;potyp=3&amp;lt;/code&amp;gt; für Ausgaben. Die Einstellung gilt nur für die Sicht inklusive statistischer Fortschreibungen (&amp;lt;code&amp;gt;variante=1&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| GXSTAGE_TECH_FIPOS&lt;br /&gt;
| &amp;lt;code&amp;gt;key like &#039;%/%&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Legt fest, wie technische Finanzpositionen erkannt werden. Die Unterscheidung zwischen Einnahme und Ausgabe erfolgt nach &amp;lt;code&amp;gt;potyp&amp;lt;/code&amp;gt;. Die Einstellung gilt automatisch nur für die Sicht inklusive statistischer Fortschreibungen (&amp;lt;code&amp;gt;variante=1&amp;lt;/code&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Usern Rechte auf Finanzstellen oder HHProgramme geben=&lt;br /&gt;
&lt;br /&gt;
Standardmäßig ist im GX-Stage-Modul vorgesehen, Benutzerinnen und Benutzern Rechte auf Finanzstellen und Haushaltsprogramme zu geben. Die Universität Hohenheim nutzt zusätzlich eine Erweiterung, mit der auch Rechte auf Finanzpositionen und Fonds unterstützt werden.&lt;br /&gt;
&lt;br /&gt;
Melden Sie sich als Administrator/-in an und öffnen Sie &#039;&#039;&#039;Kaufmännische Auswertungen -&amp;gt; Administration Kaufmännische Auswertungen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie anschließend den Punkt &#039;&#039;&#039;SAP Rechte administrieren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Die Maske funktioniert ähnlich wie die Kernmodulmaske &#039;&#039;&#039;User suchen&#039;&#039;&#039;. Sie können nach einem User, nach einer Gruppe oder nach einer Finanzstelle bzw. einem Haushaltsprogramm suchen, für das bereits Berechtigungen vergeben wurden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Abschicken erscheinen die passenden Benutzerinnen und Benutzer.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie beim gewünschten User auf einen der &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;-Buttons. Über &#039;&#039;&#039;Bearbeiten Auswahlfelder&#039;&#039;&#039; können Finanzstellen und Haushaltsprogramme über Auswahlfelder gepflegt werden. Über &#039;&#039;&#039;Bearbeiten Schlüsseleingabe&#039;&#039;&#039; können Schlüssel direkt eingetragen werden. Das ist bei bekannten Schlüsseln oft schneller.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Wenn nach der Schlüsseleingabe ein Eintrag ohne Bezeichnung erscheint, existiert die Finanzstelle oder das Haushaltsprogramm wahrscheinlich nicht oder der Schlüssel wurde falsch eingegeben. Löschen Sie den Eintrag dann über das rote X und erfassen Sie den korrekten Schlüssel erneut.}}&lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel erhält der User &#039;&#039;&#039;testfakab1&#039;&#039;&#039; Rechte für die gesamte Finanzstelle &#039;&#039;&#039;AB&#039;&#039;&#039;. Nach dem Klick auf Bearbeiten öffnet sich das Formular.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie bei den Finanzstellen die Fakultät &#039;&#039;&#039;AB&#039;&#039;&#039; aus und klicken Sie auf den Einfüge-Button mit dem blauen Haken. Danach sieht der Dialog so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage5b.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Das Fenster kann anschließend geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
{{Achtung|In der Auswahlliste erscheinen sowohl Finanzstellen einschließlich TOP-Finanzstellen als auch Kostenstellen inklusive übergeordneter Hierarchie-Kostenstellen. Bei der Rechtevergabe ist wichtig, ob sich die spätere Auswertung auf die reguläre Finanzstellen-Sicht oder auf die organisatorische Sicht aus CO bezieht.}}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einem User beispielsweise Rechte auf eine TOP-Finanzstelle &#039;&#039;&#039;1000&#039;&#039;&#039; geben, sieht der User in der regulären Finanzstellen-Sicht das Budget und alle Buchungen auf den untergeordneten Finanzstellen, z. B.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1000&lt;br /&gt;
  -1001&lt;br /&gt;
  -1002&lt;br /&gt;
  -1003&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der organisatorischen Sicht aus CO sieht der User in diesem Fall zunächst nichts, wenn dort die TOP-Finanzstelle &#039;&#039;&#039;1000&#039;&#039;&#039; nicht vorhanden ist. Dann müssen zusätzlich Rechte auf die einzelnen Kostenstellen, z. B. &#039;&#039;&#039;1001&#039;&#039;&#039;, &#039;&#039;&#039;1002&#039;&#039;&#039; und &#039;&#039;&#039;1003&#039;&#039;&#039;, oder auf eine übergeordnete Kostenstelle vergeben werden.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einem User Rechte auf eine übergeordnete CO-Kostenstelle geben, z. B. &#039;&#039;&#039;8056_9000&#039;&#039;&#039;, sieht er in der organisatorischen Sicht der Finanzstellen alles, was auf darunterliegenden Kosten- bzw. Finanzstellen gebucht wurde, z. B.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
8056_9000&lt;br /&gt;
  -80569001&lt;br /&gt;
  -80569002&lt;br /&gt;
  -80569003&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der regulären Finanzstellen-Sicht sieht der User diese übergeordnete CO-Kostenstelle dagegen nicht, weil sie dort nicht existiert. In diesem Fall müssen zusätzliche Rechte auf die einzelnen Finanzstellen, z. B. &#039;&#039;&#039;80569001&#039;&#039;&#039;, &#039;&#039;&#039;80569002&#039;&#039;&#039; und &#039;&#039;&#039;80569003&#039;&#039;&#039;, oder auf eine vorhandene TOP-Finanzstelle vergeben werden.&lt;br /&gt;
&lt;br /&gt;
User, die eine Finanzstelle sehen dürfen, dürfen automatisch alle Haushaltsprogramme sehen, die zu dieser Finanzstelle gehören. Eine Ausnahme gilt, wenn sie zu einer Gruppe mit exakt dem Namen &#039;&#039;&#039;SAP-Finanzstellen nur DummyHHProg&#039;&#039;&#039; gehören.&lt;br /&gt;
&lt;br /&gt;
Soll ein User nur Rechte für ein bestimmtes Haushaltsprogramm erhalten, darf ihm nicht das Recht auf die gesamte Finanzstelle gegeben werden. Stattdessen wird nur das gewünschte Haushaltsprogramm zugeordnet. Im folgenden Beispiel erhält der User &#039;&#039;&#039;testfakab2&#039;&#039;&#039; nur Rechte für den &#039;&#039;&#039;Tag der offenen Tür&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie wieder auf den blauen Haken unter dem Eintrag &#039;&#039;&#039;Tag der off. Tür&#039;&#039;&#039;. Danach sieht der Dialog so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Das Fenster kann anschließend geschlossen werden.&lt;br /&gt;
&lt;br /&gt;
=Gruppen einrichten=&lt;br /&gt;
&lt;br /&gt;
==Einfachste Variante==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Variante ist eine allgemeine Gruppe für dezentrale SAP-User. Öffnen Sie dazu unter &#039;&#039;&#039;Administration -&amp;gt; Benutzer&#039;&#039;&#039; den Menüpunkt &#039;&#039;&#039;Gruppe einrichten&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die automatisch vergebene Gruppen-TID sollte unverändert bleiben. Im Beispiel ist dies die TID 14.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage_gruppe1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Geben Sie einen passenden Gruppennamen ein, z. B. &#039;&#039;&#039;dezentrale SAP-User&#039;&#039;&#039;. Bei &#039;&#039;&#039;Mitglieder&#039;&#039;&#039; wählen Sie die gewünschten Userkennungen aus. Alternativ können Sie später über &#039;&#039;&#039;Administration -&amp;gt; Benutzer -&amp;gt; User suchen&#039;&#039;&#039; einen Benutzer suchen, auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039; klicken und ihn dort der Gruppe hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Diese einfache Variante funktioniert, hat aber drei Einschränkungen:&lt;br /&gt;
&lt;br /&gt;
* Benutzer, die nur Rechte auf einzelne Haushaltsprogramme und keine Rechte auf komplette Finanzstellen haben, bekommen trotzdem den Bericht &#039;&#039;&#039;SAP-Budget nach Finanzstellen&#039;&#039;&#039; angeboten. Da die Auswahl einer Finanzstelle dort obligatorisch ist, können sie mit diesem Bericht nicht sinnvoll arbeiten.&lt;br /&gt;
* Sie müssen entscheiden, ob das Feld &#039;&#039;&#039;Finanzpositionswahl&#039;&#039;&#039; mit der Auswahl &#039;&#039;&#039;nur zahlungswirksam / alle inkl. stat. Fipos&#039;&#039;&#039; angezeigt werden soll.&lt;br /&gt;
* Wenn Standarduser den Finanzpositionsbericht öffnen, könnten sie beim Button &#039;&#039;&#039;Finanzposition&#039;&#039;&#039; zur Sicht &#039;&#039;&#039;inkl. Stat. Fortschreibung&#039;&#039;&#039; wechseln. Diese Möglichkeit sollte normalen Usern besser nicht angeboten werden.&lt;br /&gt;
&lt;br /&gt;
Sie können diese einfache Gruppe daher auch als Expertengruppe verwenden, z. B. mit dem Namen &#039;&#039;&#039;SAP-Experten&#039;&#039;&#039;, wenn die Mitglieder auch statistische Fortschreibungen bei Finanzpositionen sehen sollen.&lt;br /&gt;
&lt;br /&gt;
==Gruppe für normale Finanzstellenberechtigte==&lt;br /&gt;
&lt;br /&gt;
Für normale Finanzstellenberechtigte empfiehlt sich eine eigene Gruppe mit gezielten Maskenrechten und Sichtrechten.&lt;br /&gt;
&lt;br /&gt;
===Gruppe einrichten===&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie unter &#039;&#039;&#039;Administration -&amp;gt; Benutzer&#039;&#039;&#039; den Menüpunkt &#039;&#039;&#039;Gruppe einrichten&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage_gruppe6.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Lassen Sie die automatisch vergebene Gruppen-TID unverändert. Im Beispiel ist dies die TID 16. Als Gruppennamen können Sie z. B. &#039;&#039;&#039;SAP-Finanzstellenberechtigte&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;Mitglieder&#039;&#039;&#039; wählen Sie die Userkennungen aus. Alternativ können Benutzer später über &#039;&#039;&#039;Administration -&amp;gt; Benutzer -&amp;gt; User suchen&#039;&#039;&#039; gesucht, bearbeitet und der Gruppe hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;Masken-Rechte&#039;&#039;&#039; wählen Sie folgende Berichte aus:&lt;br /&gt;
&lt;br /&gt;
* 33000&lt;br /&gt;
* 33060&lt;br /&gt;
* 33080&lt;br /&gt;
* 33100&lt;br /&gt;
&lt;br /&gt;
===Rechte auf Sichten===&lt;br /&gt;
&lt;br /&gt;
Zusätzlich benötigt die Gruppe Rechte auf die relevanten SAP-Sichten. Öffnen Sie dazu &#039;&#039;&#039;Administration -&amp;gt; Masken -&amp;gt; Sicht suchen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage_gruppe3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst die &#039;&#039;&#039;SAP-Finanzpositions-Sicht&#039;&#039;&#039; aus und klicken Sie auf &#039;&#039;&#039;Abschicken&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage_gruppe4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie in der ersten Zeile in der letzten Spalte auf das Symbol für &#039;&#039;&#039;User- und Gruppenrechte bearbeiten&#039;&#039;&#039;. Es öffnet sich ein umfangreicher Bearbeiten-Dialog für die Sicht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Sicht_fipos.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie bei &#039;&#039;&#039;Gruppen, die diese Sicht sehen dürfen&#039;&#039;&#039; die Gruppe &#039;&#039;&#039;SAP-Finanzstellenberechtigte&#039;&#039;&#039; aus und klicken Sie auf &#039;&#039;&#039;neue Gruppe einfügen&#039;&#039;&#039;. Ein erneutes Speichern oder ein Leeren des Manager-Caches ist bei dieser speziellen Funktion nicht nötig.&lt;br /&gt;
&lt;br /&gt;
Gehen Sie anschließend zurück zur Maske &#039;&#039;&#039;Sicht suchen&#039;&#039;&#039; und vergeben Sie Rechte für folgende Sichten bzw. Sichtarten:&lt;br /&gt;
&lt;br /&gt;
* SAP-Finanzstellen-Sicht&lt;br /&gt;
* SAP-Geldgeber-Sicht&lt;br /&gt;
* SAP-Projekt-Sicht&lt;br /&gt;
* SAP-Zahlungspartner-Sicht&lt;br /&gt;
&lt;br /&gt;
Wählen Sie jeweils die passende Sichtart aus.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-sicht2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie wieder in der ersten Zeile auf den Link für &#039;&#039;&#039;User- und Gruppenrechte&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-sicht3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Bearbeiten-Dialog scrollen Sie ganz nach unten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-sicht4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie bei &#039;&#039;&#039;Gruppen, die die ganze Sichtart sehen dürfen&#039;&#039;&#039; die Gruppe &#039;&#039;&#039;SAP-Finanzstellenberechtigte&#039;&#039;&#039; aus und klicken Sie auf &#039;&#039;&#039;neue Gruppe einfügen&#039;&#039;&#039;. Auch hier ist kein erneutes Speichern und kein Leeren des Manager-Caches nötig.&lt;br /&gt;
&lt;br /&gt;
Wiederholen Sie dieses Vorgehen für die oben genannten Sichtarten.&lt;br /&gt;
&lt;br /&gt;
===Finanzpositionswahl ausblenden===&lt;br /&gt;
&lt;br /&gt;
Standarduser sollten keine Möglichkeit haben, Werte inklusive statistischer Finanzpositionen auszuwerten. Deshalb sollte das Feld &#039;&#039;&#039;Finanzpositionswahl&#039;&#039;&#039; für die normale Gruppe ausgeblendet werden.&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie die Maske &#039;&#039;&#039;Administration -&amp;gt; Tabelle suchen&#039;&#039;&#039; und geben Sie als Stichwort &#039;&#039;&#039;pref&#039;&#039;&#039; ein. Es erscheinen ein Listen- und ein Detailformular für die entsprechende Tabelle.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-verstecken1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie bei &#039;&#039;&#039;group_field_pref_list&#039;&#039;&#039; in der zweiten Zeile auf den Bearbeiten-Button. Es öffnet sich ein Formular.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-verstecken2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wählen Sie die Gruppe aus und anschließend das Feld &#039;&#039;&#039;33025 Finanzpositionswahl&#039;&#039;&#039;. Klicken Sie danach auf den gelben Einfüge-Button. Der neue Eintrag wird gespeichert.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-verstecken3.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie danach auf den Detail-Bearbeiten-Button. Im Detailformular wählen Sie bei &#039;&#039;&#039;Voreinstellung&#039;&#039;&#039; den Wert &#039;&#039;&#039;versteckt&#039;&#039;&#039; und speichern die Änderung.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-verstecken4.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Das Fenster kann anschließend geschlossen werden. Das vorherige Formular sieht danach so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-verstecken5.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie erneut den Einfüge-Button an und wiederholen Sie das Vorgehen für folgende Felder:&lt;br /&gt;
&lt;br /&gt;
* 33068 Finanzpositionswahl&lt;br /&gt;
* 33107 Finanzpositionswahl&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung sollte der SuperX-Manager-Cache aktualisiert werden. Klicken Sie dazu oben rechts auf &#039;&#039;&#039;SuperX Manager&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-manager1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie anschließend auf &#039;&#039;&#039;Server-Cache aktualisieren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-manager2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
==Spezielle Gruppe nur für HHProgramm-Nutzer==&lt;br /&gt;
&lt;br /&gt;
Für User, die mindestens eine Finanzstelle komplett sehen dürfen, kann die Gruppe wie unter [[Modul_GXStage_Konfigurationshandbuch#Gruppe für normale Finanzstellenberechtigte|Gruppe für normale Finanzstellenberechtigte]] eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Wenn Benutzer keine Rechte auf komplette Finanzstellen haben, sondern nur auf einzelne Haushaltsprogramme, sollte eine eigene Gruppe eingerichtet werden. Diese Gruppe bekommt den Bericht &#039;&#039;&#039;SAP-Budget nach Finanzstelle&#039;&#039;&#039; nicht angeboten.&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie unter &#039;&#039;&#039;Administration -&amp;gt; Benutzer&#039;&#039;&#039; den Menüpunkt &#039;&#039;&#039;Gruppe einrichten&#039;&#039;&#039;. Lassen Sie die automatisch vergebene Gruppen-TID unverändert. Im Beispiel ist dies die TID 15.&lt;br /&gt;
&lt;br /&gt;
[[Bild:GX-Stage-Modul-Konfiguration-Admin_gxstage_gruppe2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Geben Sie einen Gruppennamen ein, z. B. &#039;&#039;&#039;SAP-User nur HHprog&#039;&#039;&#039;. Bei &#039;&#039;&#039;Mitglieder&#039;&#039;&#039; wählen Sie die gewünschten Userkennungen aus. Alternativ können Sie später über &#039;&#039;&#039;Administration -&amp;gt; Benutzer -&amp;gt; User suchen&#039;&#039;&#039; einen Benutzer suchen, bearbeiten und der Gruppe hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Bei &#039;&#039;&#039;Masken-Rechte&#039;&#039;&#039; wählen Sie folgende Berichte aus:&lt;br /&gt;
&lt;br /&gt;
* 33000&lt;br /&gt;
* 33080&lt;br /&gt;
* 33100&lt;br /&gt;
&lt;br /&gt;
Anschließend müssen Sie der Gruppe noch Rechte auf SAP-Sichten geben. Gehen Sie dabei wie unter [[Modul_GXStage_Konfigurationshandbuch#Rechte auf Sichten|Rechte auf Sichten]] beschrieben vor, wählen Sie aber die Gruppe &#039;&#039;&#039;SAP-User nur HHProg&#039;&#039;&#039; aus.&lt;br /&gt;
&lt;br /&gt;
Um die Finanzpositionswahl auszublenden, gehen Sie wie unter [[Modul_GXStage_Konfigurationshandbuch#Finanzpositionswahl ausblenden|Finanzpositionswahl ausblenden]] beschrieben vor.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Konfiguration testen, geben Sie dem User zusätzlich Rechte auf einzelne Haushaltsprogramme, wie unter [[Modul_GXStage_Konfigurationshandbuch#Usern Rechte auf Finanzstellen oder HHProgramme geben|Usern Rechte auf Finanzstellen oder HHProgramme geben]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Wenn sich die Rechtezuordnung ändert, sollte die Gruppenzugehörigkeit zu dieser speziellen Gruppe entfernt und der User der passenden Gruppe zugeordnet werden.&lt;br /&gt;
&lt;br /&gt;
==Gruppen für User mit statistischen Finanzpositionen==&lt;br /&gt;
&lt;br /&gt;
Für User, die als Expertinnen und Experten auch Finanzpositionen mit statistischer Fortschreibung auswerten können sollen, kann eine Gruppe wie unter [[Modul_GXStage_Konfigurationshandbuch#Einfachste Variante|Einfachste Variante]] angelegt werden.&lt;br /&gt;
&lt;br /&gt;
==Gruppe für User, die bei Finanzstellen nur das Dummy-HHProg sehen sollen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie für diesen Fall eine Gruppe mit exakt folgendem Namen an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SAP-Finanzstellen nur DummyHHProg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Vorgehen entspricht der Einrichtung unter [[Modul_GXStage_Konfigurationshandbuch#Gruppe für normale Finanzstellenberechtigte|Gruppe für normale Finanzstellenberechtigte]]. Anhand des Gruppennamens erkennt das System, dass nicht wie üblich alle Haushaltsprogramme der gewählten Finanzstelle angezeigt werden sollen, sondern nur das Dummy-Haushaltsprogramm.&lt;br /&gt;
&lt;br /&gt;
Wenn ein User für einige Finanzstellen alle Haushaltsprogramme sehen soll und für andere nur das Dummy-HHProgramm, müssen zwei Benutzerkennungen angelegt werden. Eine Kennung wird der Gruppe für normale Finanzstellenberechtigte zugeordnet, die andere der Gruppe &#039;&#039;&#039;SAP-Finanzstellen nur DummyHHProg&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16342</id>
		<title>Berichtsdesign mit JasperReports</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16342"/>
		<updated>2026-07-06T08:40:04Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Berichtsdesign mit JasperReports &lt;br /&gt;
&lt;br /&gt;
von Daniel Quathamer &amp;amp;amp; Andre Knieschewski&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-installieren-und-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports installieren und konfigurieren =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;voraussetzungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* Jasperreports ist eine Laufzeitumgebung fürs Reporting, die in java-basierte Reporting Software integriert werden kann. Der Download ist hier: https://sourceforge.net/projects/jasperreports/. Dieses Paket enthält kommandozeilenbasierte Demos und die benötigten Libraries. Die Demos sind sehr nützlich und als Referenz gut nutzbar. &lt;br /&gt;
* Die Entwicklungsumgebung für JasperReports heißt &amp;amp;quot;Jaspersoft Studio&amp;amp;quot; und kann bezogen werden von https://community.jaspersoft.com/project/jaspersoft-studio. Es enthält auch obige Laufzeitumgebung.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da es ein Eclipse Plugin ist, können Sie es auch direkt in Ihrem Eclipse installieren (Menü Help → Eclipse Marketplace → Suchwort &amp;amp;quot;Jaspersoft&amp;amp;quot;. Dort können Sie aber nur die jeweils aktuelle Version installieren.&lt;br /&gt;
&lt;br /&gt;
Da der Download bei Jaspersoft nun nur für registrierte Nutzer zur Verfügung steht, hier noch ein Link für den Download: https://sourceforge.net/projects/jasperstudio/files/&lt;br /&gt;
&lt;br /&gt;
* Für altere Projekte wurde auch iReport verwendet. Da es ein paar Bugs in den verschiedenen Versionen gibt, empfehlen wir zu der Erstellung von JasperReport Berichten die iReport Version 4.1.3, auch wenn in Edustore die Version 5.1.0 verwendet wird. Download der passenden Version von iReport von http://sourceforge.net/projects/ireport (dort auf &amp;amp;quot;files&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;iReport&amp;amp;quot; klicken, dann erhalten Sie Links auf die jeweilige Version. &lt;br /&gt;
* Für Demos &amp;amp;amp; Deployment auch Apache ANT http://ant.apache.org/&lt;br /&gt;
* Java 1.8 JRE oder höher&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports und Jaspersoft Studio  ==&lt;br /&gt;
&lt;br /&gt;
JasperReports ist das Programm, das fertige Berichte erzeugen kann. Es besitzt (außer einer Vorschauansicht der Berichte) keine graphische Oberfläche. Für das Entwerfen von Berichten ist &#039;&#039;&#039;&#039;&#039;&#039;Jaspersoft Studio&#039;&#039;&#039;&#039;&#039;&#039; geeignet. Um es noch ein wenig zu veranschaulichen könnte man sagen, dass wenn ein JasperReport das Worddokument wäre, dann wäre Jaspersoft Studio z.B. Microsoft Word.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Download benötigen Sie Java 1.8 oder höher zum Ausführen. Nach dem Entpacken können Sie die Anwendung direkt starten. &lt;br /&gt;
&lt;br /&gt;
Bei JasperSoft Studio wird als Grundlage Eclipse verwendet. Wenn man JasperSoft Studio herunter lädt, erhält man automatisch Eclipse mit dabei. JasperSoft Studio kann [http://community.jaspersoft.com/project/jaspersoft-studio hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn lieber ein bereits vorhandenes Eclipse verwendet werden soll und Jaspersoft Studio dort als Plugin installiert werden soll, gibt es 2 Wege:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Unter Help → Eclipse Marketplace kann nach „Jaspersoft“ gesucht werden und das Plugin installiert werden&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:JasperReports-Handbuch_jaspersoftstudio_plugin_install1.png]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Man kann auch über die Marketplace Webseite von Eclipse das Plugin Jaspersoft Studio suchen und das Icon per Drag&amp;amp;amp;Drop nach Eclipse ziehen. Dann wird das Plugin automatisch installiert. [https://marketplace.eclipse.org/content/jaspersoft-studio Hier] die Webseite. (Bei mir hat das Drag&amp;amp;amp;Drop leider nicht funktioniert. Das kann an Linux liegen. Unter Windows wird es sicherlich funktionieren.)&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-4&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Unter Windows - &amp;amp;gt; Preferences → Jaspersoft Studio können Sie verschiedene Einstellungen vornehmen. Wichtig in der Menüpunkt &amp;amp;quot;Compatibility&amp;amp;quot;: wählen Sie dort die JR-Version, die auch Ihre Ziel-Platform enthält. &lt;br /&gt;
&lt;br /&gt;
Im Dateimanager von JasperSoft Studio gibt es Eclipse-typisch ein &amp;amp;quot;virtuelles&amp;amp;quot; Dateisystem mit dem Standardnamen &amp;amp;quot;MyReports&amp;amp;quot;, zumindest beim Speichern von Dateien. Dieses Dateisystem liegt physisch im Ordner &amp;amp;lt;&amp;amp;lt;Home-Verzeichnis&amp;amp;gt;&amp;amp;gt;/JaspersoftWorkspace/MyReports.&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen von Dateien können Sie direkt mit &amp;amp;quot;Open File&amp;amp;quot; aufs normale Dateisystem zugreifen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-5&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht des Entwurfsbereichs, in rot finden Sie Erläuterungen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_designer.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Die Unterfenster können Sie Eclipse-typisch beliebig anordnen. Oben ein Beispiel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-sortierung-und-filterung-der-datenquelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-6&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Sortierung und Filterung der Datenquelle =====&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenquelle definiert ist, kann /sollte der Bericht die Sortierung und Filterung der Daten festlegen. Dies ist etwas versteckt im Designer mittig oberhalb des Entwurfsbereichs:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie die Reiter &amp;amp;quot;Sorting&amp;amp;quot; und &amp;amp;quot;Filter Expression&amp;amp;quot;. Dort pflegen Sie beides.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsdesign-und-vorschau&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-7&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsdesign und Vorschau =====&lt;br /&gt;
&lt;br /&gt;
Im Designmodus können Sie den Bericht entwerfen, oder den XML-Quellcode. Beim Klick auf den Reiter &amp;amp;quot;Preview&amp;amp;quot; bekommen Sie eine Vorschau des Berichts:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_preview.png]]&lt;br /&gt;
&lt;br /&gt;
Oberhalb der Vorschau können Sie die Datenquelle (d.h. den &amp;amp;quot;Data Adapter&amp;amp;quot; angeben, und rechts daneben die Anwendung, die den Bericht zur Anzeige bringt (&amp;amp;quot;Viewer&amp;amp;quot;). Voreingestellt ist hier der Java-interne Viewer von JasperReports, Sie können den aber umstellen z.B: auf PDF oder Excel.&lt;br /&gt;
&lt;br /&gt;
Mit Klick auf das grüne Dreieck führen Sie den Bericht aus und erhalten die Vorschau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Es ist aufgefallen, dass beispielsweise Fettdruck in der PDF-Vorschau nicht angezeigt wird. Im Java-Preview und aus der Weboberfläche geladen, ist der Fettdruck ersichtlich. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsstruktur&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-8&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsstruktur =====&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Outline View&amp;amp;quot; sehen Sie die Struktur des Berichts, d.h. aktive &amp;amp;quot;Bänder&amp;amp;quot; und Metadaten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_outline.png]]&lt;br /&gt;
&lt;br /&gt;
Die Elemente unter &amp;amp;quot;Fields&amp;amp;quot; werden bei Nutzung in [[Berichtsdesign_mit_JasperReports#Template erzeugen|Edustore]] automatisch gefüllt. Alles weitere definieren Sie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-elemente-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-9&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Elemente bearbeiten =====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie im Design Modus ein Element markieren, wird es automatisch im Outline und in dem Reiter &amp;amp;quot;Properties&amp;amp;quot; selektiert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_properties.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Outline zeigt es lediglich, wo es sich befindet, und im Reiter &amp;amp;quot;Properties&amp;amp;quot; können Sie Formatierung, Anzeige etc. bearbeiten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-10&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport ===&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_welcome.png]] Das Paket enthält bereits die Laufzeitumgebung JasperReports, diese muss also nicht separat installiert werden. Nichtsdestotrotz empfiehlt sich der Download, denn in dem JasperReports-Paket befinden sich viele lehrreiche Demo-Berichte.&lt;br /&gt;
&lt;br /&gt;
Die Windows-Version beinhaltet auch einen Installer. Um diesen zu nutzen sind Admin-Rechte erforderlich. &lt;br /&gt;
&lt;br /&gt;
Alternativ bzw. unter Linux ist iReport ohne Installation direkt nach dem Entpacken lauffähig. Wenn Sie auch Scriptlets erstellen wollen, müssen Sie nicht nur eine Java-Laufzeitumgebung (JRE) installieren, sondern ein JDK, und die Datei $JAVA_HOME/lib/tools.jar nach iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/ireport/libs kopieren. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start unter Windows: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport.exe&lt;br /&gt;
&lt;br /&gt;
Start unter Linux: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-11&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Als erstes sollten Sie die Anwendungen einstellen, mit denen iReport generierte Berichte anzeigen soll:&lt;br /&gt;
&lt;br /&gt;
Im Menü Extras-&amp;amp;gt; Optionen wählen Sie im Reiter &amp;amp;quot;iReport&amp;amp;quot;-&amp;amp;quot;Viewers&amp;amp;quot; die entsprechenden Anwendungen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_viewers.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-12&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Der Entwurfsbereich bzw. &amp;amp;quot;Designer&amp;amp;quot; hat einen recht komplexen Aufbau. Sie können die Fenster und Seitenbereiche zwar recht flexibel anpassen, aber hier ist die Auslieferung:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_ueberblick.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Bereiche sind hervorgehoben:&lt;br /&gt;
&lt;br /&gt;
* Berichtsstruktur: Welche Seitenbereiche gibt es?&lt;br /&gt;
* Datenquelle: Welche Datenbank wird genutzt?&lt;br /&gt;
* Abfrage: Was ist die konkrete Abfrage für den Bericht?&lt;br /&gt;
* Elemente: Welche Elemente kann ich einfügen, und welche Eigenschaften haben sie?&lt;br /&gt;
* Vorschau: wie sieht der Bericht &amp;amp;quot;gedruckt&amp;amp;quot; aus?&lt;br /&gt;
* Fehlerausgabe: Jeder Bericht wird &amp;amp;quot;kompiliert&amp;amp;quot;, dazu gibt es eine Fehlerausgabe&lt;br /&gt;
&lt;br /&gt;
Im Reiter &amp;amp;quot;Preview&amp;amp;quot; kann man sich eine Vorschau des Ausdrucks anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterschiede-ireport-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-13&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterschiede iReport und JasperSoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Mit der Version 5.5 wurde die Entwicklung von iReport eingestellt, die Firma JasperSoft empfiehlt seit dem die Benutzung von JasperSoft Studio. Nach unseren Erfahrungen ist die Arbeit mit iReport 4.1.3 (die letzte stabile Version) hier und da &amp;amp;quot;leichtgewichtiger&amp;amp;quot; und einfacher, ganz zu schweigen vom Overhead, den JasperSoft Studio mit Eclipse einbringt. Besonders nervig empfanden wir es, dass JasperSoft Studio anders als iReport verschiedene Objekteigenschaften in Reitern organisiert, und bei jedem Wechsel der Markierung eines Berichtselements muss man in JasperSoft Studio wieder zum richtigen Reiter wechseln. &lt;br /&gt;
&lt;br /&gt;
Andererseits ist JasperSoft Studio kompatibel mit neueren JR-Möglichkeiten. Insbesondere bei dem Umgang mit Diagrammen gibt es in JasperSoft Studio erheblich mehr Möglichkeiten, z.B. Chart Customization. Außerdem ist es vorteilhaft, wenn Sie ohnehin Eclipse nutzen. Sie sollten für Ihre Arbeit also abwägen ob Sie die neueren Möglichkeiten im jeweiligen Bericht überhaupt brauchen, ggf. sind Sie mit iReport besser bedient. Aber das ist Geschmackssache.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Beachten Sie aber bitte: sobald Sie einen Bericht mit JasperSoft bearbeitet und gespeichert haben, ist er mit iReport 4.1.3 nicht mehr bearbeitbar, bzw. nur wenn Sie die [[Berichtsdesign_mit_JasperReports#UUID&#039;s|UUIDs]] entfernt haben.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beide Produkte befinden sich noch im Einsatz, daher hier nur ein paar Kapitel zur Handhabung der jew. Software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;handhabung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-14&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Handhabung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;preview&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-15&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Preview =====&lt;br /&gt;
&lt;br /&gt;
Bei iReport waren die Buttons für Designer und Preview immer oben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
Bei Jaspersoft Studio liegen die Buttons unten:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;palette&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-16&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Palette =====&lt;br /&gt;
&lt;br /&gt;
Die Palette ist bei iReport und Jaspersoft Studio an gleicher Position zu finden.&lt;br /&gt;
&lt;br /&gt;
Ireport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette1.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;objekt-eigenschaften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-17&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Objekt-Eigenschaften =====&lt;br /&gt;
&lt;br /&gt;
Die Objekt-Eigenschaften liegen auch an der gleichen Stelle, jedoch sind bei Jaspersoft Studio die Gruppierungen der Eigenschaften in Karteireiter unterteilt. Bei iReport ist es einfach eine lange Liste mit Unterteilungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iReport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-als-kommandozeilen-tool&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-18&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports als Kommandozeilen-Tool ==&lt;br /&gt;
&lt;br /&gt;
In der JasperReports-Distribution befindet sich ein ANT-Script, das mehrere Berichte erzeugen kann.&lt;br /&gt;
&lt;br /&gt;
Beispiel xmldatasource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd demo/samples&lt;br /&gt;
cd xmldatasource&lt;br /&gt;
ant -p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe ist:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ant_xmldatasource.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden, je nach Auswahl pdf-, Excel- oder andere Berichte erzeugt. Mit dem Target &amp;amp;quot;test&amp;amp;quot; werden alle Targets durchlaufen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ant test&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: manche Demos brauchen eine laufende HSQLDB (siehe demo/hsqldb).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-19&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquellen =&lt;br /&gt;
&lt;br /&gt;
Allgemein unterstützt JasperReports verschiedene Datenquellen, z.B. relationale Datenbanken, Excel, CSV oder XML. Auch Webservices sind möglich. Speziell für SuperX/ HISinOne-BI gibt es spezielle Datenquellen-Vorgaben, damit Sie die Daten auch im Server-Betrieb nutzen können. Hier also nur die allgemeinen, also SupeRX/BI-unabhängigen Quellen, wenn Sie JasperReports am lokalen Arbeitsplatz nutzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-datenbank&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-20&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Eine relationale Datenbank ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Oben links befindet sich der Dialog zum Erzeugen (1) des Data Adapter, und dann darunter die Zeile &amp;amp;quot;Database Jdbc Connection&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_data_adapter1.png]]&lt;br /&gt;
&lt;br /&gt;
Dort geben Sie dann die jdbc-spezifischen Daten an (Datenbanktyp, Name etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: die Nutzung setzt eine direkte Datenbankverbindung zum DB-Server voraus, an vielen Unternehmenanwendungen wird dies nicht mehr erlaubt. Ggf. fragen Sie bei Ihren Systemadministrator/innen nach. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-excel-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-21&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Excel-Datei ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-22&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Eine Excel Datei ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Excel Datei hat vier Spalten und eine führende Zeile mit den Spaltenüberschriften. Achten Sie darauf, dass die Datentypen der Spalten in Excel dem Inhalt entsprechen. Hier die Spalten:&lt;br /&gt;
&lt;br /&gt;
* Frage Nr. &lt;br /&gt;
* Text &lt;br /&gt;
* Mit_ohne_schule &lt;br /&gt;
* Summe&lt;br /&gt;
&lt;br /&gt;
Aus der Excel-Datei erzeugen Sie einen &amp;amp;quot;Data Adapter&amp;amp;quot;. Der Data Adapter vom Typ &amp;amp;quot;Excel File&amp;amp;quot; hat ein paar Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können Sie in einem Berichtsdesign die Datenquelle definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie wählen dort oben links zunächst den &amp;amp;quot;Data Adapter&amp;amp;quot; aus (1), und klicken dann rechts auf &amp;amp;quot;Read Fields&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_3.png]]&lt;br /&gt;
&lt;br /&gt;
Aus der Datenquelle werden dann die Datenfelder (3) und Inhalte (Reiter &amp;amp;quot;Data preview&amp;amp;quot;) automatisch übernommen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-23&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsdesign =&lt;br /&gt;
&lt;br /&gt;
Das Erstellen eines Berichtes erleichtert JasperReports wesentlich. Dennoch wird man sich damit etwas beschäftigen müssen, um ein vernünftiges Ergebnis zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Zuerst muss man den Bericht öffnen. Das geschieht über „Datei“ → „Open“ → Bericht auswählen → auf „Öffnen“ klicken. Nun noch oben links die für diesen Bericht erstellte Datenquelle auswählen und man kann loslegen.&lt;br /&gt;
&lt;br /&gt;
JasperReports bezeichnet die Ausgabebereiche als Bänder. Ein Band ähnelt einer Zeile. Es reicht über die komplette Seitenbreite. Die Höhe kann dabei selbst bestimmt werden und wird dem Informationsgehalt angepasst. Das Band „Detail 1“ ist so etwas wie das Hauptband, in dem dann die Informationen zeilenweise ausgegeben werden. Es wird also eine Schleife über die Daten (Tabelle) ausgeführt und für jeden Datensatz ein mal das Detail Band ausgegeben. Die linke Spalte könnte z.B so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-iReport_Leiste_Neu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, das das Band „Detail 1“ aktiv ist und die anderen wie „Title“ noch nicht. In den Gruppen „Fields“ und „Variablen“ befinden sich die Felder (Spalten) aus der Ergebnistabelle und interessante Variablen wie Seitenzahl, die man nun einfach in das bestehende Band „Detail 1“ per „Drag and Drop“ ziehen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Feld_Name.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man z.B. in der Gruppe Fields das Feld „Name“ hat und dies in das Band „Detail 1“ zieht,befindet sich ein Platzhalter im Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie dann auf „Preview“ klicken, wird eine Vorschau des Berichts angezeigt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Designer_Preview.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden alle Namen aufgelistet, die in der Datenquelle vorhanden sind:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können das Layout der Ausgabe (Schriftart, Größe) über die Eigenschaften des Feldes variieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-24&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um wieder zurück in den Entwicklermodus zu kommen klickt man einfach wieder auf den Reiter &amp;amp;quot;Designer&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Bänder „Title“, „Page“ usw. kann man mit einem Rechtsklick und dann „Add Band“ hinzufügen und auch wieder mit einem rechtsklick und dann „Delete Band“ wieder entfernen. Diese Bänder haben bestimmte Eigenschaften. Z.B. Band „Titel“ wird nur einmal auf der ersten Seite abgebildet, Band „Page Header/Footer“ auf jeder Seite am Anfang/Ende.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-und-filtern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-25&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung und Filtern ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise verarbeitet JasperReports die Datensätze zeilenweise in der Reihenfolge, in der sie bereitgestellt werden. Sie können im Entwurfsmodus die Sortierung bzw. Filterung der Datensätze anpassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort1.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf das Icon mit der Tonne und Sie gelangen in die Einstellungen für die Datenquelle. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort2.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button Sortieren können Sie nach allen Feldern des Berichts aufsteigend bzw. absteigend sortieren.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button &amp;amp;quot;Filter expression&amp;amp;quot; können Sie eine Formel definieren, um die Gültigkeit von Datensätzen zu definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Z.B. die Expression &amp;amp;quot;.contains(&amp;amp;quot;12&amp;amp;quot;) würde auf alle Datensätze filtern, die im Feld die Zeichenkette &amp;amp;quot;12&amp;amp;quot; enthalten. Weitere Infos im Kapitel zum [[Berichtsdesign_mit_JasperReports#Expression Editor|Expression Editor]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;listen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-26&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Listen ==&lt;br /&gt;
&lt;br /&gt;
Listen lassen sich einfach erstellen, indem man die jeweiligen Felder ins Detail-Band zieht. Manchmal kann es vorkommen, dass Textfelder &amp;amp;quot;überlaufen&amp;amp;quot;, d.h. die rechteckige Box, die das Feld markiert, ist zu klein für den Feldinhalt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_listen_stretch.png]]&lt;br /&gt;
&lt;br /&gt;
In diesem Falle muss man das Attribut des jew. Felder (hier &amp;amp;quot;Fächergruppe&amp;amp;quot;) &amp;amp;quot;Text Field properties &amp;amp;gt; Stretch with overflow&amp;amp;quot; ankreuzen.&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn das Feld Teil einer tabellarischen Auflistung ist, muss man die anderen Element mit der Eigenschaft &amp;amp;quot;Stretch type → Relative to tallest object&amp;amp;quot; versehen, hier z.B. die Felder &amp;amp;quot;Studienfeld&amp;amp;quot; und &amp;amp;quot;Studienbereich&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 Bei vielen Zeilen ist es übersichtlicher, jede zweite Zeile farbig zu hinterlegen. Dieser Trick ist im Abschnitt Tabellengestaltung [[Berichtsdesign_mit_JasperReports#Zeilen alternierend einfärben|erläutert]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-27&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ==&lt;br /&gt;
&lt;br /&gt;
Wichtige Vorbemerkung zum Gruppieren: JasperReports setzt bei der Gruppierung voraus, dass die Datensätze der Datenquelle nach den Gruppierungsmerkmalen sortiert sind. Alle Merkmale, nach denen Sie gruppieren, sollten also entweder direkt in der Datenquelle sortiert sein, oder in JasperReports im [[Berichtsdesign_mit_JasperReports#Sortierung und Filtern|Berichtsentwurf]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppen-definieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-28&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppen definieren ===&lt;br /&gt;
&lt;br /&gt;
Zu den Standardbändern kann man nun auch noch selbst definierte Gruppen hinzufügen. Mit einem Rechtsklick auf den obersten Knoten → „Add Report Group“ öffnet sich ein Fenster in dem man der Gruppe einen Namen geben kann und das Objekt wählt für das die Gruppe erstellt wird.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie mehrere Gruppierungsebenen benötigen, dann sollte die Reihenfolge des Hinzufügens der Gruppen &amp;amp;quot;top-down&amp;amp;quot; verlaufen, d.h. zuerst die oberste Gruppierung hinzufügen, dann die Gruppe darunter usw.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
In dem folgenden Beispiel wird die Gruppe „Monat“ gewählt und in dem nächsten Schritt mit Header und Footer hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
Man zieht das Feld „Namen“ in das Band „Detail“ und &amp;lt;span id=&amp;quot;anchor-29&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Monat“ in das erstellte Band „Monat Group Header 1“. Aus der Palette rechts oben (wenn nicht vorhanden bekommt man es über „Fenster“ → „Palette“) zieht man einen „Static Text“ in das Band „Monat Group Header 1“ vor der Ausgabe des Monats, benennt das Feld „Monat:“ und noch eine Linie darunter. Zusammen sollte es so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man nun auf „Preview“ klickt erhält man als Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-30&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Damit eine Gruppe nicht durch einen Seitenumbruch auseinandergerissen wird, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;lt;span id=&amp;quot;anchor-31&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
Sie können auch angeben daß vor jedem Gruppierungswechsel ein Seitenumbruch ausgeführt wird:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_new_page.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit &amp;amp;quot;Start on a new page&amp;amp;quot; wird eine neue Seite bei jedem Gruppenwechsel begonnen. Speziell beim Export nach Excel kann dies in Tandem mit Arbeitsblättern nutzen, siehe [[Berichtsdesign_mit_JasperReports#Excel-Export in einzelne Tabellenblätter|unten]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppensummen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-32&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppensummen ===&lt;br /&gt;
&lt;br /&gt;
Gruppensummen kann man im Kopf oder Fuß einer Gruppe anlegen. Sie aktivieren z.B. den Gruppenfuß im Report Inspector, und ziehen dann das Feld Summe in den Entwurfsbereich. Beim &amp;amp;quot;Fallenlassen&amp;amp;quot; werden Sie gefragt, ob Sie den jew. Wert oder eine Aggregatfunktion nutzen wollen. Für Zwischensummen wählen Sie &amp;amp;quot;Sum&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_designer_add_group_foot1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich setzen Sie noch ein Label bzw. &amp;amp;quot;Static Text&amp;amp;quot;-Element rechtsbündig davor, und setzen beide Elemente fett:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_foot2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-ohne-eigenes-band&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-33&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ohne eigenes Band ===&lt;br /&gt;
&lt;br /&gt;
Bei der Gruppierung in JasperReports wird in der Regel ein horizontales Band für die Gruppierungsebene angelegt. Das führt dazu, daß man zeilenorientiert gruppiert. In manchen Fällen kann es gewünscht sein, in den Spalten einer Tabelle zu gruppieren. Hier ein Beispiel für das Ziel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten1_vorlage.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird in den Zeilen nach dem Merkmal &#039;&#039;&#039;Fach&#039;&#039;&#039; gruppiert. Zusätzlich wird noch in den Spalten nach Fachsemestern gruppiert. Um dieses Layout zu realisieren, muss man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie ein Column Header Band, und ein Group Footer-Band für die Gruppierungsebene Fach. Warum Group Footer? Weil innerhalb des Fachs nochmal gruppiert werden soll, und daher erst nach dem Gruppieren nach Fach nach Fachsemestern gruppiert wird. Ein Detail-Band gibt es hier nicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten3_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie eine neue Variable z.B. mit dem Namen &amp;amp;quot;fs1&amp;amp;quot; für erstes Fachsemester, und geben Sie der Variable folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten2_variable_1fs.png]]&lt;br /&gt;
&lt;br /&gt;
 Zur Erläuterung: Die Variable filtert die Datensätze gemäß dem Ausdruck in Variable Expression, und tut dies auf der Gruppierungsebene &amp;amp;quot;fach&amp;amp;quot;. Die Variable Expression ist eine für unsere Zwecke sehr nützliche Java-Kurzfassung einer IF-THEN-Bedingung, und meint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn der Inhalt des Feldes &amp;amp;quot;Anzahl Fachsemester&amp;amp;quot; gleich 1 ist, dann gib die Summe der jew. Studierenden aus, wenn nicht, dann gib 0 aus.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Analog kann man noch die Variable &amp;amp;quot;fsgr13&amp;amp;quot; für &amp;amp;quot;Fachsemester &amp;amp;gt; 13&amp;amp;quot; anlegen. &lt;br /&gt;
&lt;br /&gt;
Danach kann man die Variablen &amp;amp;quot;fs1&amp;amp;quot; und &amp;amp;quot;fsgr13&amp;amp;quot; in das Band &amp;amp;quot;Fach Group Footer 1&amp;amp;quot; ziehen, und noch das Feld &amp;amp;quot;Summe&amp;amp;quot; für die Gesamtsumme. Dann tragen wir im Column Header Band noch die Spaltenüberschriften ein. Insgesamt sieht Berichtsentwurf dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten4_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten5_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fertig. Man könnte nun noch weitere Fachsemester-Intervalle einfügen, oder z.B. eine Summe der Studierenden in der Regelstudienzeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-34&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nach Feldern gruppieren wollen, die es in Ihrer Datenquelle gar nicht gibt (z.B. nach Aggregationen von Mekrmalskombinationen), dann können Sie auch Variablen mit speziellen Formeln anlegen, und diese dann in die Gruppierung aufnehmen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wichtig: Wenn die Gruppierungsvariable nicht im Summary Band genutzt wird, muss der resettype der Variable auf „None“ gesetzt werden. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Abschnitt zu [[Berichtsdesign_mit_JasperReports#Kreuztabellen mit virtuellen Dimensionen|Kreuztabellen]] wird z.B. gezeigt, wie die Fächer Mathe, Physik und Biologie in einen neuen Wert &amp;amp;quot;Naturwissenschaften&amp;amp;quot; transformiert werden.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variablen-und-gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-35&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Variablen und Gruppierung ===&lt;br /&gt;
&lt;br /&gt;
Beim Anlegen von Gruppen-Bändern und beim Ziehen von Feldern in das jew. Gruppenband legt JR automatisch eine Variable an, mit der jew. Aggregationsfunktion. Diese Variable hat folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Expression: das Feld, aus dem die Variable gespeist wird&lt;br /&gt;
&lt;br /&gt;
Calculation: Die Aggregatfunktion, z.B. &amp;amp;quot;sum&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reset Type: Die Gruppierungsebene&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Variable in Textfeldern des Gruppenbandes nutzen, gibt sie jeweils den richtigen Wert an, egal ob Gruppenkopf oder Fuß.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie aber mit &amp;amp;quot;Print-when-Expressions&amp;amp;quot; im Gruppenband arbeiten und auf die Variablen zugreifen, funktionieren diese standardmäßig nur im Gruppenfuß, weil erst am Ende der Gruppe der Wert bekannt ist. In diesem Fall müssen Sie der Variable auch eine &amp;amp;quot;Initial Value Expression&amp;amp;quot; mit dem jew. Feld geben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen-auf-gruppenebene&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-36&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen auf Gruppenebene ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf der Gruppenebene Berechnungen, z.B. Mittelwerte, durchführen wollen, gibt es einige Fallstricke: &lt;br /&gt;
&lt;br /&gt;
* Die in JR eingebauten Funktionen wie &amp;amp;quot;avg&amp;amp;quot; arbeiten auf Gruppenebene nicht immer exakt.&lt;br /&gt;
* Komplexere Formeln auf Gruppenebene in Variablen abzubilden und diese dann das Quelle für Textfelder zu nehmen hat bei uns nicht geklappt. &lt;br /&gt;
&lt;br /&gt;
Hier unser Vorgehen:&lt;br /&gt;
&lt;br /&gt;
* Definieren Sie auf der Ebene der jew. Gruppe eine Variable mit der Gesamtsumme, und eine mit der Summe der zu mittelnden Werte. Diese Variablen haben als &amp;amp;quot;reset Type&amp;amp;quot; die jew. Gruppierungsebene.&lt;br /&gt;
* Im Textfeld, das Sie ausgeben, verwenden Sie dann die Berechnungsformel, z.B. einen Quotienten. Verwenden Sie für die Berechnung nicht eine neue Variable, sondern fügen Sie die Formel direkt in das Textfeld ein.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel: Wir haben eine Absolventenliste pro Studiengang und Semester, darin werden dann Mittelwerte von Abschlussnoten gebildet. Die Datenquelle hat summierte Zeilen pro Note:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_daten.png]]&lt;br /&gt;
&lt;br /&gt;
Im obigen Beispiel haben wir in der Zeile 5 eine Absolventin mit der Note 1,1. In der letzten Zeile haben wir zwei Absolventinnen mit der Note 1,2.&lt;br /&gt;
&lt;br /&gt;
Würden wir den Notenschnitt manuell berechnen, müßten wir die Notensumme (Spalte H*K) ermitteln, hier wäre der Wert 32,3. Die Summe der Absolventen in Spalte K wäre 16, d.h. der Notenschnitt wäre 32,3/16 = 2,02.&lt;br /&gt;
&lt;br /&gt;
In JasperReports wäre der Entwurf wie folgt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir haben eine Variable &amp;amp;quot;Summe_1&amp;amp;quot; auf der Ebene des Semester-Bandes, die im obigen Excel der Summe der Spalte &amp;amp;quot;Summe&amp;amp;quot; entspricht. &lt;br /&gt;
&lt;br /&gt;
Außerdem haben wir eine Variable &amp;amp;quot;Notensumme&amp;amp;quot; mit der Formel $F{Note}*$F{Summe}, auf der Ebene der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Achten Sie drauf, dass Sie als Typ &amp;amp;quot;java.lang.Double&amp;amp;quot; nehmen, damit Sie keine Rundungsfehler bekommen.&lt;br /&gt;
&lt;br /&gt;
Der Quotient wird dann im Textfeld gebildet, das den Notenschnitt auf Semesterebene enthält, und auf zwei Nachkommastellen gerundet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld selbst muss bei &amp;amp;quot;Evaluation time&amp;amp;quot; den Wert &amp;amp;quot;Group&amp;amp;quot; haben, und bei &amp;amp;quot;Evaluation group&amp;amp;quot; dann den Wert der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Und hier das Ergebnis in der Vorschau:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_vorschau.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert 2,02 stimmt mit unserer manuellen Berechnung überein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;tabellengestaltung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-37&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Tabellengestaltung ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;summen-seitenzahlen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-38&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Summen, Seitenzahlen ===&lt;br /&gt;
&lt;br /&gt;
Um es noch ein wenig interessanter zu gestalten fügt man noch das Gehalt hinzu, summiert es für die Monate und gesamt. Dazu noch die Seitenanzahl und einen Seitenzähler und eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
Das Gehalt bekommt man, indem man das Gehalt aus den Feldern neben den Namen zieht. Das selbe macht man auch nochmal in das Band „Monat Group Footer 1“ und wählt hier die Aggregation „Sum“ aus, um die Summe zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Um einen Seitenzähler zu erhalten fügt man zunächst das Band „Page Footer“ hinzu und legt dort die Variable „PAGE_NUMBER“ ab. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Page_Number.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Eigenschaften“ → „Text field properties“ → „Evaluation Time“ wählt man hier „Now“ um die aktuelle Seitenanzahl zu bekommen und „Report“ um die gesamte Seitenanzahl zu erhalten. In dem Beispiel ist die Ausgabe z.B.: „Seite 2 von 6“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-steuern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-39&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche steuern ===&lt;br /&gt;
&lt;br /&gt;
Damit die drei Personen im Monat 2 nicht durch einen Seitenumbruch auseinandergerissen werden, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen (hier „Monat“) und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel im Designermodus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_1_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_2_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilen-alternierend-einfärben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-41&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilen alternierend einfärben ===&lt;br /&gt;
&lt;br /&gt;
Um nun bei mehreren Datensätzen auch noch den Überblick in den Zeilen zu behalten kann man jetzt auch noch den Hintergrund der Zeile abwechselnd farbig gestalten. Dazu Zieht man aus den „Reports Elements“ das „Rectangle“ in das „Detail 1“ Band&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und passt es der Größe des Bandes an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Hintergrundfarbe kann man nun in den Eigenschaften in „Backcolor“ ändern. Damit dies nun nicht in jeder Zeile erscheint, sondern abwechselnd, fügt man noch in den Eigenschaften in „Print When Expression“ den Wert &amp;lt;span id=&amp;quot;anchor-42&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-43&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Boolean.valueOf( $V{PAGE_COUNT}.intValue() % 2 == 0 ) ein. &lt;br /&gt;
&lt;br /&gt;
Zur erläuterung:&lt;br /&gt;
&lt;br /&gt;
Die Variable „PAGE_COUNT“ zählt die Anzahl der Datensätze hoch. Mit „% 2“ wird diese Variable durch 2 geteilt und nur der Restwert ausgegeben. Als Ergebnis erhält man also in jeder ungeraden Zeile eine 1. Dieses Ergebnis wird nun mit der „0“ verglichen. Wenn dieser Ausdruck/Vergleich (expression) wahr ist, wird das Objekt, in diesem Fall der Hintergrund, angezeigt. Bei diesem Ausdruck erhält also jede gerade Zeile den Hintergrund. Möchte man lieber die ungeraden Zeilen hervorheben, schreibt man einfach eine 1 anstelle der 0 hinter „==“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis bei einer ungeraden Hervorhebung sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel welches bereits in der Uni Mannheim benutzt wird ist die Ausgabe einer Rechnungslegungsliste. Das Beispiel zeigt nicht nur ein aufwändigeres Layout, sondern auch, wie man gruppierte Tabellen anlegt: Dabei sind die Zeilen der Tabelle im Detail 1 Band, und die Zwischensummen in den Gruppierungs-Bändern. Die Spaltenüberschriften der Tabelle befinden sich im untersten Group-Header-Band. Im Designermodus sieht das ganze folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rahmenlinien-vorausschauend-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-44&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rahmenlinien &#039;&#039;&#039;vorausschauend setzen&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Sowohl bei Text- als auch bei Static-Fields findet sich ein eigener Reiter zum setzen von Rahmeneigenschaften. Dort wird der Abstand des Inhaltes zum Rahmen des jeweiligen Feldes definiert, sowie Rahmenlinien gesetzt.&lt;br /&gt;
&lt;br /&gt;
Beim Setzen von Rahmenlinien wird empfohlen, dass bei nebeneinanderliegenden Feldern, welche durch eine Rahmenlinie getrennt werden, jeweils in beiden Feldern Rahmenlinien gesetzt werden und nicht nur in einem der beiden Felder. Denn beim Export in das PDF-Format ist ersichtlich ob nur eines der Felder oder beide Felder Rahmenlinien besitzen. Falls dies also nicht einheitlich umgesetzt wird, erscheinen Rahmenlinien an entsprechenden Stellen dünner beziehungsweise dicker (bei Excel-Dokumenten tritt dieser Effekt nicht auf):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_borders2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-45&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterberichte  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: In Edustore funktionieren Unterberichte nur, wenn der Dateiname der jrxml-Datei mit &amp;amp;quot;_xmlsource.jrxml&amp;amp;quot; endet. Dadurch wird dem Servlet mitgeteilt, dass die Datenquelle für den Bericht ein XML-Datenstrom ist. Dabei ist mit Performanceeinbußen zu rechnen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem muss beim Berichtsdesign die gleiche JasperReports Version genutzt werden wie im Server. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden eine Anleitung zur Erstellung eines Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-46&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Hauptberichts ===&lt;br /&gt;
&lt;br /&gt;
 Erzeugen Sie für den Unterbericht mit Hilfe des [[Berichtsdesign_mit_JasperReports#Template erzeugen|Template-Generators]] in Edustore einen leeren Bericht, und speichern Sie diesen am besten im gleichen Verzeichnis wie den Hauptbericht. &lt;br /&gt;
&lt;br /&gt;
 Ziehen Sie dann das Subreport-Werkzeug in den Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
Ggf.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport0_tool.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es startet der Subreport-Assistent. Hier geben Sie zunächst den Dateinamen oben an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt geben Sie eine Datenbank-Verbindung an. Hier wählen Sie &amp;amp;quot;Don&#039;t use any connection...&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden Parameter angezeigt, zu diesem Zeitpunkt gibt es aber noch keine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einfach auf &amp;amp;quot;Weiter&amp;amp;quot;. Sie werden dann aufgefordert, einen Dateipfad für den Unterbericht zu vergeben. IReport legt diesen standardmäßig in das gleiche Verzeichnis wie den Hauptbericht. Für Edustore sollten Sie dies auch tun.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass Sie beim Unterbericht nicht die *.jrxml-Datei verlinken, sondern die *.jasper-Datei, d.h. den kompilierten Report.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach sehen Sie einen Platzhalter für den Unterbericht im Entwurfsbereich. Beachten Sie bitte daß die Größe des Platzhalters unwichtig ist: die Ausdehnung des Unterberichts wird im Unterbericht definiert. Der Platzhalter ist lediglich wichtig, um die linke obere Ecke des Unterberichts festzulegen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Rechts neben dem Platzhalter sehen Sie die Eigenschaften des Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_none.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Unterbericht arbeitet meist mit Übergabe von Parametern, z.B. will man vom Hauptbericht den Inhalts des Feldes &amp;amp;quot;Kostenstelle&amp;amp;quot; an den Unterbericht übergeben. Dies müssen wir in den Eigenschaften des Unterberichts &amp;amp;quot;deklarieren&amp;amp;quot;. In der Zeile &amp;amp;quot;Parameters&amp;amp;quot; steht nach Bedienung des Assistenten noch kein Wert. Für die Datenquelle XML gibt es außerdem einen Parameter &amp;lt;span id=&amp;quot;anchor-47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_DATA_DOCUMENT, der immer übergeben werden muss: Die XML-Datenquelle des Hauptberichts. Hier eine Übersicht, welche Parameter übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport10_parameters.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Zeilen mit Großschreibung sind die vorgegebenen Werte, der Parameter &amp;amp;quot;Kst&amp;amp;quot; speist sich aus dem JR-Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;. Das Beispiel zeigt, daß der Name für den Parameter beliebig ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis für Unterberichte mit Dezimalzahlen&#039;&#039;&#039;: Wenn der Unterbericht mit Zahlen mit Nachkommastellen arbeitet, und Sie in JasperReports testen, dann müssen Sie noch die [[Berichtsdesign_mit_JasperReports#Datenquelle erzeugen|Parameter]] &amp;lt;span id=&amp;quot;anchor-48&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_LOCALE und &amp;lt;span id=&amp;quot;anchor-49&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_NUMBER_PATTERN wie folgt übergeben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_number.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterbericht-mit-header-und-footer-vom-hauptbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-50&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterbericht mit Header und Footer vom Hauptbericht ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Unterbericht in einem normalen Gruppen- oder Detail-Band liegt, wird der Header und Footer vom Hauptbericht automatisch mitbenutzt. In vielen Fällen möchte man aber den Unterbericht nur ein mal ausgeben und legt ihn daher in das Summery-Band. Hier wird Standardmäßig der Header und Footer nicht ausgegeben oder wiederholt. Möchte man aber z.B. die Seitenzahl die im Footer liegt weiterhin angezeigt bekommen, gibt es eine Eigenschaft vom Hauptbericht, die man nur aktivieren braucht. Diese Eingenschaft nennt sich: Summary with Page Header and Footer.&lt;br /&gt;
&lt;br /&gt;
Also einfach auf den Hauptbericht auswählen und in Eigenschaften diesen Punkt aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport_header_footer.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-unterberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-51&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Unterberichts ===&lt;br /&gt;
&lt;br /&gt;
Nun können wir den Unterbericht öffnen, indem wir über dem Platzhalter die rechte Maustaste betätigen und &amp;amp;quot;Open Subreport&amp;amp;quot; wählen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport3_open.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es erscheint ein neues Fenster mit einem leeren Entwurfsbereich. Sie könnten nun loslegen und im Detailbereich verschiedene Elemente gestaltet. Aber man muss bedenken daß ein Unterbericht für jeden Datensatz im Hauptbericht ausgeführt und eingebettet wird. Daher wird man vermutlich in den meisten Fällen im Unterbericht auf einen Filter zurückgreifen. Hier kommt dann wieder der oben genannte Parameter, z.B. &amp;amp;quot;Kst&amp;amp;quot; ins Spiel: Als ersten deklarieren wir den Parameter im Unterbericht, indem wir Links bei den Parametern die rechte Maustaste drücken, und &amp;amp;quot;Hinzufügen...&amp;amp;quot; wählen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nennt IReport den Parameter &amp;amp;quot;parameter1&amp;amp;quot;. Rechts können wir in den Eigenschaften des Parameters den Namen ändern, und &amp;amp;quot;Use as a prompt&amp;amp;quot; abwählen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Änderungen sind nicht notwendig.&lt;br /&gt;
&lt;br /&gt;
Wir ergänzen nun die &amp;amp;quot;Report Query&amp;amp;quot; [[Datei:JasperReports-Handbuch_report_query.png]] des Unterberichts von&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ergebnisse/ergebnis/ergebniselement/sqlerg/row&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
um einen Filter, der mit der Abfragesprache XPATH formuliert wird. Im obigen Beispiel würden wir jetzt nur die Zeilen der Datenquelle auswählen, wo die Nummer der Kostenstelle mit der des Hauptberichts übereinstimmt. Wir erinnern uns: letztere steht im Parameter &amp;amp;quot;Kst&amp;amp;quot;. Anhand der vorhandenen Report Query können wir sehen, dass die Kostenstelle in den Spalten (&amp;amp;quot;col&amp;amp;quot;) mit der id=5 steht. Der Ausdruck wird also um den Filter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[col[@id=&amp;quot;5&amp;quot;]/wert=&#039;$P{Kst}&#039;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ergänzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Nun ändern wir im Entwurfsbereich des Unterberichts das Layout: für das aktuelle Beispiel wollen wir im Unterbericht eine Summe der Beträge für jede Kostenstelle ausgeben. Dazu müssen wir zunächst eine Gruppierung nach Kostenstelle hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Gruppierungsassistenten wählen wir das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot; als Gruppierungsmerkmal, und im nächsten Schritt sagen wir, daß ein Gruppenkopf hinzugefügt werden soll:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist die Gruppierung als Band verfügbar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In die Gruppierung ziehen wir dann das Feld &amp;amp;quot;Summe&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim &amp;amp;quot;Loslassen&amp;amp;quot; des Feldes werden wir gefragt, ob wir eine Aggregatfunktion nutzen wollen; wir wählen hier die Summierung:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist das Feld verfügbar. Wir setzen noch das Label &amp;amp;quot;Summe:&amp;amp;quot; davor. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Den Detailbereich brauchen wir eigentlich nicht, wir können den ganz schmal machen. Danach speichern wir den Unterbericht, und gehen wieder zum Hauptbericht. Hier setzen wir den Unterbericht direkt unter das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport15_align.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Bericht mit der jew. Datenquelle ausführen. Das Ergebnis läßt je nach Datenmenge ein bisschen auf sich warten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport20_erg.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einhängen-des-berichts-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-53&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einhängen des Berichts in Edustore ===&lt;br /&gt;
&lt;br /&gt;
Damit der Bericht auch im Server nutzbar ist, muss noch folgendes eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
* Der Server sollte ausreichend RAM haben (Variable CATALINA_OPTS), weil hier XML als Datenquelle verarbeitet wird.&lt;br /&gt;
* Im Hauptbericht gibt es einen neuen Parameter SUBREPORT_DIR. Setzen Sie hier den Defaultwert (&amp;amp;quot;Default value Expression&amp;amp;quot; auf den Pfad, in dem die Dateien liegen (z.B. &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-54&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-55&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/home/superx/webserver/tomcat/webapps/superx/WEB-INF/reports/&amp;amp;quot;).&lt;br /&gt;
* Kopieren Sie die .jasper Datei des Unterberichts in dieses Verzeichnis. &lt;br /&gt;
* Bei Nutzung von Versionskontrollsystemen haben Sie die *.jasper-Dateien vermutlich ignoriert (gitignore / svnignore). Sie müssen die Dateien daher mit &amp;amp;quot;-f&amp;amp;quot; adden / committen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorsicht beim Einsatz von JasperSoft Studio: Die Anwendung erzeugt bei der Einzelbearbeitung eines Unterberichts nicht automatisch eine entsprechende .jasper-Datei beim Previewen des Hauptberichts (iReport machte das). Man muss also in Jaspersoft Studio im Bearbeitungsfenster oben immer &amp;amp;quot;Compile Report&amp;amp;quot; anklicken, um eine neue .jasper Datei zu erzeugen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-56&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedienung-des-assistenten-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-57&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedienung des Assistenten für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Für die Erstellung von Kreuztabellen gibt es einen eigenen Assistenten. Vorab sollte man aber zunächst ein &amp;amp;quot;Summary&amp;amp;quot;-Band erzeugen. Im folgenden Beispiel haben wir alle anderen Gruppierungen und Detail-Bands entfernt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir das Crosstab-Element in den Summary Band. Es erscheint der Assistent. Als Datenquelle nutzen wir die Abfrage des Berichts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als nächsten definieren wir die Zeilendimension des Berichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen z.B. die Abschlüsse. Danach definieren wir die Spalten-Dimension:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;. Danach definieren wir das Merkmal, das in den Zellen ausgegeben werden soll. Dies ist die Summe der Studierenden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluß kann man ein Layout festlegen, und Zeilen- und Spaltensummen erzeugen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich erscheint ein neues Fenster mit der Kreuztabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können wir nun Spaltenbreiten und Überschriften ändern:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab9.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab8.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nachbearbeitung-des-kreuztabellen-assistenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-58&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nachbearbeitung des Kreuztabellen-Assistenten ===&lt;br /&gt;
&lt;br /&gt;
Der Assistent liefert nur einfache Kreuztabellen, ggf. wollen Sie diese im Nachhinein anpassen. Sie können z.B. mehr als zweistufige Hierarchien in Kreuztabellen einrichten, indem Sie im Report Inspector manuell neue Merkmale anlegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_new_row.png]]&lt;br /&gt;
&lt;br /&gt;
Auch bei &amp;amp;quot;Measures&amp;amp;quot; können Sie neue &amp;amp;quot;abhängige Variablen&amp;amp;quot; anlegen, z.B. wenn Sie in einer Tabelle mit den Zeilen &amp;amp;quot;Ausgaben&amp;amp;quot; und &amp;amp;quot;Einnahmen&amp;amp;quot; die Ausgaben mit negativem Vorzeichen versehen wollen und dann saldieren wollen: Sie würden ein neues &amp;amp;quot;Measure&amp;amp;quot; anlegen, mit der Calculation=&amp;amp;quot;Sum&amp;amp;quot;, Typ &amp;amp;quot;java.lang.Float&amp;amp;quot;, und der folgenden Expression bekommen alle Ausgaben ein negat. Vorzeichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
($F{Kostenart}==&amp;quot;Ausgaben&amp;quot;)?-$F{Betrag}:$F{Betrag}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das neue Measure können Sie dann in die Zeilen- oder Spaltensummen ziehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-im-gruppenfuß&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-59&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen im Gruppenfuß ===&lt;br /&gt;
&lt;br /&gt;
Kreuztabellen lassen sich nicht nur im Summary Band nutzen, sondern auch in Gruppenfuß/Gruppenkopf-Bändern. Wenn Sie die Kreuztabelle z.B. in einen Groupfooter legen, müssen Sie den &amp;amp;quot;Reset type“ der Gruppe anpassen. Das machen Sie indem Sie ein rechts klick auf die Kreuztabelle machen und dann auf &amp;amp;quot;Crosstab data&amp;amp;quot; klicken. Dort stellen Sie den &amp;amp;quot;Reset type&amp;amp;quot; auf &amp;amp;quot;Group&amp;amp;quot; und die &amp;amp;quot;Reset group&amp;amp;quot; auf die Gruppe in der die Kreuztabelle gelegt wurde. Wenn Sie das nicht machen funktioniert der Report nicht! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-60&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Sie können auch virtuelle Dimensionen in Kreuztabellen nutzen, indem Sie ähnlich wie bei der [[Berichtsdesign_mit_JasperReports#Gruppierung ohne eigenes Band|Gruppierung ohne eigenes Band]] mit Variablen arbeiten. &lt;br /&gt;
&lt;br /&gt;
Um z.B. alle Studienfächer im Feld &amp;amp;quot;1. Fach&amp;amp;quot; auszugeben, und nur die Fächer Mathematik, Physik und Biologie zu einem Fach &amp;amp;quot;Naturwissenschaften&amp;amp;quot; zusammenzufassen, legen Sie eine neue Variable &amp;amp;quot;fachgruppe&amp;amp;quot; an, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell.png]]&lt;br /&gt;
&lt;br /&gt;
In der Kreuztabelle können Sie nun z.B. in den Zeilen die Variable &amp;amp;quot;fachgruppe&amp;amp;quot; auswählen, und erhalten eine Tabelle mit der &amp;amp;quot;künstlichen&amp;amp;quot; Zeile &amp;amp;quot;Naturwissenschaften&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-in-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-61&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung in Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Zeilen- oder Spaltendimensionen werden in Kreuztabellen immer alphabetisch sortiert, egal wie die Sortierung in der Datenquelle ist. Das ist in der Regel kein Problem, aber wenn z.B. eine Zeilendimension anders sortiert werden soll, geht das nicht ohne weiteres. Hier ein Problembeispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_falsch.png]]&lt;br /&gt;
&lt;br /&gt;
Das Balkendiagramm übernimmt die Sortierung nach dem Schlüssel der Gehaltsgruppe aus der Datenquelle. In der Kreuztabelle wird die Zeilendimension &amp;amp;quot;Bezeichnung der Gehaltsgruppe&amp;amp;quot; angezeigt, und diese sortiert alphabetisch, was an dieser Stelle aber unsinnig ist: Der Eintrag &amp;amp;quot;Kein Einkommen&amp;amp;quot; sollte ganz oben stehen.&lt;br /&gt;
&lt;br /&gt;
Wir schauen uns zunächst die Definition der Kreuztabelle an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Zeilendimension sortiert aufsteigend nach Bezeichnungstext. Man kann auch keine alternative Expression als Sortierkriterium angeben. Wir müssen also einen Trick anwenden: wir nehmen den Sortierschlüssel mit in die &amp;amp;quot;Bucket Expression&amp;amp;quot; der Zeilendimension auf, und setzen ihn als Präfix davor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach ist die Sortierung richtig:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig3.png]]&lt;br /&gt;
&lt;br /&gt;
Aber optisch ist das natürlich unschön, der Sortierschlüssel sollte am besten gar nicht angezeigt werden. Wir lösen das, indem wir den Anzeigetext wiederum so abwandeln, dass der erste Buchstabe nicht sichtbar ist. Java bietet dazu die Funktion &amp;amp;quot;substring()&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig4.png]]&lt;br /&gt;
&lt;br /&gt;
Und siehe da: die Sortierung und Anzeige ist perfekt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig5.png]]&lt;br /&gt;
&lt;br /&gt;
Dies ist nur ein Beispiel, wie man mit Hilfe von Java Expressions die Anzeige von Kreuztabellen variieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;parameter-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-62&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Parameter für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
In Kreuztabellen hat man keinen direkten Zugriff auf die Variablen und Felder des Hauptberichts. Man kann die Werte aber als Parameter übergeben. Dazu gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie machen den Parameter im Crosstab-Element bekannt, hier z.B. der Parameter &amp;amp;quot;RSZ&amp;amp;quot; für Regelstudienzeit):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach übergeben Sie den Parameter im Hauptbericht. Mit Rechtsklick auf das Cosstab Element können Sie eine Parameters-Map Expression hinterlegen, das ist einfach eine Zuweisung von einer oder mehreren Variablen zu jeweils einem Wert in der Groovy-Syntax mit &amp;amp;quot;[Variable:Wert,...]&amp;amp;quot;. In dem Beispiel unten weisen wir dem Parameter &amp;amp;quot;RSZ&amp;amp;quot; den Wert des Feldes &amp;amp;quot;RSZ&amp;amp;quot; zu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Parameter in der Kreuztabelle nutzen, z.B. um in einer Spaltenüberschrift nur dann eine Zahl mit Soll-Kreditpunkten anzuzeigen, wenn die Fachsemester innerhalb der Regelstudienzeit liegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param3.png]]&lt;br /&gt;
&lt;br /&gt;
Und hier das Ergebnis für einen Studiengang mit 6 Semestern Regelstudienzeit:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;manuelle-kreuztabelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-63&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Manuelle Kreuztabelle ===&lt;br /&gt;
&lt;br /&gt;
Wenn die gewünschte Konfiguration/Einstellungen in der Kreuztabelle nicht möglich ist, kann eine Kreuztabelle mit Einschränkungen auch selber erstellt werden. Im Beispiel mit Semestern, muss vorher abgeschätzt werden wie viele Semester vorraussichtlich in den Spalten vorkommen werden. Für jedes Semester (z.B. für 10 Semester) wird dann eine Variable angelegt. Die erste bekommt das höchste Semester (wie im Screenshot zu sehen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das zweite Semester wir dann das höchste welches aber unterhalb von dem ersten liegen soll, usw.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Semester können nun als Spalten verwendet werden mit der Option „blank when null“.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;layout-von-kreuztabellen-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-64&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Layout von Kreuztabellen bearbeiten  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt befasst sich mit Themen zur Layoutanpassung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;total-einer-row-group-entfernen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-65&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Total einer ‚Row Group‘ entfernen ====&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue ‚Row Group‘ angelegt wird, wird automatisch ein dazugehöriges Total-Feld erzeugt und mit eingefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_001.png|642x367px]]&lt;br /&gt;
&lt;br /&gt;
Das ist in diesem Falle nicht erwünscht. Um dieses Feld zu entfernen, wird in den &amp;lt;span id=&amp;quot;anchor-66&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-67&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Properties der &amp;lt;span id=&amp;quot;anchor-68&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Row Group‘ die ‚Total Position‘ = ‚none’ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_002.png|642x263px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;header-von-row-groups-für-jede-zeile-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-69&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Header von ‚Row Groups‘ für jede Zeile wiederholen ====&lt;br /&gt;
&lt;br /&gt;
Im folgenden Screenshot ist eine Kreuztabelle dargestellt, bei welcher die Header der ‚Row Groups‘ nur einmal dargestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_003.png|434x315px]]&lt;br /&gt;
&lt;br /&gt;
Zwar ließe sich das Feld noch, so dass es bis zum nächsten ‚Row Header‘ reicht, aber in diesem Beispiel ist erwünscht, dass sich der Header für jede Zeile wiederholt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_004.png|530x420px]]&lt;br /&gt;
&lt;br /&gt;
Dazu wird die Funktion ‚Merge Header Cells‘ in den Properties der ‚Row Group‘ deaktiviert. Es kann sein, dass die Funktion einmal aktiviert und dann wieder deaktiviert werden muss, damit sie als deaktiviert erkannt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_005.png|642x275px]]&lt;br /&gt;
&lt;br /&gt;
Damit der Text in der ersten Spalte nicht abgeschnitten wird, wurde ‚Stretch with Overflow‘ in den Text-Field-Properties ausgewählt. Dadurch ist eine Lücke bei den anderen Spalten entstanden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_006.png|509x404px]]&lt;br /&gt;
&lt;br /&gt;
Um diese Lücke zu schließen wird der ‚Stretch Type‘ in allen folgend eingerahmten Textfeldern auf ‚Relative To Band Height (deprecated)‘ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_007.png|642x322px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;static-field-und-text-field-frei-gestaltenbewegen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-70&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Static Field‘ &amp;lt;span id=&amp;quot;anchor-71&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;und ‚Text Field‘ frei gestalten/bewegen ====&lt;br /&gt;
&lt;br /&gt;
Im Default sind ‚Static Field‘ und ‚Text Field‘ in einer Kreuztabelle nicht frei positionierbar/gestaltbar. Um das zu ändern, wird im jeweiligen Bereich das Layout auf ‚Free Layout‘ eingestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_008.png|642x279px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reihenfolge-der-row-groups-ändern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-72&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reihenfolge der ‚Row Groups‘ ändern ====&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der ‚Row Groups‘ muss nachträglich im ‚Outline‘-Bereich geändert werden. Dies erfolgt per Drag and Drop im rot markierten Bereich:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_009.png|642x437px]]&lt;br /&gt;
&lt;br /&gt;
Die Textfelder im Design-Bereich zu verschieben, reicht nicht aus, denn die ‚Row Group‘ selbst bleibt wo sie ist und dann würde nur das Textfeld in eine andere Row Group verschoben. Im folgenden Negativbeispiel wurden nachträglich im Design-Bereich die Textfelder Intervall und Datenherkunft vertauscht. Dadurch sind sie in der jeweils falschen ‚Row Group‘ gelandet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_010.png|642x387px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-73&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme ==&lt;br /&gt;
&lt;br /&gt;
Um einen Bericht ansprechend zu gestalten dürfen Diagramme wie Torten- oder Balkendiagramme nicht fehlen. Diese in einen Bericht einzubringen ist auch nicht schwer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorab sei aber darauf hingewiesen: Grafiken in JasperReports arbeiten nicht analog zu Kreuztabellen, in denen Daten nach Zeilen- oder Spaltenmerkmalen automatisch gruppiert und summiert werden. Für Grafiken sollten Sie gewährleisten, dass die Datenbasis für die Grafik &#039;&#039;&#039;bereits gruppiert und summiert&#039;&#039;&#039; sind, Sie können also keine Einzeldaten für Grafiken verwenden. Bei Datenblatt-Berichten in Edustore ist dies gewährleistet, wenn Sie im Feld &amp;amp;quot;Felder&amp;amp;quot; nur die Felder selektieren, nach denen in der Grafik gruppiert werden soll. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-74&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme ===&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben eine Tabelle, die die Studierendenzahl mehrerer Semester nach Geschlecht aufführt. Hier ein Screenshot der Datengrundlage:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Tabelle enthält die Merkmale Geschlecht, Semester und Summe. Daraus erzeugen wir in Jaspersoft Studio (und weiter unten in iReport) ein Balkendiagramm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-75&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Zunächst definieren wir die Sortierung der Daten. Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie den Reiter &amp;amp;quot;Sorting&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query2.png]]&lt;br /&gt;
&lt;br /&gt;
Damit die Grafik richtig funktioniert müssen wir nach beiden Merkmalen (Semester und Geschlecht) sortieren. Das Semester sollte nicht alphabetisch nach Namen sortiert sein, sondern nach dem Zahlenschlüssel. Sonst ständen alle Wintersemester untereinander, und davor alle Sommersemester.&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir aus der Palette das Chart Element in das Summary Band. Es startet automatisch ein &amp;amp;quot;Chart Wizward&amp;amp;quot;. Hier wählen wir &amp;amp;quot;Stacked Bar&amp;amp;quot; als Grafiktypen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun müssen wir ihm sagen welches Feld die Y-Achse darstellt (hier &amp;amp;quot;Summe&amp;amp;quot;), und welches die X-Achse (hier &amp;amp;quot;Semester der Belegung&amp;amp;quot;). Das Merkmal zur Unterscheidung der Balkenfarben (&amp;amp;quot;Series&amp;amp;quot;) ist das Geschlecht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach klicken wir auf &amp;amp;quot;Finish&amp;amp;quot;, und die Grafik wird als Platzhalter im Summary Band eingefügt. Dort definieren wir noch die Breite der Grafik:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Entwurf fertiggestellt. So sieht die Grafik aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
Es ist etwas ungünstig dass die Labels der X-Achse nicht ganz lesbar sind. Wir lösen dies mit Rotation der Labels um 45 Grad:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht es besser aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard5.png]]&lt;br /&gt;
&lt;br /&gt;
Das Beispiel lädt zur weiteren Verfeinerung an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-76&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in iReport ====&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht in iReports &amp;amp;quot;Refresh Preview Data&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Spalten der Tabelle sind selbsterklärend. Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Wir wählen hier das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart3.png]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der X-Achse (in JasperReports heißt das &amp;amp;quot;Category Axis&amp;amp;quot;) nehmen wie das Merkmal Semester, und bei der &amp;amp;quot;Value expression&amp;amp;quot; die Summe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist die Definition beendet. Wir können dann in den Eigenschaften der Grafik noch eine &amp;amp;quot;Title Expression&amp;amp;quot; festlegen, z.B. &amp;amp;quot;Studierende nach Semester und Geschlecht&amp;amp;quot;. In der Vorschau sieht die Grafik so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Wintersemester werden noch nicht abgedruckt, dazu ändern wie die &amp;amp;quot;Label rotation&amp;amp;quot; auf 30°. Dies lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wichtig für die Grafik war die Sortierung in der Datenquelle nach &amp;amp;quot;dim_semester.quell_id&amp;amp;quot;. Mit &amp;amp;quot;Series Colors&amp;amp;quot; kann man die Farbe der Balken ändern etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn sie jeden Balken bzw. Teil des Balkens zusätzlich mit den Werten ausgeben wollen, müssen sie in den Chart-Eigenschaften unter den &amp;amp;quot;Bar*Properties&amp;amp;quot; das Ankreuzfeld &amp;amp;quot;Show labels&amp;amp;quot; ankreuzen. Wenn es bereits angekreuzt ist, sollten Sie das Kreuz einmal entfernen und wieder setzen (Bug in iReport seit Version 4.x)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-nach-tabelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-77&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme nach Tabelle ausgeben ===&lt;br /&gt;
&lt;br /&gt;
Üblicherweise ähnelt ein Diagramm in JasperReports einer Kreuztabelle. Wenn nun ein Diagramm nach Vorgabe einer Tabelle ausgegeben werden soll, muss ein wenig getrickst werden. &lt;br /&gt;
&lt;br /&gt;
Erläuterung:&lt;br /&gt;
&lt;br /&gt;
In der Series expression werden die Zeilen angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Category expression werden die Spalten angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Value expression wird der Wert angegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um ein Diagramm nun zu erstellen muss pro Series + Category eine Categorie series angelegt werden und das entsprechende Feld angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-mit-berechneten-werten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-78&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme mit berechneten Werten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die einem Diagramm zugrunde liegende Tabelle noch Berechnungen erfordert, muss man mit Variablen arbeiten. Als Beispiel wird hier die Maske &amp;amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;amp;quot; benutzt. Das Ergebnis wird eine Tabelle mit Balkendiagramm der &amp;amp;quot;Studierende und Studienanfänger im 1. Fachsemester (Zeitreihe)&amp;amp;quot; sein.&lt;br /&gt;
&lt;br /&gt;
Ein bereits fertiges Datenblatt könnte folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_datenblatt_ohne_grafik.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier fehlt jetzt die Grafik, die in dem noch leeren Band &amp;amp;quot;Summary&amp;amp;quot; eingefügt werden soll. Wenn das Band noch nicht eingefügt wurde, einfach mit Rechtsklick auf Summary (im &amp;amp;quot;Report Inspector&amp;amp;quot;) und dann auf &amp;amp;quot;Add Band&amp;amp;quot; um es anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_how_to_add_summary.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Da es in diesem Beispiel dafür keine Variable gibt, wird später noch per Hand eine Weitere hinzugefügt. Wenn es bei Ihnen möglich ist, klicken Sie rechts neben dem Feld auf den Button und fügen dort eine Variable ein. In diesem Beispiel wird als fester String &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-79&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Frauen im 1. FS&amp;amp;quot; eingegeben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_series_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und dann wieder auf &amp;amp;quot;Weiter&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Auf der X-Achse soll in diesem Beispiel die Semester erscheinen und auf der Y-Achse die Anzahl der Weiblichen Studierenden im 1. Fachsemester. Um dies zu erhalten wählt man als &amp;amp;quot;category expression&amp;amp;quot; die Variable &amp;amp;quot;Semester&amp;amp;quot; aus. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies geschieht, indem man auf den Button rechts neben dem Feld klickt, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dann doppelt auf das Feld &amp;amp;quot;Semester&amp;amp;quot; klickt und dann auf &amp;amp;quot;Apply&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In den meisten Fällen werden hier Felder benutzt. Wenn Sie jedoch z.B. eine Variable benutzen wollen, müssen Sie nach dem Klick rechts auf den Button in dem neuen Fenster links unten z.B. auf &amp;amp;quot;Variables&amp;amp;quot; oder &amp;amp;quot;Parameter&amp;amp;quot; klicken. Dabei ändert sich der Inhalt von dem mittleren Feld. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können Sie nun auch eine andere Auswahl treffen.&lt;br /&gt;
&lt;br /&gt;
Das selbe gilt auch für &amp;amp;quot;value expression&amp;amp;quot;. Der Unterschied ist hierbei, die &amp;amp;quot;category expression&amp;amp;quot; ist die Bezeichnung und in &amp;amp;quot;value expression&amp;amp;quot; dürfen nur Zahlen vorkommen, welche von JasperReports addiert werden können. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wählen wir nun z.B. das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun noch abschließend auf Beenden drücken und wir erhalten das erste Ergebnis. Über &amp;amp;quot;Preview&amp;amp;quot; wird nun das Diagramm mit den Frauen aus dem 1. Fachsemester über die Semester angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_erstes_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um nun die männlichen Studenten aus dem 1. FS noch hinzuzufügen oder Änderungen an der gerade getroffenen Auswahl vorzunehmen klickt man mit der rechten Maustaste auf die Chart und dann auf &amp;amp;quot;Chart Data&amp;amp;quot;. In dem Reiter &amp;amp;quot;Details&amp;amp;quot; kann man nun die eben angelegte Category bearbeiten/entfernen oder auch eine neue anlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_details.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wollen wir jetzt noch die männlichen Studierende aus dem 1. FS noch Hinzufügen. Also klickt man auf &amp;amp;quot;Hinzufügen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Eingabe funktioniert hier genau wie in dem Assistenten bei der Erstellung einer neuen Chart. Nur taucht jetzt das Problem auf, dass es kein Feld mit den Männlichen Studierenden gibt, sondern nur gesamt. Die Lösung ist aber ganz einfach. Zunächst geht man wieder in den &amp;amp;quot;Expression editor&amp;amp;quot; der &amp;amp;quot;Value expression&amp;amp;quot; und wählt das Feld &amp;amp;quot;1. FS gesamt&amp;amp;quot; aus, setzt dahinter ein Minuszeichen und danach wählt man noch das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus. Jasper berechnet dann jeweils das Ergebnis und benutzt dieses als Value. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun erhalten wir als Ergebnis folgende Tabelle:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt noch viele Änderungsmöglichkeiten unter Einstellungen wie z.B. &amp;amp;quot;Label rotation&amp;amp;quot; lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind und &amp;amp;quot;Series Colors&amp;amp;quot; um die Farbe der Balken zu ändern. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;chart-customizer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-80&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Chart Customizer ===&lt;br /&gt;
&lt;br /&gt;
Mit JasperSoft Studio können die über sog. &amp;amp;quot;Chart Customizer&amp;amp;quot; Details bzgl. des Layouts vor Diagrammen steuern. Im folgenden ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
Wir haben ein einfaches Balkendiagramm, in dem wir eine (automatisch) ermittelte Y-Achse mit Werten von 0-15 haben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir den Bereich auf 12 (in 2er-Schritten ändern). Man könnte dies ganz leicht über die Eigenschaften ändern:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man aber nicht die Schrittweite ändern. Wir legen dazu einen Chart Customizer vom Typ &amp;amp;quot;Value Axis Range and Tick&amp;amp;quot; an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und damit sieht das Diagramm so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Y-Achse zählt nun in 2er Schritten von 0 bis 12.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch ein Hinweis: Bei Y-Achsen mit kleinen Wertebereichen kann es vorkommen, dass JR die Y-Achse automatisch mit Intervallen mit Nachkommastellen versieht, also z.B. 1 - &amp;lt;span id=&amp;quot;anchor-81&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;1,5 - 2 - 2,5 etc. Bei manchen Maßen macht die Nachkommastelle keinen Sinn (z.B. wenn Studierende gezählt werden). Um das zu ändern gehen Sie in der Eigenschaften der Y-Achse (Chart → Value axis) und setzen bei der Eigenschaft &amp;amp;quot;Value axis tick label mask&amp;amp;quot; den Wert &amp;amp;quot;#&amp;amp;quot; (Pattern für ganzzahlig) ein. Damit wird nur noch ganzahlig hochgezählt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;balken-labels&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-82&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Balken Labels ===&lt;br /&gt;
&lt;br /&gt;
In Balkendiagrammen können die exakten Zahlen nicht genau ermittelt werden. Aus diesem Grund wird oft gewünscht, die Zahlen noch mal schriftlich darzustellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_balken_labels_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Zahlen anzeigen zu lassen muss einfach in den Chart Properties unter Advanced „Common Chart Properties → Plot → Show Labels“ auf true gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-83&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklets ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-84&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ab JR 6.2 oder höher (d.h. SuperX-Kernmodul 4.8 oder HISinOne-BI 2018.12) gibt es die Möglichkeit, Berichts-&amp;amp;quot;Bücher&amp;amp;quot; mit Deckblatt, Inhaltsverzeichnis und Schlußseite zu erstellen. Die Erstellung ist übersichtlicher als eine Kombination aus Haupt- und Unterbericht, und bietet beim Seitenlayout mehr Optionen, z.B. kann man in einem Booklet Hoch- und Querformat kombinieren.&lt;br /&gt;
&lt;br /&gt;
Englische Anleitungen siehe &lt;br /&gt;
&lt;br /&gt;
https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/report-books&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wg. der Version ist diese Möglichkeit in iReport nicht mehr verfügbar, Sie müssen JasperSoft Studio nutzen. Wenn Sie dort mit File -&amp;amp;gt; New einen neuen Report erzeugen, können Sie bei Report type den Wert &amp;amp;quot;Book report&amp;amp;quot; wählen. Der Assistent fragt Sie dann, ob Sie Deckblatt, Inhaltsverzeichnis und die Schlußseite benötigen, kreuzen Sie die jew. Position an. Sie erhalten danach ein Entwurfsfenster mit dem Hauptbericht, der drei Abschnitte enthält: Das &amp;lt;span id=&amp;quot;anchor-85&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Deckblatt und Inhaltsverzeichnis (&amp;amp;quot;Cover and table of contents&amp;amp;quot;), den Buchinhalt (&amp;amp;quot;Content&amp;amp;quot;) und die Schlußseite (&amp;amp;quot;Backcover&amp;amp;quot;):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Datei speichern, werden die jew. Unter-Dateien automatisch mit angelegt, mit dem Zusatz &amp;lt;span id=&amp;quot;anchor-86&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;*_cover.jrxml&amp;amp;quot;, &amp;amp;quot;*_toc.jrxml&amp;amp;quot; und &amp;amp;quot;*_backcover.jrxml&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hauptbericht-im-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-87&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hauptbericht im Booklet ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;aufbau-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-88&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Aufbau des Hauptberichts ====&lt;br /&gt;
&lt;br /&gt;
Startpunkt beim Booklet ist der Hauptbericht. Dieser hat keine &amp;amp;quot;Bänder&amp;amp;quot; im Sinne einer Ergebnisausgabe, insbesondere gibt es kein Detailband. Trotzdem arbeitet der Hauptbericht mit einer Datenquelle im Sinne eines Detailbandes, hier heißt das Band &amp;amp;quot;Content&amp;amp;quot;. Für Makroberichte in SuperX-/BI müssen wir für alle Unterberichte dieselbe XML-Quelle verwenden, d.h. wir müssen im Hauptbericht genau eine Zeile der XML-Quelle filtern. Wir machen das mit XPATH mit dem Ausdruck&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ergebnisse/ergebnis[@ordnr=&#039;0&#039;]/ergebniselement/sqlerg/row[@no=&#039;0&#039;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies liefert die erste Zeile der ersten Tabelle des Makroberichts im Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie also oben auf die Datenquelle des Hauptberichts, und fügen Sie den Filter ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Funktion „Read Fields“ funktioniert in diesem Fall nicht. Die Felder für den Hauptbericht werden manuell in den Sourcecode eingefügt. Dazu erstellen Sie zunächst, wie in [[Berichtsdesign_mit_JasperReports#Makroberichte als Datenquelle für JasperReports|Abschnitt 4.5]] beschrieben, ein JR-Template für den Makrobericht. Aus diesem Template kopieren Sie aus dem Sourcecode die Felder und fügen diese im Booklet ein. Fügen Sie alle Felder sowohl im Haupt- als auch in den Unterberichten des Booklets ein.&lt;br /&gt;
&lt;br /&gt;
Im Content Band können Sie dann mit der rechten Maustaste die jew. Unterberichte verlinken. Die Technik ist identisch mit den normalen Haupt/-Unterberichten, nur dass das Seitenlayout nicht vom Hauptbericht zum Unterbericht vererbt wird. &lt;br /&gt;
&lt;br /&gt;
Im Beispiel haben wir einen Unterbericht verlinkt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;amp;quot;Component Expression&amp;amp;quot; geben Sie den Unterbericht an. Im Feld &amp;amp;quot;Tab name expression&amp;amp;quot; können Sie den Namen des TABs in Excel definieren. Standardmäßig wird bei einem Booklet beim Export nach Excel also ein Arbeitsblatt mit mehreren Sheets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht wird mit den gleichen Parametern aufgerufen wie bei klassischen [[Berichtsdesign_mit_JasperReports#Konfiguration des Hauptberichts|Unterberichten]]. Der erste Unterbericht bekommt die ordnr 0, der zweite Unterbericht die ordnr 1 usw.:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main4.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;übergabe-von-layouts-vom-hauptbericht-an-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-89&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Übergabe von Layouts vom Hauptbericht an Unterberichte ===&lt;br /&gt;
&lt;br /&gt;
Generell werden im Booklet keine Layoutvorgaben vom Hauptbericht an den jew. Unterbericht übergeben. Ausnahme: Die Property &amp;amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;amp;quot;, die beim Excel Export als Zahl formatierte Zellen auch in Excel als Zahl ausgibt, wird im Hauptbericht gesetzt und dann an die Unterberichte übergeben.&lt;br /&gt;
&lt;br /&gt;
Achtung: Je nach JasperSoft Studio Version kann man diese Property nicht in der graphischen Entwcklungsumgebung setzen, sondern nur im *.jrxml-Quellcode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-deckblatt&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-90&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Deckblatt ===&lt;br /&gt;
&lt;br /&gt;
Das Deckblatt ist ein normaler JasperReport mit Elementen im Titel-Band. Beachten Sie dass im Unterbericht auch Seitenränder und Seitenformate definiert sein müssen. Sie können auch vom Hauptbericht Parameter übergeben, hier z.B. das Semester:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover1.png]]&lt;br /&gt;
&lt;br /&gt;
 Im Hauptbericht wiederum wird dieser Parameter dann übergeben, hier z.B. aus der Legende der Maske:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-inhaltsverzeichnis&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-91&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Inhaltsverzeichnis ===&lt;br /&gt;
&lt;br /&gt;
Das Inhaltsverzeichnis ist ein Bericht ohne Datenquelle, und bekommt über die Evaluation Time=&amp;amp;quot;Report&amp;amp;quot; die Anweisung, die Inhaltsdokumente nach Lesezeichen (HTML-Anchors) zu durchsuchen. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist leer, und über die Property &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
net.sf.jasperreports.bookmarks.data.source.parameter=REPORT_DATA_SOURCE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wird als Datenquelle der Content angegeben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Berichtsdesign ist vom Assistenten vorgegeben und relativ einfach. Sie können bis zu drei Ebenen für das Inhaltsverzeichnis angeben, jede Ebene benötigt ein eigenes Detailband.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc2.png]]&lt;br /&gt;
&lt;br /&gt;
 Die Feldnamen im Bericht sollten nicht geändert werden. Sie können aber das Layout anpassen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-erster-detailbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-92&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet erster Detailbericht ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Detailbericht ist ein normaler Unterbericht, d.h. er hat den Parameter &amp;amp;quot;ordnr&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;amp;quot;ordnr&amp;amp;quot; wird dann bei der Datenquelle des Unterberichts ausgewertet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht soll sicherlich auch Seitenzahlen anzeigen, dazu fügen Sie noch ein &amp;amp;quot;Page footer&amp;amp;quot; Band hinzu, und erzeugen dort ein Textfeld mit dem Inhalt z.B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Seite &amp;quot;+$V{MASTER_CURRENT_PAGE}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Textfeld muss bei Evaluation time den Wert &amp;amp;quot;Master&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content3.png]]&lt;br /&gt;
&lt;br /&gt;
Danach wird die Seitenzahl jedes Unterberichts an den Hauptbericht angepaßt.&lt;br /&gt;
&lt;br /&gt;
Für das Inhaltsverzeichnis müssen Sie im jew. Detailbericht Lesezeichen (HTML-Anchors) und jeweils eine Ebene angeben. Wir können z.B. für das Textfeld der Überschrift einen Anker der Ebene 1 festlegen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach legen wir für das Gruppenband für das Textfeld mit dem Label der Gruppe (Fakultätsname) einen Anker der Ebene 2:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-fertige-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-93&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das fertige Booklet ===&lt;br /&gt;
&lt;br /&gt;
So sieht das Booklet im Preview im JasperSoft Studio aus: Zuerst das Deckblatt...&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
... und dann auf Seite 2 das Inhaltsverzeichnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und dann auf Seite 3 der erste Unterbericht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-94&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemeines-zu-schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-95&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemeines zu Schriften ===&lt;br /&gt;
&lt;br /&gt;
Für den Entwurf von Berichten ist es wichtig, daß die jew. Schriftart auch beim Server-System und beim Client verfügbar sind. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ein häufiger Fallstrick ist hier: unter Windows wird mit JasperReports entworfen, und dort z.B. die Schriftart &amp;amp;quot;Arial&amp;amp;quot; gewählt. Der Report soll auf dem Server unter Linux laufen, dort gibt es die Schriftart nicht. Resultat: der Bericht ist nicht kompilierbar. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Bei PDF-Dateien lassen sich Fonts ggf. auch in die Datei einbetten, bei Exportformaten wie OpenOffice oder Word ist dies nicht möglich. Sie sollten daher Schriftarten wählen, die auch beim Client mit größter Wahrscheinlichkeit installiert sind. Die sicherste Wahl ist es, Font-Familien anzugeben, z.B. &amp;amp;quot;Serif&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Im Zweifelsfall installieren Sie die Schriftart auf allen beteiligten Systemen. TrueType Fonts lassen sich in JasperReports importieren und nutzen, sie können sogar in PDF-Dateien standardmäßig eingebettet werden. Im folgenden wird die Schriftart &amp;amp;quot;Liberation Sans&amp;amp;quot; installiert, die man auf [https://fedorahosted.org/liberation-fonts/ https://fe][https://fedorahosted.org/liberation-fonts/ dorahosted.org/liberation-fonts/] herunterladen kann. Entpacken Sie das Download Paket in einem beliebigen Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-ireport-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-96&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-97&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in iReport einbinden ===&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn Sie iReport unter Windows nutzen, müssen Sie für die folgenden Schritte iReport als Admin starten:&lt;br /&gt;
&lt;br /&gt;
Im Menü &amp;amp;quot;Extras&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;Optionen&amp;amp;quot; können Sie den Font importieren:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wählen Sie aus der Dateiliste zunächst den &amp;amp;quot;Regular&amp;amp;quot;-Font aus, z.B. die Sans-Serif-Variante. &amp;lt;span id=&amp;quot;anchor-98&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im nächsten Schritt geben Sie dem Font einen Namen, und Sie wählen die zugehörigen Dateien für Fettdruck etc:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-99&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht, wenn Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des Formulars können Sie noch PDF-Exportoptionen wählen, z.B. ob die Schriftart in PDF-Dateien eingebunden werden soll. &amp;lt;span id=&amp;quot;anchor-100&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Achtung: beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-jaspersoft-studio-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-101&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in &#039;&#039;&#039;JasperSoft Studio&#039;&#039;&#039; einbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Window“ → „Preferences“ können Sie Fonts einbinden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach einem Klick auf „Add“ öffnet sich ein neues Fenster. Dort geben Sie dem Font einen Namen und wählen die zugehörige Datei für den normale Ausführung des Fonts. Es gibt weitere Reiter für Bold, Italic und Bold Italic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import5.png]]&lt;br /&gt;
&lt;br /&gt;
Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import6.png]]&lt;br /&gt;
&lt;br /&gt;
Achtung: Beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-schriftart-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-102&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default-Schriftart in iReport ===&lt;br /&gt;
&lt;br /&gt;
Sie können die Default Schriftart in iReport einstellen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_default_font.png]]&lt;br /&gt;
&lt;br /&gt;
Stellen Sie den Default-Font auf &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-103&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Liberation Sans&amp;amp;quot;. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fonts-auf-dem-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-104&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fonts auf dem Server  ===&lt;br /&gt;
&lt;br /&gt;
Um Schriftarten auf einen Tomcat-Server zu installieren, müssen die vier ttf-Dateien (normal, fett, kursiv, fett-kursiv) in den Ordner $JRE_HOME/lib/fonts kopiert werden. Für alle Java Anwendungen wie den Tomcat und JasperReports stehen dann die in dem verwendetem Java zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beispiel Arial unter Ubuntu 18.04:&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie mit dem Kommando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps fax | grep tomc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
welcher Tomcat läuft. Sie bekommen eine Ausgabe z.B. &lt;br /&gt;
&lt;br /&gt;
47769 ?       Sl   36:25 &amp;lt;span id=&amp;quot;anchor-106&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xmx3500M -XX:MaxPermSize=400m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -DSuperX-DB-PROPERTIES-SET=true -Djava.endorsed.dirs=/var/lib/tomcat8/endorsed -classpath /var/lib/tomcat8/bin/bootstrap.jar:/var/lib/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/var/lib/tomcat8 -Djava.io.tmpdir=/var/lib/tomcat8/temp org.apache.catalina.startup.Bootstrap start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Befehl zeigt den Pfad zu JRE_HOME, also &amp;lt;span id=&amp;quot;anchor-107&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64. Sie kopieren also die Dateien z.B. &lt;br /&gt;
&lt;br /&gt;
arial.ttf&lt;br /&gt;
&lt;br /&gt;
arialbd.ttf&lt;br /&gt;
&lt;br /&gt;
arialbi.ttf&lt;br /&gt;
&lt;br /&gt;
ariali.ttf&lt;br /&gt;
&lt;br /&gt;
von&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-arial_31bf3856ad364e35_6.1.7601.17514_none_d0a9759ec3fa9e2d\*.ttf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nach &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/usr/lib/jvm/java-8-openjdk-amd64/lib/fonts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und starten dann Tomcat neu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Sorgen Sie dafür dass Sie eine Lizenz für die jew. Fonts haben, weil diese bei PDF in die ausgelieferten Dateien eingebettet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;font-extension&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-108&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Font Extension ===&lt;br /&gt;
&lt;br /&gt;
Eine Alternative zu dem Einbinden der Schriftart über das Java Verzeichnise Font Extension. Diese hat aber nicht immer funktioniert. Um auf diesem Wege die Fonts auf einem Ziel-Server einzubinden, kann man die Schriftart als Font Extension exportieren, die dann wiederum in den CLASSPATH des Servers (bei Webanwendungen WEB-INF/lib) kopiert werden müssen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nutzen Sie dazu den obigen Button &amp;amp;quot;Export as extension&amp;amp;quot;, und wählen Sie einen Dateinamen mit der Endung &amp;amp;quot;.jar&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: Die Einbettung einer Font Extension in einer JasperReports-Laufzeitumgebung klappt erst mit JasperReports 3.7.2 oder höher. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Wenn Sie in iReport auch PDF als Vorschau wählen, erzeugt iReport im Verzeichnis der jrxml-Datei auch eine entsprechende PDF-Datei. Damit diese die Fonts enthält, müssen Sie auch in iReport im CLASSPATH die Font-Extension einbinden. In diesem Falle ist es vorteilhaft, die Endung &amp;amp;quot;.jar&amp;amp;quot; (nicht &amp;amp;quot;.zip&amp;amp;quot;) zu wählen, weil iReport hier nur jar-Dateien einbindet.&lt;br /&gt;
&lt;br /&gt;
Noch ein Hinweis zu den Attributen &amp;amp;quot;PDF Font name&amp;amp;quot; und &amp;amp;quot;PDF Encoding&amp;amp;quot;: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Attribute werden nicht mehr ausgewertet, wenn Sie mit Font Extensions arbeiten. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfield-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-109&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;TextField-Formatierung ==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt werden verschiedene Einstellungen und Möglichkeiten der Formatierung in TextFields vorgestellt und erläutert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ausgabe-von-null-als-string-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-110&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ausgabe von &#039;&#039;&#039;NULL&#039;&#039;&#039; als &#039;&#039;&#039;String&#039;&#039;&#039; verhindern ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls NULL in einem TextField als String ausgeschrieben wird, kann dies verhindert werden, indem die Einstellung „Blank When NULL“ aktiviert wird. Das Feld bleibt dann leer:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_text_field_formatting.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-wörter-unterstreichen-oder-fett-drucken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-111&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Wörter unterstreichen oder fett drucken ===&lt;br /&gt;
&lt;br /&gt;
Wenn in einem TextField einzelne Wörter unterstrichen oder fett gedruckt werden sollen, einfach in den „Text properties“ unter „Markup“ „styled“ auswählen. In dem Textfield dann einfach um das zu unterstreichende Wort „&amp;amp;lt;u&amp;amp;gt; … &amp;amp;lt;/u&amp;amp;gt;“ schreiben oder „&amp;amp;lt;b&amp;amp;gt; … &amp;amp;lt;/b&amp;amp;gt;“ um es fett gedruckt auszugeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Bitte beachten, dass die PDF-Preview aus Jaspersoft Studio heraus keinen Fettdruck darstellt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;zahlen--und-datumsformat&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-112&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zahlen- und Datumsformat ===&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_textfield_pattern1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld bekommt das Pattern &amp;amp;quot;0&amp;amp;quot;, d.h. es wird eine Ganzzahl inkl. 0 angezeigt. Der Platzhalter &amp;amp;quot;#&amp;amp;quot; steht für Zahlenbestandteile, hier wird eine 0 allerdings nicht angezeigt. Weitere Zahlen- und Datumsformate sind im Assistenten (linker Teil des Screenshots) sicher selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-113&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ===&lt;br /&gt;
&lt;br /&gt;
Hat man pro Spalte / Zelle unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;&amp;amp;&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&amp;quot;#0;#0&amp;quot; : &amp;quot;###0.00;###0,00&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;effiziente-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-114&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Effiziente Formatierung ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keine Lust haben, jedes Textelement eines Berichts einzeln zu formatieren, empfehlen wir als ersten Schritt, Formatierungen zu kopieren. &lt;br /&gt;
&lt;br /&gt;
Im Kontextmenü jedes Elements gibt es die Menüpunkte &amp;amp;quot;Copy Format&amp;amp;quot; und &amp;amp;quot;Paste Format&amp;amp;quot;, die jeweils Formate kopieren und einfügen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_copy_format.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Hochschulen ist ein einheitliches Layout der Berichte wichtig, und so bietet es sich an, zentrale Layouts zu definieren und dann wiederzuverwenden. In JasperReports heißen Layouts auch &amp;amp;quot;Styles&amp;amp;quot; bzw. Formatvorlagen. Ähnlich wie in OpenOffice Writer oder MS Word lassen sich Formatvorlagen definieren und zuweisen. Bei Änderungen der Formatvorlage werden diese Änderungen auf alle Elemente automatisch übertragen - auch nachträglich. &lt;br /&gt;
&lt;br /&gt;
In der &amp;amp;quot;Styles Library&amp;amp;quot; werden z.B. einige häufig verwandte Layoutvorlagen angeboten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles_library.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Formate anwenden, indem Sie einfach die jew. Vorlage von der &amp;amp;quot;Styles Library&amp;amp;quot; per Drag and Drop auf das Ziel-Textfeld im Report Design ziehen und somit anwenden.&lt;br /&gt;
&lt;br /&gt;
 Sie können auch eigene Formatvorlagen zentral definieren. Im Menü Datei-&amp;amp;gt;New-&amp;amp;gt;Style geht es los: Wir erzeugen z.B. eine neue Style-Datei mit dem Namen &amp;amp;quot;meinLayout.jrtx&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_style_def_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jrtx-Datei definieren sie einen oder mehrere Formatvorlagen. Wir definieren z.B. die Formatvorlage &amp;amp;quot;Textelemente&amp;amp;quot;, und geben ihr die Eingenschaft &amp;amp;quot;SansSerif, Schriftgröße 12&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Danach können sie die Datei in der jrxml-Datei im Report Inspector unter &amp;amp;quot;Styles&amp;amp;quot; einbinden. Damit sind die Formatvorlagen in dieser Datei verfügbar, und können bei den Elementeigenschaften im Attribut &amp;amp;quot;Style&amp;amp;quot; zugewiesen werden: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styleref_design_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 JasperReports nimmt standardmäßig den absoluten Pfad der jrtx-Datei, in der XML-Quelle sollten Sie diesen Pfad auf relativ umstellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-styles-bedingte-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-115&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Conditional styles – &#039;&#039;&#039;Bedingte Formatierung&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man in einzelne Textfelder &amp;amp;quot;bedingte Formatierung&amp;amp;quot; nutzen will (z.B. farbiger Hintergrund, Fettdruck), hat man früher mehrere Textfelder einzeln angelegt, mit dem gleichen Inhalt und einer jeweiligen &amp;amp;quot;Print-when expression&amp;amp;quot;. Das geht seit JR 3.x eleganter mit den sog. &amp;amp;quot;Conditional styles&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Hierfür wird ein Style angelegt und diesem diverse „Conditional Styles“ untergeordnet. Die „Conditional Styles“ enthalten Bedingungen und Formatierungseinstellungen. Der Style kann beispielweise einem Textfeld übergeben werden. Sobald die Bedingung eines &amp;lt;span id=&amp;quot;anchor-116&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Conditional Styles“ erfüllt wird, werden die im „Conditional Style“ festgelegten Formatierungseinstellungen auf das Textfeld angewandt. Die Einstellungen im Textfeld selbst werden allerdings höher priorisiert. Eine detaillierte Erläuterung der Priorisierung anhand eines Beispiels findet sich in Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-jaspersoft-studio-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-117&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in JasperSoft Studio – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst legen Sie die Formatierungen an, indem Sie unter Styles die rechte Maustaste drücken und über „Create Style“ einen Style erstellen, beispielsweise &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch Rechtsklick auf &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039; wird über „Create Conditional Style“ ein neuer Conditional Style hinzugefügt. Es erscheint ein neuer Unterknoten &amp;amp;lt;No condition set&amp;amp;gt;. Über die Properties können anschließend die zu erfüllende Bedingung als Expression, beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$F{Name}.equals(&amp;quot;Summe Aktiva&amp;quot;)||$F{Name}.equals(&amp;quot;Summe Passiva&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
festgelegt und die Formatierungseinstellungen vorgenommen werden. In diesem Falle ist Fettschrift (bold) gewählt : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style4.png]]&lt;br /&gt;
&lt;br /&gt;
Um den Style inklusive seiner Conditional Styles auf beispielsweise ein Textfeld anzuwenden, werden die Properties des entsprechenden Feldes geöffnet. Im Reiter Appearance wird der gewünscht Style, in diesem Falle &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;,&#039;&#039;&#039; &#039;&#039;&#039;dem Textfeld zugeordnet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Die Reihenfolge wird direkt im XML oder per Drag&amp;amp;amp;Drop geändert.&lt;br /&gt;
&lt;br /&gt;
Es kam in der Vergangenheit bereits zu dem Phänomen, dass im Conditional Style Fettschrift gewählt war, aber nicht ins Textfeld übernommen wurde, während beispielsweise Kursivschrift problemlos und wie erwartet funktionierte. Eine genauere Beschreibung und Lösung findet sich im Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-ireport-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in iReport – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
Um z.B. einzelne Zeil&amp;lt;span id=&amp;quot;anchor-120&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;en nach einer Bedingung f&amp;lt;span id=&amp;quot;anchor-121&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;ett zu machen oder nicht kann man so vorgehen: &amp;lt;span id=&amp;quot;anchor-122&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zunächst legen Sie die Formatierungen an, indem Sie im Report Inspector unter Styles die rechte Maustaste drücken und ein Style hinzufügen, z.B. &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; für einen Style der Fett sein soll, wenn im Feld &#039;&#039;&#039;zw&#039;&#039;&#039; bestimmte Werte stehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-123&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Danach erzeugen Sie mit Rechtsklick auf &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; eine neue Bedingung mit „Hinzufügen von Conditional Style“. Bei dem neuen Unterknoten &amp;lt;span id=&amp;quot;anchor-124&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;No condition set&amp;amp;gt; klicken Sie auf die rechte Maustaste, dann Edit Condition. Hier können Sie wie gewohnt eine Bedingung in Form einer Expression eingeben, z.B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$F{Zweckbestimmung}.equals(&amp;quot;Gesamtausgaben&amp;quot;)||$F{Zweckbestimmung}.equals(&amp;quot;Gesamteinnahmen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann müssen Sie den neuen Conditional Style anklicken &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style.png]]&lt;br /&gt;
&lt;br /&gt;
und in den Eigenschaften bold auf true setzen.&lt;br /&gt;
&lt;br /&gt;
Dann wählt man im Report designer die Felder aus, die ggfs. fett dargestellt werden sollen, und bei den Eigenschaften als Style &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style2.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn man mit Padding arbeiten will, kann man für den Style padding angeben, muss aber anscheinend manuell im jrxml leftpadding entfernen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;box topPadding=&amp;quot;0&amp;quot; leftPadding=&amp;quot;0&amp;quot; bottomPadding=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-127&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Es gibt zwar einen Menüpunkt „Reihenfolge ändern“ bei rechtem Mausklick, der ist jedoch deaktiviert, man kann die Reihenfolge aber direkt im XML ändern oder per Drag&amp;amp;amp;Drop.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-128&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Leider kann man nicht einen conditionalstyle auf ein leere Zelle anwenden (z.B. Unterstrich), wenn man Excelexport macht, wird daraus einfach eine leere Zelle ohne Formatierung selbst wenn man Leerzeichen in der Text Expression hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden Variablen im conditional style verwendet, muss die evaluation time aktiviert werden über die property:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.style.evaluation.time.enabled&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe https://community.jaspersoft.com/blog/tip-data-set-variable-usage-conditional-style-table-component-jasper-reports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Style kann auch mit einem anderen Style verknüpft werden, indem in dem entsprechenden Style unter dem Reiter „Style“ in dem Feld „Style“ das entsprechende Style ausgewählt wird. Somit können bestimmte Wiederholungen gespart werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfeld-vs.-conditional-style-priorisierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-130&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-131&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Textfeld vs. Conditional Style – Priorisierung&amp;lt;span id=&amp;quot;anchor-132&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt wird anhand eines Beispiels aufgezeigt, dass Textfelder höher priorisiert sind als Conditional Styles und welche Fallstricke dadurch entstehen können. Das Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einem Textfeld wird ein Style zugeordnet, der einen Conditional Style enthält, welcher bei erfüllter Bedingung den Text fett und kursiv darstellen soll: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style6.png]]&lt;br /&gt;
&lt;br /&gt;
Im Textfeld selbst sind beide Einstellungen deaktiviert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style7.png]]&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist, dass im Bericht der Text dieses Feldes zwar kursiv, aber nicht fett dargestellt wird. Zum Testen werden weitere Formatierungseinstellungen im Conditional Style hinzugefügt, beispielsweise Unter- und Durchstreichen und auch dies wird umgesetzt. Die Bedingung des Conditional Styles ist also erfüllt. &lt;br /&gt;
&lt;br /&gt;
Der Grund für dieses Verhalten ist nur mit Blick auf den Source-Code ersichtlich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style8.png]]&lt;br /&gt;
&lt;br /&gt;
Dort findet sich in den Einstellungen des Textfeldes &#039;&#039;isBold=“false“&#039;&#039;. Dieses Fragment ist dadurch entstanden, dass in der Designoberfläche von JasperSoft Studio für das Textfeld die Einstellung bold einmal aktiviert und dann wieder deaktiviert wurde. Im Source-Code wird nach dem ersten Aktivieren &#039;&#039;isBold=“true“&#039;&#039; hinzugefügt und beim Deaktiveren nicht wieder komplett entfernt, sondern auf false gesetzt. Da die Einstellungen im Textfeld selbst höher priorisiert werden, als jene der Conditional Styles, wird der Fettdruck des Conditional Styles nicht umgesetzt. Löscht man im Source-Code das Fragment &#039;&#039;isBold=“false“&#039;&#039;, dann wird der im Conditional Style definierte Fettdruck umgesetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-style&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-133&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default Style ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen Style als Default Style zu verwenden. Hierfür wird beim Style, nicht beim Conditional Style, die entsprechende Einstellung gesetzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style9.png]]&lt;br /&gt;
&lt;br /&gt;
Dieser Style wird nun auf jedes Feld angewandt, dem kein anderer Style zugeordnet ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;expression-editor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-134&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Expression Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Expression Editor werden die für die Ausgabe bestimmten Werte angegeben. Zahlen werden ohne Zusatz eingetragen. Feste String Werte werden zwischen Anführungszeichen gesetzt. Felder und Variablen können über ein Doppelklick auf den jeweiligen Namen unterhalb des Eingabefeldes eingefügt werden. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Zu den Feldern und Variablen gibt es auch noch Funktionen in dem 3. unterem Kästchen. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für Textausgabe:&lt;br /&gt;
&lt;br /&gt;
Es soll ausgegeben werden „Auswertungszeitraum 1.1.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt; bis 31.12.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt;“.&lt;br /&gt;
&lt;br /&gt;
Anstatt zwei statische Textfelder und zwei dynamische zu machen, legt man eine Expression an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Auswertungszeitraum: 1.1.&amp;quot;+$F{legende_Jahr_value}+&amp;quot; bis 31.12.&amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Der Clou an JasperReports ist: da das Programm auf der Programmiersprache Java beruht, kann man in Expressions echten Java Code einfügen bzw. um eigenen Java Code erweitern. Wenn Sie z.B. wissen dass das benutzte Feld &amp;amp;quot;$F{Lehr- und Forschungsbereich}&amp;amp;quot; vom Typ String ist, können Sie alle in Java eingebauten String Funktionen benutzen, z. B. Substring, contains, indexOf, toLowerCase etc. Analog auch für andere Datentypen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedingungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-135&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedingungen ===&lt;br /&gt;
&lt;br /&gt;
Bedingungen sind in dem Expression Editor auch möglich. Wenn z.B. eine Variable nur Ausgegeben werden soll, wenn der Wert größer, kleiner oder gleich einem anderem vorgegebenen Wert oder Variable sein soll, wird folgende Syntax verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Bedingung&amp;gt;&amp;gt; ? &amp;lt;&amp;lt;Ausgabe wenn Bedingung wahr&amp;gt;&amp;gt; : &amp;lt;&amp;lt;Ausgabe wenn Bedingung falsch&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bedingungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String1 == String2&lt;br /&gt;
String1 != String2&lt;br /&gt;
Nummer1 &amp;gt; Nummer2&lt;br /&gt;
String1.contains( String2 )&lt;br /&gt;
String1 == null&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
usw.&lt;br /&gt;
&lt;br /&gt;
Wie oben angegeben: Wenn die Bedingung wahr ist, wird der Wert nach dem Fragezeichen genommen. Wenn die Bedingung falsch ist, wird der Wert nach dem Doppelpunkt genommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-zeichenketten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-137&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Zeichenketten ===&lt;br /&gt;
&lt;br /&gt;
Häufig werden für Berichtsausgaben Zeichenketten manipuliert. Dadurch, daß JasperReports innerhalb der Java-Runtime läuft, stehen uns mächtige Methodenaufrufe zur Verfügung, die in Java schon eingebaut sind. &lt;br /&gt;
&lt;br /&gt;
Für Zeichenketten hier eine Übersicht:&lt;br /&gt;
&lt;br /&gt;
 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-datumsfeldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-138&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Datumsfeldern ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datumswerte-aggregieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-139&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datumswerte aggregieren ====&lt;br /&gt;
&lt;br /&gt;
Fürs Berichtsdesign auf aggregierter Ebene ist es oft praktisch, Datumswerte auf &amp;amp;quot;grobere&amp;amp;quot; Kategorien zu aggregieren, z.B. Monate, Quartale, oder Jahre. Um solche Werte auszugeben bzw. danach zu gruppieren können Sie eigene Variablen anlegen, die dann im Expression Editor mit Hilfe von Java berechnet werden. Hier ein Beispiel für eine Transformation vom Datum zur Einheit &amp;amp;quot;Jahr-Monat&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
(($F{Datum}.getYear()+1900)*100)+($F{Datum}.getMonth()+1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn wir annehmen, dass im Feld &amp;amp;quot;Datum&amp;amp;quot; ein Datums- oder Zeitstempel-Wert steht, dann wird über die o.g. Expression daraus ein Zahlenwert nach dem Muster Jahr (vierstellig) + Monat (zweistellig), z.B. für den 13.5.2013 würde daraus der Wert 201305. Nach diesem ganzzahligen Wert kann man dann sortieren und gruppieren. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Anmerkung: die o.g. Methoden getYear() und getMonth() sind seit einigen Jahren in Java &amp;amp;quot;deprecated&amp;amp;quot;, d.h. sie könnten in zukünftigen Java Versionen entfallen. Aber da dies in den letzten 7 Jahren nicht passiert ist, können wir damit noch arbeiten und optimistisch sein. Falls die Methoden wirklich entfernt werden, muss man eigene statische Methoden mit dem in Java eingebauten Calender-Objekt erstellen, Codebeispiele dazu gibt es viele im WWW.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wenn man Text &amp;amp;quot;Erzeugungsdatum&amp;amp;quot; und das Datum in einem Feld haben will geht so:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-140&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Erzeugungsdatum:&amp;amp;quot;+new SimpleDateFormat(&amp;amp;quot;dd.MM.YYYY&amp;amp;quot;, Locale.GERMAN).format(new java.util.Date()) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeichenketten-zum-datumstyp-konvertieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-141&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeichenketten zum Datumstyp konvertieren ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Datum als String-Feld geliefert bekommen, können Sie es mit Groovy zum Typen &amp;amp;quot;java.util.Date&amp;amp;quot; konvertieren, z.B. um danach zu sortieren. Wenn z.B. das Feld „Beginn“ den Typ String hat und gefüllt ist mit dem Wert &amp;amp;quot;18.11.2020 18:05:00&amp;amp;quot;, dann können Sie eine Variable vom Typ java.util.Date erzeugen, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Date.parse(&amp;quot;dd.MM.yyyy hh:mm:ss&amp;quot;, $F{Beginn})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-workarounds&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-142&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Besonderheiten / Workarounds ===&lt;br /&gt;
&lt;br /&gt;
* Bei Feldern mit Länge 1 klappte einfaches equals nicht, mit einer substring Anweisung geht es dann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$F{legende_Art des Berichts_value}.substring(0,1).equals(&amp;quot;B&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;anchor-143&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Folgejahr berechnen: Selbst es das Feld Jahr gibt und es als Integer definiert ist in der Felderinfo, klappt der Bericht nur in JasperReports nicht in SuperX nicht wenn man schreibt:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$F{legende_Jahr_value}.intValue()+1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
geht nicht, statt dessen:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
new Integer($F{legende_Jahr_value}).intValue()+1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Statt das Element table zu nutzen kann man auch manuell eine Tabelle erzeugen, in dem man per Rechtsklick auf ein Element Padding und Borders bearbeitet. Siehe http://www.youtube.com/watch?v=LbU6qTj3zQM&lt;br /&gt;
* Achten muss man dann darauf, dass Felder die Null sein können nicht „remove when blank“ haben und als TextFieldExpression besser nehmen: $F{Betrag}==null?&amp;amp;quot; &amp;amp;quot;:$F{Betrag}&lt;br /&gt;
* außerdem, wenn die erste Spalte einen stretch with overflow hat auch bei „stretch type“ „relative to tallest object“ einstellen &lt;br /&gt;
* Zeilenumbruch in Feld&amp;lt;br /&amp;gt;&lt;br /&gt;
Markup auf html setzen und dann z.B.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;Plan&amp;lt;br&amp;gt;&amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;häufig-benötigte-transformationen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-144&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Häufig benötigte Transformationen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-tid-in-namen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-145&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester-tid in Namen ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$V{Semester (Schlüssel)}.toString().endsWith(&amp;quot;1&amp;quot;)?(&amp;quot;SS &amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)):(&amp;quot;WS &amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)+&amp;quot;/&amp;quot;+(new Integer($V{Semester (Schlüssel)}.toString().substring(0,4))+1).toString())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-in-akad.-jahr&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-146&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester in akad. Jahr ====&lt;br /&gt;
&lt;br /&gt;
Die folgende Formel formt die Semesterzahl aus dem Studierenden-Datenblatt in ein akad. Jahr um nach der Formel &amp;amp;quot;Akad. Jahr=WS + darauf folgendes SS&amp;amp;quot;, z.B. WS 2009/2010 und SS 2010 werden zum akad. Jahr 2009:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$F{Semester der Belegung (Schlüssel)}.toString().endsWith(&amp;quot;2&amp;quot;) ? $F{Semester der Belegung (Schlüssel)}.toString().substring(0,4):(new Integer($F{Semester der Belegung (Schlüssel)}.toString().substring(0,4))-1).toString()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formel nimmt beim WS die ersten vier Stellen des Semester-Schlüssels, und beim SS werden die ersten vier Stellen als Ganzzahl codiert, und dann wird 1 subtrahiert.&lt;br /&gt;
&lt;br /&gt;
Da es diverse Definitionen von Akad. Jahr / Studienjahr / Prüfungsjahr gibt, kann man das obige Beispiel leicht für eigene Bedürfnisse abwandeln.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-147&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-148&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ==&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hat man allerdings unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;&amp;amp;&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&amp;quot;#0;#0&amp;quot; : &amp;quot;###0.00;###0,00&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fortgeschrittene-techniken-bei-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-149&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fortgeschrittene Techniken bei Feldern ==&lt;br /&gt;
&lt;br /&gt;
Textfelder enthalten standardmäßig nur den Feldnamen, aber die zugrunde liegenden [[Berichtsdesign_mit_JasperReports#Expression Editor|Ausdrücke]] lassen sich erweitern. Dabei kann auch alle Java Klassen zugegriffen werden, die sich im CLASSPATH befinden, z.B. [[Berichtsdesign_mit_JasperReports#Umgang mit Zeichenketten|java.lang.String]]. &lt;br /&gt;
&lt;br /&gt;
Hier ist ein Beispiel, in dem die Klasse &amp;amp;quot;StringBuilder&amp;amp;quot; (wird mit Java ausgeliefert , java.lang.StringBuilder) genutzt wird, um einen Text auszugeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Beispiel verdeutlicht: Man könnte da auch de.meineKlasse.erzeugeText(&amp;amp;quot;mein Text&amp;amp;quot;) schreiben, und diese Klasse dann in den CLASSPATH bei Jasper Start legen, und voila! Durch diese Funktionalität lassen sich also beliebige Java Klassen einbinden. Das gleiche geht übrigens auch mit Groovy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einrücken-von-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-150&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einrücken von Feldern ==&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Feldern macht man am besten, in dem man mehrere Textfelder definiert und jeweils eine printWhenExpression auf die Ebene einbaut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativer Versuch war folgendes:&lt;br /&gt;
&lt;br /&gt;
Wobei Nachteil bei sehr langen Texten, bei denen strech with overflows zur Geltung kommt, dann die zweite Zeile nicht eingerückt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Felder kann man für Textfelder (Strings) machen, indem der SuperX-Bericht eine Spalte einruecken definiert, der je nach gewünschter Einrückung eine Anzahl von x enthält, also z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| Betrag&lt;br /&gt;
| Einrücken&lt;br /&gt;
|-&lt;br /&gt;
| 1. Überschrift&lt;br /&gt;
| 30000&lt;br /&gt;
| X (mindestens 1 x nötig)&lt;br /&gt;
|-&lt;br /&gt;
| 1.1 Unterüberschrift&lt;br /&gt;
| 15000&lt;br /&gt;
| Xxxxx&lt;br /&gt;
|-&lt;br /&gt;
| 1.3. UnterUnterübersichrift&lt;br /&gt;
| 3000&lt;br /&gt;
| xxxxxxxxx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann kann man ein Textfeld erzeugen und bei TextFieldExpression einfach eintragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$F{Einruecken}.replace(&#039;x&#039;,&#039; &#039;)+$F{Name}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Zahlfelder (z.B. Double) geht das so nicht so gut, weil dann das Pattern der Darstellung ###0,00 nicht mehr greift.&lt;br /&gt;
&lt;br /&gt;
Man definiert drei Felder nebeneinander, Beispiel:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| $F{Name}&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;gt;=6&lt;br /&gt;
&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;lt;6&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bei Ebene 1-5 wird ganz rechts ausgegeben, bei Ebene &amp;amp;gt;=6 wird mittig ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-151&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen ==&lt;br /&gt;
&lt;br /&gt;
Bei Berechnungen muss immer auch auf (ich nenne es mal) die Gültigkeit der Variable geachtet werden. Wenn eine Variable eine Summe bildet kann diese für z.B. „jetzt“ oder für eine Gruppe oder den ganzen Report gelten. Je nach Gültigkeit gilt z.B. die Summe nur für die aktuelle Gruppe (bei Gruppenbändern). &lt;br /&gt;
&lt;br /&gt;
Achtung: Es gibt nicht nur eine Gültigkeit bei der Variable selber (Reset type) sondern auch bei dem Element in dem Bericht. Wenn eine Variable in den Bericht gezogen wird, besitzt das entstandene Element eigene Eigenschaften, bei dem dann die „Evulation Time“ eingestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;prozentrechnung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-152&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Prozentrechnung ===&lt;br /&gt;
&lt;br /&gt;
Für die Prozentrechnung musst zuerst eine Variable z.B. mit dem Namen &amp;amp;quot;Gesamt&amp;amp;quot; anlegen mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Calculation = Sum&lt;br /&gt;
Reset type = Report&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dannach kann ein Textfeld mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$F{Summe} / $V{Gesamt}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erstellt werden mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Expression Class = Double&lt;br /&gt;
Pattern = #.##0.00 % (kannst du unter Prozent auswählen)&lt;br /&gt;
Evaluation Time = Auto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Variable „Gesamt“ wird die Summe aus allen Werten des Feldes Summe gezogen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Prozentberechnungen in Grafiken muss in manchen Fällen der Wert auf 0 überprüft werden. Das kann man z.B. mit folgendem Code machen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
( $V{zahl1} == 0 || $V{zahl2} == 0 ? 0 : ( $V{zahl1} / $V{zahl1} * 100) )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist dann sichergestellt, dass es keine Probleme bei der Berechnung gibt, auch wenn die Zahlen mal leer sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rundung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-153&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rundung ===&lt;br /&gt;
&lt;br /&gt;
Wenn man runden möchte den Datentyp am besten auf BigDecimal stellen. Ansonsten wird schon mal aus 2,45 gerundet 2,4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hyperlinks&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-154&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hyperlinks ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;externe-links&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-155&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Externe Links ===&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld kann auch als Hyperlink befüllt und ausgegeben werden. Vorab bemerkt: Hyperlinks funktionieren in internen Viewer von JasperSoft Studio sowie beim Export nach Excel nicht bzw. nur eingeschränkt, zumindestens wenn man POI als Excel Engine nutzt. Selbst wenn Hyperlinks ausgegeben werden, ist in den Sicherheitseinstellungen von Excel oder OpenOffice eine Änderung vorzunehmen, damit Hyperlinks auch aktiv sind. Da es hier komplexte Unterschiede bei MS Excel-/OpenOffice-Versionen gibt, haben wir das Thema nicht weiter verfolgt und raten davon ab.&lt;br /&gt;
&lt;br /&gt;
In den anderen üblichen Ausgabeformaten (PDF, HTML) funktionieren die Hyperlinks.&lt;br /&gt;
&lt;br /&gt;
Dabei gibt es zwei Varianten:&lt;br /&gt;
&lt;br /&gt;
Das Textfeld hat als Markup Typ den Wert &amp;amp;quot;html&amp;amp;quot;, und die Hyperlinks werden in HTML-Notation eingefügt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier der Quellcode der textField-Expression zum Kopieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
$V{Gross_Forsch_Proj_Sprech}.replaceAll( &amp;quot;\n&amp;quot;,&amp;quot;&amp;lt;br /&amp;gt;&amp;quot; )+&amp;quot;&amp;lt;a href=\&amp;quot;http://www.meinserver.de/url/\&amp;quot;&amp;gt;Siehe Details&amp;lt;/a&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Variante 2 erhält ein ReportElement im Quellcode die entsprechende Eigenschaft. In der von uns genutzten Version von JasperSoft Studio (6.5.1 final) war das noch nicht im GUI bearbeitbar, daher kann man das nur im Quelltext machen. Immerhin &amp;amp;quot;zerstört&amp;amp;quot; JasperSoft Studio dies beim Speichern nicht. &lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft des textField heißt hyperlinkType=&amp;amp;quot;Reference&amp;amp;quot; und wird wie folgt belegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;textField pattern=&amp;quot;&amp;quot; isBlankWhenNull=&amp;quot;true&amp;quot; hyperlinkType=&amp;quot;Reference&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;reportElement mode=&amp;quot;Opaque&amp;quot; x=&amp;quot;363&amp;quot; y=&amp;quot;22&amp;quot; width=&amp;quot;259&amp;quot; height=&amp;quot;22&amp;quot; forecolor=&amp;quot;#000000&amp;quot; backcolor=&amp;quot;#FFFFFF&amp;quot; uuid=&amp;quot;48c8e2df-f231-4433-8836-309668e0a859&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;printWhenExpression&amp;gt;&amp;lt;![CDATA[$V{Gross_Forsch_Proj_Sprech}.length() &amp;gt;100]]&amp;gt;&amp;lt;/printWhenExpression&amp;gt;&lt;br /&gt;
&amp;lt;/reportElement&amp;gt;&lt;br /&gt;
&amp;lt;box&amp;gt;&lt;br /&gt;
&amp;lt;pen lineWidth=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;topPen lineWidth=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;leftPen lineWidth=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;bottomPen lineWidth=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;rightPen lineWidth=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/box&amp;gt;&lt;br /&gt;
&amp;lt;textElement textAlignment=&amp;quot;Left&amp;quot; verticalAlignment=&amp;quot;Middle&amp;quot; rotation=&amp;quot;None&amp;quot; markup=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;font fontName=&amp;quot;SansSerif&amp;quot; size=&amp;quot;6&amp;quot; isBold=&amp;quot;false&amp;quot; isItalic=&amp;quot;false&amp;quot; isUnderline=&amp;quot;false&amp;quot; isStrikeThrough=&amp;quot;false&amp;quot; pdfEncoding=&amp;quot;Cp1252&amp;quot; isPdfEmbedded=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;paragraph lineSpacing=&amp;quot;Single&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/textElement&amp;gt;&lt;br /&gt;
&amp;lt;textFieldExpression&amp;gt;&amp;lt;![CDATA[&amp;quot;Siehe Details&amp;quot;]]&amp;gt;&amp;lt;/textFieldExpression&amp;gt;&lt;br /&gt;
&amp;lt;hyperlinkReferenceExpression&amp;gt;&amp;lt;![CDATA[&amp;quot;http://meinserver/url&amp;quot;]]&amp;gt;&amp;lt;/hyperlinkReferenceExpression&amp;gt;&lt;br /&gt;
&amp;lt;/textField&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des textField wird dann im Element hyperlinkReferenceExpression das Ziel des Hyperlinks definiert. Da dies eine Expression ist, kann man die Hyperlinks auch dynamisch aufbauen. In der Ausgabe dies das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pdf.png]]&lt;br /&gt;
&lt;br /&gt;
Je nach PDF Viewer muss man auch hier in den Sicherheitseinstellungen Hyperlinks aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;interne-linksanker&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-156&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Interne Links/Anker ===&lt;br /&gt;
&lt;br /&gt;
Auf einem Text Field kann ein Link eingetragen werden. Dafür muss man einfach mit der rechten Maustaste auf das Textfeld klicken und dann auf Hyperlink klicken. &lt;br /&gt;
&lt;br /&gt;
Das erste Feld oben &amp;lt;span id=&amp;quot;anchor-157&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Anchor Name Expression“ kann einen Text enthalten, auf den von einer anderen Stelle verwiesen werden kann. Es ist also eine Markierung. &lt;br /&gt;
&lt;br /&gt;
Wenn ich einen Hyperlink Type wähle, kann ich auch Verweise in den generierten Bericht erzeugen. Z.B. kann ich hier den Type „LocalAnchor“ wählen.&lt;br /&gt;
&lt;br /&gt;
Um z.B. ein Inhaltsverzeichnis zu erzeigen, welches im PDF bei klick auf ein Element dort hin springen soll, gehe ich zunächst zu der Stelle an der die Sprungmarke gesetzt werden soll und erzeuge dort ein Text Field mit der „Anchor Name Expression“ z.B. „Überschrift1“. Das Inhaltsverzeichnis muss dann auch aus Text Fields erzeugt werden und dort wähle ich dann bei Hyperlink type „LocalAnchor“. Nun habe ich unter der Auswahl von dem Hyperlink type ein neues Eingabefeld „Hyperlink Anchor Expression“. Dort trage ich jetzt exakt den gleichen Text „Überschrift1“ ein und im generierten PDF kann ich dort drauf klicken um an die Markierte Stelle zu kommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichts-properties-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-158&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichts-Properties setzen ==&lt;br /&gt;
&lt;br /&gt;
Es gibt auf Berichtsebene die Möglichkeit, die Ausgabe der Berichte über sog. &amp;amp;quot;Properties&amp;amp;quot; zu steuern, teilweise auch formatspezifisch. So können Sie z.B. steuern, daß bei der Ausgabe nach Excel Zahlenfelder als Zahlenfelder ausgegeben werden, nicht als Textfelder. &lt;br /&gt;
&lt;br /&gt;
Um die Berichts-Properties zu setzen, können Sie dies entweder für einzelne Berichte, order auch Server-weit einstellen.&lt;br /&gt;
&lt;br /&gt;
Bei einzelnen Berichten gehen Sie im Report Inspector auf das oberste Element, und dort auf &amp;amp;quot;Eigenschaften&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
Sie erhalten dann eine Liste der Eigenschaften: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Dort können Sie Zeilen hinzufügen, bearbeiten und löschen. Eine Erläuterung der jew. Property erhalten Sie in dem jew. Dialog.&lt;br /&gt;
&lt;br /&gt;
Um eine Property systemweit zu speichern, legen Sie eine Textdatei mit dem Namen &amp;amp;quot;jasperreports.properties&amp;amp;quot; an, und legen diese in den CLASSPATH. Im Kontext von Tomcat ist dies das Verzeichnis webapps/superx/WEB-INF/classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenlayout&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-159&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenlayout ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-160&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Typen von Seitenumbrüchen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wenn der gesamte Bericht paginiert ist (Report-Eigenschaft &amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;false&amp;amp;quot;), berechnet JR aufgrund des Seitenformats die Seitenumbrüche automatisch, und fügt auch, sofern vorhanden, die Bänder &amp;amp;quot;page header&amp;amp;quot; und &amp;amp;quot;page footer&amp;amp;quot; hinzu.&lt;br /&gt;
* Bei eingeschalteten Eigenschaften des jew. Bandes &amp;amp;quot;Start on a new page=true&amp;amp;quot; werden Seitenumbrüche ebenfalls aufgeführt&lt;br /&gt;
* Es gibt für manuelle Seitenumbrüche in der Palette das Element &amp;amp;quot;Break&amp;amp;quot;, das an beliebiger Stelle einen manuellen Seitenumbruch einfügt. Nun ist die Frage: wenn gesamte Bericht nicht paginiert ist (&amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot;), was dann bei einem Break passieren soll. In älteren JR Versionen (vor 4.8) wurde der Break trotzdem gesetzt. In Versionen ab 4.8 passiert das nicht mehr, man kann aber ab Version 5.1 über die Berichts-Property&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
net.sf.jasperreports.page.break.no.pagination=apply&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
das alte Verhalten nachbilden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 In JasperSoft Studio oder iReport kann man zusätzlich noch beim Rendern des Berichts über den Parameter JRParameter.&amp;lt;span id=&amp;quot;anchor-161&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;IS_IGNORE_PAGINATION steuern, ob Seitenumbrüche ausgeführt werden. Dies überlagert die Berichtseinstellung, wenn es angehakt ist. Das ist z.B. sinnvoll, wenn Sie im PDF Export Seitenumbrüche haben wollen, in Excel oder HTML aber nicht. &lt;br /&gt;
&lt;br /&gt;
Leider kann man diesen Parameter nicht im Servlet setzen. Wenn Sie Seitenkopf/Fuß bei PDF wünschen, bei Excel aber nicht, nutzen Sie die Anleitung [[Berichtsdesign_mit_JasperReports#Seitenkopf und Seitenfuß bei Excel unterdrücken|unten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten, wie sich das Detailband bei einem Seitenumbruch verhalten soll. Diese werden über den ‚Split Type‘ des Bandes gesteuert. Beispiel: &lt;br /&gt;
&lt;br /&gt;
Bei einem Seitenumbruch wird die aktuelle Zeile des Detailbandes aufgeteilt und geht auf der nächsten Seite weiter. Der ‚Split Type‘ steht auf Stretch.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_011.png|642x170px]]&lt;br /&gt;
&lt;br /&gt;
Falls erwünscht ist, dass jede Zeile ganz dargestellt wird, kann der ‚Split Type‘ auf Prevent gestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_012.png|300x281px]]Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_013.png|642x223px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-höhe-von-textfeldern-dynamisch-anpassen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-162&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-163&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die Höhe von Textfeldern dynamisch anpassen ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Textfelder besitzen die Eigenschaft „Stretch With Overflow“. Wird diese aktiviert, passt das Textfeld dynamisch seine Größe, falls der Inhalt nicht in das Feld passt. Der Text bricht um und die Höhe des Feldes wird vergrößert. Damit auch alle anderen Felder derselben Zeile ihre Größe entsprechend anpassen wird der „Stretch Type“ aller Felder dieser Zeile auf „Relative To Tallest Object (deprecated)“ gesetzt. Die Felder passen ihre Höhe dann dem höchsten Feld dieser Zeile an. Im Detailband genügt dies. Für Bänder mit festgelegter Zeilenanzahl, wie beispielsweise dem Titelband ist eine weitere Einstellung vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
Um im Titelband die Funktion „Stretch With Overflow“ nutzen zu können, ist es notwendig allen Feldern in darunterliegenden Zeilen den „Position Type“ „Float“ zuzuweisen. Die Position der Felder verändedrt sich dann entsprechend der Höhe darüberliegender Felder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bericht-ausgeben-ohne-dateninput&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-164&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bericht ausgeben, ohne Dateninput ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Bericht bzw. das Layout mit Titelband etc. ausgegeben werden soll, obwohl es keine Daten gibt, dann wird die Funktion ‚When No Data Type‘ auf ‚All Sections No Detail‘ gestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_014.png|336x374px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-beim-export-nach-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Besonderheiten beim Export nach Excel  ==&lt;br /&gt;
&lt;br /&gt;
Für jedes Exportformat gibt es auf Berichtsebene bzw. darunter spezielle Properties, die Feinheiten des Zielformates festlegen. Dies wird im folgenden anhand des Excel-Exports von Formeln und Namen von Arbeitsblättern (Sheet-Names) gezeigt.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass diese Hinweise für den &amp;amp;quot;alten&amp;amp;quot; Excel Export (&amp;amp;quot;xls&amp;amp;quot;) gelten. Für die Exportformate xlsx, JExcel-API oder OpenOffice-Spreadsheets funktionieren diese teilweise nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-165&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um leere Zeilen im Excelexport zu vermeiden, im jrxml-Kopf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.collapse.row.span&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.remove.empty.space.between.columns&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.remove.empty.space.between.rows&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
wenn man Zahlenanpassung möchte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  → font wird ggfs. verkleinert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.print.keep.full.text&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-formeln&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-169&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-170&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Formeln ===&lt;br /&gt;
&lt;br /&gt;
Es gibt auch die Möglichkeit Zahlen nicht nur vorab zu berechnen, sondern beim Export nach Excel als Excel-Formel zu übergeben. &lt;br /&gt;
&lt;br /&gt;
Um diese Funktion zu aktivieren muss im JRXML die Property mit folgender Zeile eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder über die Report Properties:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können in jedem Text Field in der Property expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type2.png]]&lt;br /&gt;
&lt;br /&gt;
folgende Einträge ergänzt werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type3.png]]&lt;br /&gt;
&lt;br /&gt;
Rechts neben &amp;lt;span id=&amp;quot;anchor-171&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-172&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.formula wird die Formel für Excel eingetragen, allerdings ohne = am Anfang. Außerdem werden nicht alle Excel-Formeln unterstützt, insbesondere nicht deren deutsche Lokalisierung (z.B. oben SUMME(D119...). Details finden Sie in der [https://poi.apache.org/spreadsheet/formula.html POI]-Dokumentation. Um zu erfahren wie die Felder lauten, welche berechnet werden sollen, am besten den Bericht einmal ausführen und in Excel anzeigen lassen. Achtung: Wenn der Bericht noch bearbeitet wird, können sich die Felder noch verändern.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;span id=&amp;quot;anchor-173&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-174&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-175&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-176&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.pattern können speziell für Excel Formatangaben gemacht werden. In dem obigen Beispiel &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-177&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-178&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;#,##0.00;-#,##0.00&amp;amp;quot; gibt es 2 Nachkommastellen und ein Tausender-Trennzeichen. Wenn z.B. Tausende von Euro angezeigt werden sollen, nimmt man als Pattern #. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Fallstrick: in der von uns getesteten Version (4.1.3) wurde die Property net.sf.jasperreports.export.xls.formula nur dann ausgewertet, wenn das das jew. Textfeld eine korrekte &amp;amp;quot;Text field expression&amp;amp;quot; hat, sie darf also nicht leer sein. Ob das ein Bug ist oder nicht ist uns derzeit unklar.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beispiel für eine komplexe Summenformel SUM(D7:D20,D28,D33,D40)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann die Formel auch als Expression formulieren, z.b. um eine Division durch 0 zu verhindern. Setzen Sie dazu das Häkchen bei &amp;amp;quot;Use an expression&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excelformula_expression.png]]&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel führt die Formel &amp;amp;quot;D91/D149&amp;amp;quot; nur aus, wenn die Variable $V{Haush_Professoren_1} (die Quelle für die Zelle D149) einen Wert größer 0 hat. Wenn nicht, wird keine Formel reingeschrieben, sondern der Wert 0. &lt;br /&gt;
&lt;br /&gt;
Diese Funktion bietet natürlich noch viel mehr Möglichkeiten, z.B. könnte man damit Excel-Zellennummern dynamisch berechnen etc. Beispiele dazu finden Sie in den JasperReport Demos in demo/samples/xlsformula/reports/XlsFormulaReport.jrxml. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilennummern-dynamisch-berechnen-ein-beispiel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-179&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilennummern dynamisch berechnen (Ein Beispiel) ====&lt;br /&gt;
&lt;br /&gt;
Will man dass in der gesamten Exceldatei immer Spalte F=D+E ist, braucht man nicht für jede Zeile feste Formeln eintragen.&lt;br /&gt;
&lt;br /&gt;
Als Erstes schaut man in welcher Zeile die eigentlichen Daten anfangen, also z.B. nach den zwei Headerzeilen ganz am Anfang der Tabelle und den 3 Spaltenüberschriften, die pro Seite wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||($F{Soll}==null&amp;amp;&amp;amp;$F{Reste}==null))?&amp;quot;&amp;quot;:&amp;quot;SUM(D&amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+$V{REPORT_COUNT}.intValue()+2)+&amp;quot;,E&amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+$V{REPORT_COUNT}.intValue()+2)+&amp;quot;)&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Elegant geht es auch so&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||($F{Soll}==null&amp;amp;&amp;amp;$F{Reste}==null))?&amp;quot;&amp;quot;:&amp;quot;INDIRECT(\&amp;quot;D\&amp;quot; &amp;amp; ROW())+INDIRECT(\&amp;quot;E\&amp;quot; &amp;amp; ROW())&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das hat nur den Nachteil, dass die Formel in Excel nicht so schön ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;wenn-if-formel-ein-fallstrick&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-186&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;WENN-/IF-Formel – &#039;&#039;&#039;Ein&#039;&#039;&#039; Fallstrick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick, der uns einige Stunden Arbeitzeit gekostet hat: die IF-Formel wird in OpenOffice und MS Excel mit dem Trennzeichen &amp;amp;quot;;&amp;amp;quot; für die THEN- und ELSE-Bedingung formuliert. JasperReports nutzt als Trennzeichen aber &amp;amp;quot;,&amp;amp;quot;. Interessanterweise wird dann im fertigen Excel das &amp;amp;quot;,&amp;amp;quot; als &amp;amp;quot;;&amp;amp;quot; angezeigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sumif-summen-mit-bedingungen-bsp.-zwischensummen-ignorieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-187&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-188&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;SUMIF – Summen mit Bedingungen (Bsp.: Zwischensummen ignorieren) ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn die Summe über einen großen Bereich gezogen werden soll, in dem auch Zwischensummen vorkommen, gibt es die Folgende Formel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
SUMIF(A&amp;quot;+$V{zeile_start}.intValue()+&amp;quot;:A&amp;quot;+$V{zeile_ende}.intValue()+&amp;quot;,\&amp;quot;&amp;lt;&amp;gt;Summe*\&amp;quot;,B&amp;quot;+$V{zeile_start}.intValue()+&amp;quot;:B&amp;quot;+$V{zeile_ende}.intValue()+&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Zwischensummen mit addiert werden würden, wäre das Ergebnis doppelt so hoch wie es sein sollte. Die Funktion SUMIF beinhaltet 3 Bereiche. Zuerst wird der Bereich eingegeben, auf den die Bedingung angewendet wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
A&amp;quot;+$V{zeile_start}.intValue()+&amp;quot;:A&amp;quot;+$V{zeile_ende}.intValue()+&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von A1 bis A10. &lt;br /&gt;
&lt;br /&gt;
Danach kommt die Bedingung:&lt;br /&gt;
&lt;br /&gt;
\&amp;amp;quot;&amp;amp;lt;&amp;amp;gt;Summe*\&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, es werden alle Zeilen genommen, die &#039;&#039;&#039;&#039;&#039;NICHT&#039;&#039;&#039;&#039;&#039; mit „Summe“ anfangen.&lt;br /&gt;
&lt;br /&gt;
Als letztes kommt der Bereich, der summiert werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
B&amp;quot;+$V{zeile_start}.intValue()+&amp;quot;:B&amp;quot;+$V{zeile_ende}.intValue()+&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von B1 bis B10. &lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel werden alle Zahlen zwischen B1 und B10 aufsummiert, wenn in der entsprechenden Zeile in der Spalte A der Text nicht mit „Summe“ beginnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;statt-0-werten-eine-leere-zelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-189&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-190&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Statt 0-Werten eine leere Zelle ausgeben ====&lt;br /&gt;
&lt;br /&gt;
Im Standardfall wird eine 0 ausgegeben, falls eine Formel in Excel auf leere Zellen oder Zellen mit einer 0 verweist. Um stattdessen eine leere Zelle auszugeben wird die Property Property net.sf.jasperreports.export.xls.pattern genutzt. Das obige Beispiel wird erweitert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
###0.00;-###0.00;;@&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die jeweiligen Zellen weisen nun 2 Nachkommastellen aus und zudem werden 0-Werte nicht mehr angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;openoffice-vs-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-191&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;OpenOffice vs Excel&amp;lt;span id=&amp;quot;anchor-192&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
OpenOffice kommt mit folgender Berechnung klar&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;INDIRECT(\&amp;quot;E\&amp;quot; &amp;amp; ROW())+INDIRECT(\&amp;quot;F\&amp;quot; &amp;amp; ROW())-INDIRECT(\&amp;quot;G\&amp;quot; &amp;amp; ROW())-INDIRECT(\&amp;quot;H\&amp;quot; &amp;amp; ROW())&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Excel macht hier Ärger, wenn eine der Zellen Null ist, wird als Gesamtergebnis #WERT angezeigt, entweder Sum-Formel benutzen, oder noch mal mit IF prüfen, ob Zelle gefüllt ist&lt;br /&gt;
&lt;br /&gt;
Struktur ist (IF(Zelle leer,0,sonst Zellenwert))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;IF(INDIRECT(\&amp;quot;E\&amp;quot; &amp;amp; ROW())=\&amp;quot;\&amp;quot;,0,INDIRECT(\&amp;quot;E\&amp;quot; &amp;amp; ROW()))+IF(INDIRECT(\&amp;quot;F\&amp;quot; &amp;amp; ROW())=\&amp;quot;\&amp;quot;,0,INDIRECT(\&amp;quot;F\&amp;quot; &amp;amp; ROW()))-IF(INDIRECT(\&amp;quot;G\&amp;quot; &amp;amp; ROW())=\&amp;quot;\&amp;quot;,0,INDIRECT(\&amp;quot;G\&amp;quot; &amp;amp; ROW()))-IF(INDIRECT(\&amp;quot;H\&amp;quot; &amp;amp; ROW())=\&amp;quot;\&amp;quot;,0,INDIRECT(\&amp;quot;H\&amp;quot; &amp;amp; ROW()))&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;stretch-with-overflow-in-excel-korrekt-verarbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-193&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Stretch with Overflow‘ in Excel korrekt verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine Zelle haben mit besonders langem Text, z.B. „Unterstützungen auf Grund der Unterstützungsgrundsätze, Fürsorgemaßnahmen sowie Kosten nach dem Arbeitssicherheitsgesetz“, hilft es, nur bei der Zelle, Line Spacing auf double zu setzen, dann sieht es in Excel besser aus.&lt;br /&gt;
&lt;br /&gt;
Es wird das Stretch richtig verarbeitet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ verkleinert fonts bei bedarf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.print.keep.full.text&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pagination-in-excel-dokumenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-195&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pagination in Excel-Dokumenten ===&lt;br /&gt;
&lt;br /&gt;
In Excel-Dokumenten in die Seitengröße naturgemäß irrelevant. Trotzdem wird das im jrxml gesetzte Seitenformat beim Excel-Export beachtet. Das stellt sich so dar, dass im Excel-Dokument der „Rest der Seite“ durch einzelne breitere beziehungsweise höhere Zellen gefüllt wird. Das sieht beispielsweise folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter dem Tabellenschluss ist die Zeile 84 so hoch, dass die im jrxml eingestellte Seitenhöhe erreicht ist. Um das zu verhindern wird für den gesamten Bericht &amp;lt;span id=&amp;quot;anchor-196&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;isIgnorePagination=“true“ gesetzt. Die Einstellung wird im source-Code ganz oben im Tag &amp;amp;lt;jasperReport isIgnorePagination=“true“&amp;amp;gt; gesetzt oder über die grafische Oberfläche:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-export-in-einzelne-tabellenblätter&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-197&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Export in einzelne Tabellenblätter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normalerweise werden beim Export nach Excel die Berichtsinhalte in das erste Tabellenblatt geschrieben. Je nachdem wie Sie auf Berichtsebene die Property net.sf.jasperreports.export.xls.one.page.per.sheet setzen, wird der Seitenumbruch gesteuert. Setzen Sie den Wert auf &amp;amp;quot;true&amp;amp;quot;, dann führt jeder Seitenumbruch zu einem neuen Sheet bzw. Arbeitsblatt in der Excel-Datei. Standardmäßig werden diese dann &amp;amp;quot;Page 1&amp;amp;quot;, Page 2&amp;amp;quot; etc. benannt. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Namen der Sheets explizit vergeben wollen, können Sie dies wie folgt machen: Wenn Sie z.B. die Berichtsproperty net.sf.jasperreports.export.xls.sheet.names.all auf den Wert &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Hauptseite/wichtige Seite/Unwichtige Seite&amp;amp;quot; setzen, bekommen Sie drei Sheets mit den jew. Namen, d.h. der &amp;amp;quot;/&amp;amp;quot; fungiert als Trennzeichen. Dementsprechend sollte im Namen des Sheets kein &amp;amp;quot;/&amp;amp;quot; auftauchen.&lt;br /&gt;
&lt;br /&gt;
Seit JR 4.1 gibt es auch die Möglichkeit, die Sheetnamen dynamisch zu vergeben. Auch hier werden Properties mit Expressions genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten Berichtsinhalte in verschiedene Excel-Tabellenblätter zu verteilen. Im Folgenden werden zunächst Möglichkeiten betrachtet, welche bei Einzelberichten in Frage kommen. Danach geht es um die klassische Haupt- und Unterberichtsstruktur und zuletzt um Booklets, welche die in den meisten Fällen wohl elegantere Alternative zu klassichen Haupt- und Unterberichten darstellen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-berichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-198&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Berichte ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben einen Bericht mit der Gruppierung auf die Spalte &amp;amp;quot;LFB&amp;amp;quot;, im Gruppenkopf befindet sich ein Text Field mit der Expression $F{LFB}.&lt;br /&gt;
&lt;br /&gt;
Sie können diesem Textfeld eine Property net.sf.jasperreports.export.xls.sheet.name geben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names.png]]&lt;br /&gt;
&lt;br /&gt;
Das Textfeld erhält somit beim Füllen des Berichts den jew. Wert, z.B. &amp;amp;quot;Anglistik, Amerikanistik&amp;amp;quot;, und diese Überschrift steht auch im Gruppenkopf. Wenn der Gruppenkopf das Attribut &amp;amp;quot;Start on a new page&amp;amp;quot; hat, dann beginnt der Gruppenkopf auf einer neuen Seite und, dank der Berichts-Property net.sf.jasperreports.export.xls.one.page.per.sheet , erzeugt Excel / OpenOffice dann ein neues Sheet mit dem Namen Anglistik, Amerikanistik. Beim Sheetnamen soll nur sichergestellt werden, dass kein &amp;amp;quot;/&amp;amp;quot; im Text vorkommt, daher der replace-Befehl zur Sicherheit. Hier ein Screenshot in OpenOffice:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann das gesamte Verhalten auch deaktivieren, indem man auf Berichtsebene das Attribut &amp;amp;quot;Ignore Pagination&amp;amp;quot; auf &amp;amp;quot;true&amp;amp;quot; setzen. In diesem Falle werden alle Seitenumbrüche ignoriert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis für SuperX/Edustore Nutzer: leider haben wir in älteren Kernmodul-Versionen dieses Attribut &amp;amp;quot; Ignore Pagination&amp;amp;quot; im Servlet fest auf &amp;amp;quot;true&amp;amp;quot; gesetzt, so dass Sie diese Funktion im Servlet erst ab Version SuperX 4.5 bzw. HISinOne-BI 7.0 nutzen können.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;haupt--und-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-199&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haupt- und Unterberichte ====&lt;br /&gt;
&lt;br /&gt;
Das vorherige Kapitel hat aufgezeigt, wie innerhalb eines einzelnen Einzelberichtes mit gezieltem setzen von Seitenumbrüchen ein solcher Berichte auf verschiedene Tabellenblätter eines Excel-Dokumentes augeteilt wird.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Einzelberichte in einem Excel-Dokument gesondert auf verschiedene Tabellenblätter aufzuteilen eignen sich klassiche Haupt- und Unterberichtsstrukturen (vgl. Kapitel 3.5). Die simpelste Methode wäre das Seitenlayout eines Berichtes so groß zu wählen, dass der gesamte Bericht auf eine Seite passt. &lt;br /&gt;
&lt;br /&gt;
Falls Haupt- und Unterberichte verwendet werden, darauf achten, dass der Hauptbericht direkt unter dem letzten Unterberichtselement endet. Ansonsten entsteht ein weiteres leeres Tabellenblatt. Der folgende Screenshot zeigt, wie es nicht sein sollte. Hier muss das Summary-Band verkleinert werden, sodass es mit dem Unterberichtselement endet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_main-_subreport.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;individuelle-gestaltung-bei-booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-200&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Individuelle Gestaltung&#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-201&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; bei Booklets ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Booklets bieten diverse Vorteile beim Gestalten der einzelnen Seiten beziehungsweise Sheets. Denn jeder Unterbericht kann hier individuell formatiert werden. Dies betrifft beispielsweise die Definition von Sheetnamen, da hierfür die Eigenschaft &amp;amp;quot;Tab name expression&amp;amp;quot; im &amp;amp;quot;Buch&amp;amp;quot;-[[Berichtsdesign_mit_JasperReports#Hauptbericht im Booklet|Bericht]] vorgesehen ist. Auch das Problem, dass ein Sheet in diesem Falle nicht mehrere Seite umfassen darf (und man somit die Seitengröße unrealistisch groß machen muss) ist damit behoben.&lt;br /&gt;
&lt;br /&gt;
Eine Ausnahme stellen jedoch die Properties dar. Diese werden im Hauptbericht gesetzt und gelten für alle Unterberichte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-drucklayout-in-excel-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-202&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das Drucklayout in Excel konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenränder-und-kopfzeile-im-drucklayout-formatieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-203&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Seitenränder und Kopfzeile im Drucklayout formatieren&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Anlegen eines Textes in der Kopfzeile gibt es die Properties&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.sheet.header.left&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je nach gewünschter Position wird der jeweiligen Property ein Wert übergeben. Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;![CDATA[&amp;amp;&amp;quot;Liberation Sans,Bold&amp;quot;&amp;amp;10Meldung der Ist-Besetzung]]&amp;gt;&lt;br /&gt;
&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;![CDATA[&amp;amp;&amp;quot;Liberation Sans,Bold&amp;quot;&amp;amp;10Anlage 1 &amp;amp;&amp;quot;Liberation Sans,Regular&amp;quot;&amp;amp;10 (zu VwV HWiF 3.2.1)]]&amp;gt;&lt;br /&gt;
&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird zentral der Text „&#039;&#039;&#039;Meldung der Ist-Besetzung&#039;&#039;&#039;“ übergeben. Der Text ist in der Schriftart Liberation Sans und fettgedruckt formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;), sowie in Schriftgröße 10 (&amp;amp;amp;10).&lt;br /&gt;
&lt;br /&gt;
Rechts wird der Text „&amp;lt;span id=&amp;quot;anchor-211&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Anlage 1 &#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-212&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;(zu VwV HwiF 3.2.1)“ verwandt. Der erste Teile „&#039;&#039;&#039;Anlage 1&#039;&#039;&#039;“ ist wie der zentrale Text formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;amp;amp;10). Für den zweiten Teil „(zu VwV HwiF 3.2.1)“ wird von Fett- auf Regulärdruck gewechselt (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Regular&amp;amp;quot;&amp;amp;amp;10). Weitere Möglichkeiten zur Formatierung finden sich auf https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/extensions/XSSFHeaderFooter.html.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit die Kopfzeile im Drucklayout sichtbar ist, ist es notwendig den Seitenrand groß genug zu gestalten. Dafür werden folgende Properties genutzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.print.page.left.margin&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.print.page.right.margin&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.print.page.top.margin&amp;quot; value=&amp;quot;40&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.print.page.bottom.margin&amp;quot; value=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;vordefinierte-zeilen-im-drucklayout-auf-jeder-seite-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-213&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Vordefinierte Zeilen im Drucklayout auf jeder Seite wiederholen ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um im Drucklayout beispielsweise einen Tabellenkopf auf jeder Seite zu wiederholen, wird die Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.sx_repeating.rows.range&amp;quot; value=&amp;quot;3:7&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
genutzt (dafür eigene Klasse de.superx.servlet.SxJRXlsExporter geschaffen und de.superx.servlet.JasperCreator angepasst – aktuell in NHS-Pack für 7.1 enthalten). Der Wert gibt an, welche Zeilen des Excel-Dokumentes im Drucklayout auf jeder Seite wiederholt werden. Im Beispiel (&#039;&#039;value=&amp;amp;quot;3:7&amp;amp;quot;&#039;&#039;) sind die Zeilen 3 bis 7 betroffen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-im-drucklayout-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-218&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche im Drucklayout verhindern ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teilweise ist es wünschenswert Seitenumbrüche im Drucklayout zu verhindern, sowohl in der Breite als auch in der Höhe. Hierfür werden die Properties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.fit.width&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.fit.height&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
genutzt. Also value kommen hier 1 und 0 für entweder true oder false infrage. Setzt man der Wert true, dann wird nicht umgebrochen. Das bedeutet für dieses Beispiel, dass der gesamte Inhalt des Excel-Dokuments auf eine Seite gedruckt würde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-verbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-219&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellen verbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.export.xls.sx_cell_merge&amp;quot; value=&amp;quot;0,6,0,7|1,2,3,4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1,1,4,1 - will merge from B2 to E2. Remember it is zero based indexing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellschutz-aktivieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-220&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellschutz aktivieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.password&amp;quot; value=&amp;quot;gmmmyflb&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ Alle Zellen sind mit Passwort geschützt.&lt;br /&gt;
&lt;br /&gt;
Wenn bestimmte Spalten/Zeilen nicht geschützt sein sollen:&lt;br /&gt;
&lt;br /&gt;
Property net.sf.jasperreports.export.xls.cell.locked  false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies kann man auch über eine komplexe PropertyExpression steuern, z.B.&lt;br /&gt;
&lt;br /&gt;
(&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
($F{Zeile}!=null&amp;amp;&amp;amp;(&lt;br /&gt;
$F{Zeile}.indexOf(&amp;quot;A&amp;quot;)&amp;gt;-1||&lt;br /&gt;
$F{Zeile}.indexOf(&amp;quot;B&amp;quot;)&amp;gt;-1||&lt;br /&gt;
$F{Zeile}.indexOf(&amp;quot;C&amp;quot;)&amp;gt;-1||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;I.&amp;quot;)||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;II.&amp;quot;)||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;III.&amp;quot;)||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;IV.&amp;quot;)||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;V.&amp;quot;)||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;VI.&amp;quot;)||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;VII.&amp;quot;)||&lt;br /&gt;
$F{Zeile}.equals(&amp;quot;VIII.&amp;quot;)))||&lt;br /&gt;
($F{Kontengruppe}!=null&amp;amp;&amp;amp;$F{Kontengruppe}.equals(&amp;quot;53,54,58&amp;quot;))||&lt;br /&gt;
($F{Name}!=null&amp;amp;&amp;amp;(&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;= Summe der (ordentlichen&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Ordentliche &amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;- ordentliche&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;+/- Finanz&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Summe Investitionen&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Summe Finanzbedarf&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Summe Deckung&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;5.1 E&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Summe sonstige betriebl&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Sonstige betriebliche&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;5.1.) Erträge aus Zuweisungen&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Materialaufwand&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;= Summe Materialaufwand&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Personalaufwand&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;= Summe Personalaufwand&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;Sonstige betriebliche Aufwendungen&amp;quot;)||&lt;br /&gt;
$F{Name}.startsWith(&amp;quot;= Summe sonstige betriebliche Aufwendungen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
))?&amp;amp;quot;true&amp;amp;quot;:&amp;amp;quot;false&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-fixieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Zellen fixieren ===&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio können Sie festlegen, dass beim Excel-Export bestimmte Zeilen und Spalten fixiert werden, indem Sie spezielle Eigenschaften für den Export konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Um Zeilen und Spalten in Excel zu fixieren, müssen Sie die Eigenschaften &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
net.sf.jasperreports.export.xls.freeze.row&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
net.sf.jasperreports.export.xls.freeze.column&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
konfigurieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie möchten, dass die erste Zeile und die erste Spalte fixiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
* net.sf.jasperreports.export.xls.freeze.row = 2&lt;br /&gt;
* net.sf.jasperreports.export.xls.freeze.column = B&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Export werden in Excel die erste Zeile und die erste Spalte fixiert, und der Rest des Arbeitsblatts bleibt scrollbar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.freeze.column&amp;quot; value=&amp;quot;B&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.freeze.row&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hintergrund--oder-textfarben-beim-excel-export&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-221&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-222&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hintergrund- oder Textfarben beim Excel-Export ===&lt;br /&gt;
&lt;br /&gt;
Beim Excel Export werden Zellen, die ein Rechteck mit einer Print-When-Expression zugewiesen bekommen haben, u.U. nicht richtig wiedergegeben, während es beim PDF Export klappt. Um dies zu beheben müssen Sie&lt;br /&gt;
&lt;br /&gt;
1. den Farbraum beim Excel Export erweitern: Excel unterstützt bei Hintergrund- oder Vordergrundfarben nur wenige [http://dmcritchie.mvps.org/excel/colors.htm Farbcodes]. Für spezielle Farben nach RGB-Wert muss die Berichts-property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.create.custom.palette&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gesetzet werden (benötigt Bibliothek org-netbeans-core.jar im Classpath der Anwendung)&lt;br /&gt;
&lt;br /&gt;
2. Statt farbiger Textfelder oder Rechtecke mit &amp;amp;quot;Print-When-Expression&amp;amp;quot; müssen Sie [[Berichtsdesign_mit_JasperReports#Conditional styles – Bedingte Formatierung|Conditional Styles]] nutzen.&lt;br /&gt;
&lt;br /&gt;
3. Wenn Sie mit Hintergrundfarben arbeiten, müssen die Textfelder und die jew. Styles die Eigenschaft &amp;amp;quot;Opaque&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
4. Beim Export nach Excel müssen Sie das JExcelApi nutzen. Dies ist bei SuperX seit Kernmodul 4.5 der Standard, bei HISinOne-BI seit Version 7.1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenkopf-und-seitenfuß-bei-excel-unterdrücken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-224&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenkopf und Seitenfuß bei Excel unterdrücken ===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr Bericht normalerweise ein Band &amp;amp;quot;Page Header&amp;amp;quot; bzw. &amp;amp;quot;Page Footer&amp;amp;quot; hat, können Sie dies beim Exportformat XLS unterdrücken (z.B. wenn Sie dort keine Seitenzahlen wünschen, bei PDF aber schon).&lt;br /&gt;
&lt;br /&gt;
Setzen Sie dazu die Berichts-Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.1&amp;quot; value=&amp;quot;pageHeader&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.2&amp;quot; value=&amp;quot;pageFooter&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Ausgabeformat XLSX heißen die Properties:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.1&amp;quot; value=&amp;quot;pageHeader&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.2&amp;quot; value=&amp;quot;pageFooter&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies klappt ab JR Version 4.5, sie können diese Properties aber lediglich im XML-Quellcode hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;dimension-tausend-euro&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-227&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dimension Tausend-Euro  ==&lt;br /&gt;
&lt;br /&gt;
In Excel als Dimension Tausend-Euro ausgeben, mit zwei Nachkommastellen&lt;br /&gt;
&lt;br /&gt;
In Deutschem Excel bei manueller Angabe benutzerdefiniertes Format #.##0,00.&lt;br /&gt;
&lt;br /&gt;
In Jasper muss Amerikanische Vorlage sein:&lt;br /&gt;
&lt;br /&gt;
-&amp;amp;gt; #,##0.00&lt;br /&gt;
&lt;br /&gt;
Bei Excel kann man als Property Expresion net.sf.jasperreports.export.xls.pattern z.B. nehmen&lt;br /&gt;
&lt;br /&gt;
#, → zeigt nur Tausender Werte an&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#,##0.00,&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
→ zeigt Tausernder Werte, mit zwei Nachkommastellen an&lt;br /&gt;
&lt;br /&gt;
der Werte selber ist einfach &amp;lt;span id=&amp;quot;anchor-228&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;$F{Soll}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei PDF/HTML muss man den Wert duch 1000 teilen $F{Soll}.doubleValue()/1000&lt;br /&gt;
&lt;br /&gt;
und dann als Pattern z.B. #,##0.00;-#,##0.00&lt;br /&gt;
&lt;br /&gt;
Die Rundung macht das Pattern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-229&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung in Edustore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsentwicklung-bei-grunddaten-und-basisberichten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-230&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsentwicklung bei Grunddaten und Basisberichten ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemein&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-231&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemein ===&lt;br /&gt;
&lt;br /&gt;
In den Grunddaten- und Basisberichten kann man beliebige Ergebnistabellen lokal als XML speichern, und dann als Datenquelle in JasperReports einbinden. Dann kann man den Bericht lokal gestalten, und, wenn er fertig ist, in die Weboberfläche einhängen. Die XML Datei wird nur für die Testausgabe bei JasperReports verwendet und dient als Ersatz der Datenbank. Wenn der Bericht in der Weboberfläche eingehängt ist, wird dieser direkt mit frischen Daten versorgt.&lt;br /&gt;
&lt;br /&gt;
Für die Folgenden 2 Punkte „Datenquelle erzeugen“ und „Template erzeugen“ gibt es [http://www.superx-projekt.de/doku/benutzerhandbuch/movies/jasper_erzeugen.viewlet/jasper_erzeugen_viewlet_swf.html hier] einen Kurzfilm.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_vergleich_jrxml_xml_zusammen.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-232&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Ergebnistabelle eines Berichtes vorliegt, erhält man über den XML Export von SuperX die Datenquelle für den Jasper Report. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man lokal ab: Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine xml-Datei abspeichern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls der Tomcat in ISO Kodierung läuft, muss für JasperReports in der ersten Zeile bei encoding ein UTF-8 eingetragen werden. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird ersetzt mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In JasperReports sind dann folgende Schritte zu tun, um die neue Datenquelle einzubinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-233&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Die Datenquellen heißen hier &amp;amp;quot;Data Adapters&amp;amp;quot; und werden im Repository hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie JasperSoft in Ihrem vorhandenen Eclipse als Plugin installiert haben, sehen Sie den Reiter &amp;amp;quot;Repository&amp;amp;quot; nicht; in diesem Fall liegen die Data Adapter im jew. Projekt. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Assistenten geben Sie XML-Document als Datentyp an, und im nächsten Reiter spezifizieren Sie das Format:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Datumsformat ist bei Edustore das deutsche Schema &amp;amp;quot;dd.MM.yyyy&amp;amp;quot;, und das Zahlenformat ist eine Zahl mit 6 Nachkommastellen und &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner, also &amp;amp;quot;#0.######&amp;amp;quot;. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist auch das Ankreuzfeld &amp;amp;quot;Use the report Xpath expression&amp;amp;quot;, dies müssen Sie immer ankreuzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-234&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in iReport ====&lt;br /&gt;
&lt;br /&gt;
Klick auf „Report Datasources“. Es öffnet sich ein Fenster, in dem die vorhandenen Datenquellen angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Fenster Klickt man auf „New“ um eine neue Datenquelle anzulegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wählt man „XML file datasource“ aus und klickt auf „Weiter“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt wählt man einen Eindeutigen Namen aus, der auch später in dem Dropdown Menü erscheint, gibt den Dateipfad an und ändert die restlichen Einstellungen wie im Screenshot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formate für Datum und Nummer müssen angegeben werden, da sonst die amerikanischen angenommen werden. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: in JasperReports 3.7.1 werden trotz des korrekten Zahlenformats die Dezimalstellen von Beträgen immer mit &amp;amp;quot;,00&amp;amp;quot; wiedergegeben. Dies liegt an der &amp;amp;quot;Locale&amp;amp;quot;, man muss diese auf &amp;amp;quot;Englisch&amp;amp;quot; umstellen. Das Problem ist allerdings: sobald man das macht, kann man die XML-Datenquelle in der Datenquellenverwaltung nicht mehr ändern, d.h. man muss sie bei Änderungen löschen und neu einfügen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Nach dem Speichern erscheint die Datenquelle im dropdown Menü und kann ausgewählt werden. Damit man die Datenquelle nutzen kann, braucht man auch noch ein Template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-235&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Um ein leeres Template zu erzeugen, geht man wieder in die Ergebnistabelle der selben Maske, deren Datenquelle erstellt wurde, wählt im Dropdown Menü neben „Bericht entwerfen“ „Leerer Bericht“ aus und klickt auf das Icon daneben „Export als JasperReport-Template“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-leeren_Bericht_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man Lokal ab. Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine jrxml Datei abspeichern. JR in der Endung jrxml steht für JasperReports. Damit können die Datenquellen und die Templates unterschieden werden und sogar den selben Dateinamen tragen (nur unterschiedliche Dateiendung).&lt;br /&gt;
&lt;br /&gt;
Sie sollten es sich nicht zumuten und versuchen über JasperReports einen neuen Bericht zu entwerfen. Nehmen Sie immer den &amp;amp;quot;leeren&amp;amp;quot; Bericht aus der entsprechende Maske, da dort sehr viele Kleinigkeiten voreingestellt sind. Sie sparen sich damit immens viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-236&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template einbinden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reportdesign-verlinken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-237&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reportdesign verlinken ====&lt;br /&gt;
&lt;br /&gt;
Um das erstellte Template einzubinden, muss zunächst die jrxml Datei in das Verzeichnis webapps/superx/WEB-INF/reports kopiert werden. Danach muss das Stylesheet im System bekannt gegeben werden. In Grunddaten und Basisberichte geht man dazu in „Administration“ → „Masken“ → „Stylesheet suchen“ und schickt die Maske so ab. Danach klickt man bei einem beliebigen Stylesheet auf den „bearbeiten“ Button ganz rechts in der Tabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klickt dann auf „Neuen Datensatz erzeugen“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Dateiname kommt der Dateiname der jrxml Datei rein, welche sich in dem reports Ordner befindet. Beschriftung und Beschreibung sollte eindeutig dem Stylesheet zuzuordnen sein. Für JasperReport wählt man bei „Tabelle oder Maske“ „Stylesheet für eine Ergebnistabelle“ aus. Der Dateityp stellt das default Ausgabeformat fest.&lt;br /&gt;
&lt;br /&gt;
Um dieses Stylesheet nun einer Maske zuzuordnen, geht man in die Maske „Administration“ → „Masken“ → „Maske suchen“, sucht in dem Feld „Maske“ die gewünschte Maske aus und klickt dann auf „Abschicken“. Nun klickt man auf den Button Stylesheets neben der Maske, der das neue Stylesheet zugeordnet werden soll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem neuen Fenster wählt man das neu erstellte Stylesheet aus und speichert diese Einstellung ab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Bericht der Maske zugeordnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Normal wird im Servlet direkt vom Berichtsergebnis nach JasperReports übergeben, d.h. ohne den Zwischenweg XML. Wenn aber im Dateinamen *_xmlsource.jrxml steht, wird Datenquelle XML erzwungen (für Makroberichte, Unterberichte, Subdatasets oder spezielle XPATH-Selektionen wichtig).&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-des-upload-servlets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-238&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung des Upload Servlets ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keinen Schreibzugriff auf den Ordner &#039;&#039;WEB-INF/reports&#039;&#039; haben, können Sie auch Templates über das [http://www.superx-projekt.de/doku/kern_modul/admin/f_Anpassungderwebxml.htm Upload Servlet ]direkt im Browser hochladen. Dazu müssen Sie in der web.xml die Dateiendungen .jrxml und (sofern benötigt) .jasper erlauben, siehe obiger Link.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie die Report Templates hochladen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload1.png]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Upload können Sie das Template zunächst registrieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload2.png]]&lt;br /&gt;
&lt;br /&gt;
und dann der jew. Maske zuordnen. &amp;lt;span id=&amp;quot;anchor-239&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beachten Sie, dass der Pfadname relativ zum Ordner WEB-INF/reports angegeben wird, also in der Regel&lt;br /&gt;
&lt;br /&gt;
../../default/custom&lt;br /&gt;
&lt;br /&gt;
bzw. beim Mandantenbetrieb&lt;br /&gt;
&lt;br /&gt;
../../Mandant-ID/custom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;probleme-beim-deployment-im-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-240&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Probleme beim Deployment im Server ====&lt;br /&gt;
&lt;br /&gt;
Es kann u.U. beim Deployment eines Berichts im Server das Problem auftreten, daß ein Bericht im lokalen iReport mit der XML-Datenquelle funktioniert, aber im Server für einzelne Merkmale kein Ergebnis geliefert wird. Dies hat folgende Ursache:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;feldnamen-im-berichtsdesign-weichen-vom-datenbank-feldnamen-ab&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-241&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Feldnamen im Berichtsdesign weichen vom Datenbank-Feldnamen ab  =====&lt;br /&gt;
&lt;br /&gt;
Bei der lokalen Entwicklung in iReport werden die Berichte mit der Datenquelle XML erzeugt. In den Muster-JRXML-Dateien, die man über das Feld &amp;amp;quot;Bericht erzeugen&amp;amp;quot; generiert, sind die Felder über die folgende Notation deklariert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;quot; class=&amp;quot;java.lang.String&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fieldDescription&amp;gt;&amp;lt;![CDATA[col[@id=&amp;quot;4&amp;quot; and wert!=&amp;quot;&amp;quot;]/wert]]&amp;gt;&amp;lt;/fieldDescription&amp;gt;&lt;br /&gt;
&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-242&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dies bedeutet: Das Feld &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot; hat den Typ &amp;amp;quot;String&amp;amp;quot; und befindet sich im XML-Datenstrom in der vierten Spalte (col@id=4). Dabei befindet sich in Datenblattberichten im Spaltennamen immer ein &amp;amp;quot;\n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot;, um einen Zeilenumbruch im generischen Standardlayout zu erzeugen. Dieses &amp;amp;quot;\n&amp;amp;quot; wird dann für iReport und JasperReports automatisch durch ein Leerzeichen ersetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn die XML-Datenquelle nicht verändert wird, dann ist das Feld immer mit dem gleichen Inhalt gefüllt. &lt;br /&gt;
&lt;br /&gt;
Wenn man den Bericht dann auf den Server kopiert und einbindet, ohne im Dateinamen &amp;amp;quot;_xmlsource&amp;amp;quot; zu verwenden, dann wird das Feld nicht über die Spaltennummer identifiziert, sondern über den Feldnamen, hier z.B. &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot;. Das bedeutet, daß der Server genau diesen Feldnamen zurückliefern muss. Das kann u.U. abweichen:&lt;br /&gt;
&lt;br /&gt;
* Der Server bzw. die zugrunde liegende Maske wurde verändert, so daß der Feldname geringfügig anders ist. Das sollte eigentlich nicht passieren, kann aber vorkommen.&lt;br /&gt;
* Beim Betrieb in HISinOne gibt es in allen Versionen bis 3.02 noch eine kleine Veränderung, wenn das Modul des zugrunde liegenden Datenblattberichts bzw. der Maske direkt per Tomcat-Start installiert wurde, und nicht in dem Edustore-Installation/Upgrade-Menü. Wenn die Module beim Tomcat Start in eine leere Datenbank installiert werden, dann werden Zeichenketten mit dem Feldinhalt &amp;amp;quot;\n&amp;amp;quot; verfremdet nach &amp;amp;quot;n&amp;amp;quot; (also der &amp;amp;quot;\&amp;amp;quot; wird entfernt). Das führt dann dazu, daß das Feld ohne den &amp;amp;quot;\&amp;amp;quot; in der jrxml-Datei deklariert wird, also z.B.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Fakultät/Fachbereichn(Schlüssel)&amp;quot; class=&amp;quot;java.lang.String&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fieldDescription&amp;gt;&amp;lt;![CDATA[col[@id=&amp;quot;4&amp;quot; and wert!=&amp;quot;&amp;quot;]/wert]]&amp;gt;&amp;lt;/fieldDescription&amp;gt;&lt;br /&gt;
&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-243&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wenn man danach dann einen Upgrade der jew. Komponente ausführt, dann wird die Spalte in der Maske umbenannt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039;\n&#039;&#039;&#039;(Schlüssel)&amp;amp;quot; und der Feldname korrekt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039; &#039;&#039;&#039;(Schlüssel)&amp;amp;quot; umgesetzt. Durch das &amp;amp;quot;n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot; paßt der Feldname in der jrxml-Datei nicht mehr zum Ergebnis aus der Datenbank, und das Feld ist leer. So kann es passieren, daß ein Bericht in iReport funktioniert, im Server aber nicht. Im folgenden die Lösung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;korrektur-der-feldnamen-im-berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-244&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Korrektur der Feldnamen im Berichtsdesign =====&lt;br /&gt;
&lt;br /&gt;
Um sicherzustellen, dass der Feldname der jrxml-Datei mit der jeweils aktuell benutzten Datenbank-Version übereinstimmt, geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
* Erzeugen Sie in Edustore eine HTML-Ausgabe der zugrunde liegenden Abfrage, bei Datenblatt-Berichten ist dies das &amp;amp;quot;generische Standardlayout&amp;amp;quot;.&lt;br /&gt;
* Klicken Sie dann oben im Berichtskopf auf den Button &amp;amp;quot;Bericht entwerfen&amp;amp;quot; -&amp;amp;gt; &amp;amp;quot;leerer Bericht&amp;amp;quot; &lt;br /&gt;
* Im Quellcode sehen Sie die Zeilen &amp;amp;lt;field name=&amp;amp;quot;Berichtsname&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt; ... Hier ist jedes einzelne Feld aus der Datenbank deklariert.&lt;br /&gt;
* Markieren Sie alle Zeilen bis zum letzten &amp;amp;quot;&amp;amp;lt;field...&amp;amp;gt;&amp;amp;quot;-Element, i.d.R. ist dies das Feld &amp;amp;lt;field name=&amp;amp;quot;user&amp;amp;quot;..., und kopieren Sie dies in die Zwischenablage&lt;br /&gt;
* Öffnen Sie die jrxml-Datei mit einem UTF-8-fähigen Editor, z.B. Jedit.&lt;br /&gt;
* Ersetzen Sie genau die &amp;amp;quot;&amp;amp;lt;field...&amp;amp;quot;-Passage aus der Zwischenablage.&lt;br /&gt;
* Speichern Sie den Bericht, und testen Sie die Vorschau in JasperReports. Wahrscheinlich kommt eine Fehlermeldung &amp;amp;quot;Field ... does not exist&amp;amp;quot; o.ä., dann müssen Sie das Feld mit Suchen-&amp;amp;gt;Ersetzen umbenennen.&lt;br /&gt;
* Das machen Sie so lange, bis die Vorschau funktioniert. Danach können Sie die jrxml-Datei wieder auf den Server kopieren. Die Felddeklaration passt dann zum Server. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zuordnung-von-default-feldbelegungen-zu-stylesheets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-245&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zuordnung von Default-Feldbelegungen zu Stylesheets ==&lt;br /&gt;
&lt;br /&gt;
Es können für Stylesheets Default-Feldbelegungen für Stylesheets hinterlegt werden. Hintergrund dieser Funktion ist, dass bei speziellen Stylesheets standardmäßig beliebig viele Spalten vorbelegt werden können. In Datenblattberichten gibt es z.B. das Feld &amp;amp;quot;Felder&amp;amp;quot;, in dem die auszugebenden Spalten angegeben werden. Aus Performancegründen sollten nur die Spalten ausgegeben werden, die auch benötigt werden. So kann dann z.B.für JasperReport Stylesheets hinterlegt werden können, welche Spalten auf jeden Fall benötigt werden. Der Anwender weiß nicht welche Spalten benötigt werden und würde im Normalfall alle Spalten ausgeben lassen um keine Fehlermeldung zu erhalten. Dadurch würde aber wiederum der Bericht unnötig lange dauern, da alle Spalten berechnet werden müssen, auch die, welche nicht benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Stylesheet erstellt haben und dieses in SuperX eingebunden haben gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie gehen in die Maske &amp;amp;quot;Administration -&amp;amp;gt; Tabelle suchen&amp;amp;quot;, geben dort bei Stichwort &amp;amp;quot;stylesheet_field&amp;amp;quot; ein und schicken die Maske ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_maske.png]]&lt;br /&gt;
&lt;br /&gt;
In der folgenden Ergebnistabelle klicken Sie bei &amp;amp;quot;stylesheet_field_list&amp;amp;quot; auf den &amp;amp;quot;Bearbeiten&amp;amp;quot; Button.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_tabelle.png]]&lt;br /&gt;
&lt;br /&gt;
In dem nun geöffneten Fenster sehen Sie alle Zuordnungen, welche bereits eingetragen sind. Hier wird aber lediglich das Stylesheet ausgegeben und nicht die Tabellen und Federzugehörigkeit. Dies hätte wegen der vielen Auswahlmöglichkeiten jeden Browser gekillt. Um Einzelheiten zu erfahren müssen Sie daher auf den Details-Button klicken. Auch wenn Sie eine neue Zuordnung erstellen möchten klicken Sie zunächst auf den Detail-Button eines beliebigen Stylesheets.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_list.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt können Sie die Zugehörigkeit des Stylesheets zu Tabelle und Feld ändern oder eine neue Zuordnung erstellen. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn ein Tabellenname ausgewählt und abgespeichert wurde, können nur Spalten dieser Tabelle ausgewählt werden. Wenn Sie die Tabelle ändern wollen, müssten Sie zunächst die Tabelle ändern, abspeichern und dieses Formular erneut aufrufen. Erst dann würden die Spalten der ausgewählten Tabelle in der Listbox Fieldname erscheinen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_edit.png]]&lt;br /&gt;
&lt;br /&gt;
Um eine neue Verknüpfung zu erstellen klicken Sie zuerst auf den + Button oben rechts. Danach erscheint das gleiche Formular nur ohne ausgefüllte Felder. Hier können Sie das Stylesheet und den Tabellennamen auswählen und die dazu passende Spalte der Tabelle die Sie zuvor ausgewählt haben. Achten Sie darauf die Tabelle zu nehmen, welche im Datenblatt verwendet wird. Danach nur noch über das Diskettensymbol oben rechts abspeichern und eine Spalten-Stylesheet-Verknüpfung ist fertig. Diesen Schritt wiederholen Sie für jede Spalte, die Sie in dem JasperReport Bericht benötigen.&lt;br /&gt;
&lt;br /&gt;
Ab Kernmodul 4.2 bzw. HISinOne 5.1 geht es noch komfortabler, Sie können hier auf einzelne Stylesheets filtern : Administration → Masken → Stylesheet suchen &lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst den Bericht aus, und klicken Sie dann rechts beim Bearbeiten-Button in der Spalte Felder-Vorbelegungen bearbeiten: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field.png]]&lt;br /&gt;
&lt;br /&gt;
In dem Bearbeitungsformular können Sie Datensätze erzeuge, löschen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kurzanleitung-direktaufruf-von-jasper-berichten-von-der-maske&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-246&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-247&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kurzanleitung Direktaufruf von Jasper-Berichten von der Maske ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Abschicken der Maske kann man auch direkt auf den entsprechenden Jasper-Bericht umgeleitet werden. Es muss dazu in der Maske ein Feld geben mit dem Namen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
tablestylesheet&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und der relation &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 distinct filename,X.caption from sx_stylesheets X,&lt;br /&gt;
sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=23880&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und zum Beispiel für Default der Maske 23880&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 distinct filename,X.caption from sx_stylesheets X,sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=23880 and S.ord=2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige des Feldes tablestylesheet im Browser wird eine Berschriftung caption hinterlegt, damit auf der Maske &amp;amp;quot;Bericht&amp;amp;quot; erscheint. Im neuen Kern-Modul passiert dies automatisch.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen manuellen Eintrag in die Tabelle &#039;&#039;sx_captions&#039;&#039; einzufügen (siehe Maske Administration -&amp;amp;gt; Maske -&amp;amp;gt; Beschriftung suchen).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| tid&lt;br /&gt;
| table_name&lt;br /&gt;
| field_name&lt;br /&gt;
| locale&lt;br /&gt;
| contents_short&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;&amp;amp;lt;wird automat. vergeben&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
| felderinfo&lt;br /&gt;
| tablestylesheet&lt;br /&gt;
| de&lt;br /&gt;
| Bericht&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Außerdem muss man die Maske um ein Feld Ausgabeformat ergänzen, das die Art=1 hat und folgende relation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&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;
&lt;br /&gt;
Beispiel für Default Excel:&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 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;
&lt;br /&gt;
&lt;br /&gt;
Achtung: Hier kommen erst Ergebnisse, wenn Sie das Kernmodul 4.1 / HISinOne 3.0 oder höher installieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;spezielle-variablen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-251&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Spezielle Variablen ==&lt;br /&gt;
&lt;br /&gt;
Im Berichtsdesign können neben den Feldern der Ergebnistabelle auch z.B. der Berichtsname, Erleuterung, user und standdatum benutzt werden. Zu finden sind diese im &amp;amp;quot;Report Inspector&amp;amp;quot; unter Fields. Um auch Hochschulspezifische Informationen wie Hochschulname oder Hochschul-Webadresse in einen Bericht importieren zu können wurden unter anderem die sx_captions Variablen &amp;amp;quot;REPORT_HEADING_INSTITUTION&amp;amp;quot; und &amp;amp;quot;REPORT_HEADING_URL&amp;amp;quot; integriert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_sx_captions_markiert.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese können genau wie die anderen Fields in den Bericht per Drag&amp;amp;amp;Drop gezogen werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;makroberichte-als-datenquelle-für-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-252&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Makroberichte als Datenquelle für JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Sie können als Datenquelle für JR nicht nur einzelne Masken nehmen, sondern auch die Ausgabe von Makro-Masken. Dadurch können die verschiedenartigsten Informationen aus den normalen Masken für übergreifende Berichte genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt, wie im KLR-Bericht &amp;amp;quot;Berichtsblatt: Kennzahlen aus der Kostenrechnung&amp;amp;quot; Teile verwendet werden, um einen eigenen JR zu erzeugen, der wiederum Elemente des Makroberichts als Unterbericht nutzt. &lt;br /&gt;
&lt;br /&gt;
Zunächst rufen Sie den Makrobericht auf:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_html.png]]&lt;br /&gt;
&lt;br /&gt;
Das Bild zeigt die ersten drei Elemente des Makros, sie werden mit einer Ordnungsnummer durchnummeriert.&lt;br /&gt;
&lt;br /&gt;
Wir laden dazu die XML-Datenquelle herunter, die XML-Datenquelle binden wir wie [[Berichtsdesign_mit_JasperReports#Datenquelle erzeugen|gewohnt]] in JasperReports ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_datenquelle.png]]&lt;br /&gt;
&lt;br /&gt;
Dann klicken wir im Browser über den Tabellen den Button rechts von &amp;amp;quot;Bericht entwerfen&amp;amp;quot; → Leerer Bericht. Die JRXML-Datei speichern wir wie [[Berichtsdesign_mit_JasperReports#Template erzeugen|gewohnt]].&lt;br /&gt;
&lt;br /&gt;
Im Designer sehen wir nun bei den Feldern eine erweiterte Liste:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_jrxml.png]]&lt;br /&gt;
&lt;br /&gt;
Wir sehen also, daß die Ergebnisspalten mit einem Präfix für die Tabellennummer versehen sind, z.B. &amp;amp;quot;tab_0&amp;amp;quot;. Dadurch können wir die Tabellen und somit auch die jew. Spalten eindeutig identifizieren. Dies ist gleichzeitig der Hauptbericht. Das Detail-Band löschen wir (ist nicht nutzbar), stattdessen aktivieren wir ein Summary Band. &lt;br /&gt;
&lt;br /&gt;
Dann erzeugen wir den [[Berichtsdesign_mit_JasperReports#Unterberichte|Unterbericht]] für Studierenden-VZÄ. Dazu speichern wir die obige jrxml-Datei z.B. mit dem Namen makro_beispiel_ub_stud.jrxml und entfernen das Titel-Band und Seitenfuß-Band. Dann fügen wir im Designer einen Parameter &amp;amp;quot;ordnr&amp;amp;quot; hinzu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_param.png]]&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht bekommt dann in der Report Query folgende Änderung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_report_query.png]]&lt;br /&gt;
&lt;br /&gt;
Die Ordnungsnummer wird vom Hauptbericht übergeben und dient dazu, in der XML-Datenquelle auf die einzelne Tabelle zu filtern.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich geben wir noch einen weiteren Filter ein, damit die Summenzeilen aus der Originaltabelle nicht in die Kreuztabelle aufgenommen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_filter.png]]&lt;br /&gt;
&lt;br /&gt;
Damit der Unterbericht auch &amp;amp;quot;stand-alone&amp;amp;quot; ausführbar ist, können Sie dem Parameter &amp;amp;quot;ordnr&amp;amp;quot; auch einen Standardwert zuweisen, hier z.B. &amp;amp;quot;2&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_ordnr_default.png]]&lt;br /&gt;
&lt;br /&gt;
Nun können wir die [[Berichtsdesign_mit_JasperReports#Unterberichte|Kreuztabelle]] mit dem Assistenten erzeugen. Für unser Beispiel enthält die Kreuztabelle Studierenden-VZÄ nach Studiengang und Fachkennzeichen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_crosstab.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir speichern den Unterbericht und binden ihn in den Hauptbericht im Summary Band ein. Dabei vergeben wir wie gewohnt die Parameter XML_LOCALE und XML_NUMBER_PATTERN. Außerdem erzeugen wir den Parameter &amp;amp;quot;ordnr&amp;amp;quot;, und weisen diesem den Wert 2 zu, weil die Studierenden-Tabelle die Ordnungsnummer 2 hat (s.o.):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hauptbericht_ub_params.png]]&lt;br /&gt;
&lt;br /&gt;
Damit ist die Konfiguration beendet, der Bericht sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hb_erg.png]]&lt;br /&gt;
&lt;br /&gt;
Weitere Unterberichte lassen sich analog hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis zum Einbinden im Servlet: Unterberichte arbeiten nur mit der Datenquelle XML, daher müssen Sie die Datei des Hauptberichts mit dem Suffix &amp;amp;quot;_xmlsource&amp;amp;quot; versehen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kompatibilität-von-ireport-mit-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-253&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kompatibilität von iReport mit JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit iReport Berichte erzeugen, sollte wie gesagt die iReport-Versionsnr. mit der JasperReports-Version übereinstimmen, die der jew. Server nutzt. In Edustore ist dies derzeit die Version 5.1.0. Wenn die Versionsnummern nicht übereinstimmen, dürfen Sie keinesfalls die *.jasper-Dateien von dem lokalen Arbeitsplatz zum Tomcat Server kopieren.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus kann es auch weitere Abhängigkeiten geben, iReport bringt ein paar mehr Bibliotheken mit, als JasperReports. Wenn Sie dann eine jrxml-Datei auf den Server kopieren, könnte es eine Fehlermeldung geben in dem Stil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
java.lang.NoSuchMethodError:...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Das Vorgehen ist hier wie folgt:&lt;br /&gt;
&lt;br /&gt;
* Prüfen Sie zunächst, ob Sie die jeweilige Bibliothek wirklich brauchen. &lt;br /&gt;
* Wenn ja, dann ermitteln Sie aus dem Namen der fehlenden Klasse den Namen der *.jar-Datei. Meist reicht es, wenn Sie den Klassennamen in einer Suchmaschine eingeben, oder in einer speziellen Java-Suchmaschine wie http://www.jarfinder.com/&lt;br /&gt;
* Wenn Sie die jar-Datei identifiziert haben, können Sie diese von iReport-xxx/ireport/modules/ext/ in das webapps/superx/WEB-INF/lib Verzeichns kopieren. &lt;br /&gt;
* Danach müssen Sie Tomcat neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: gehen Sie beim Kopieren in den WEB-INF/lib Ordner möglichst &#039;&#039;&#039;sparsam&#039;&#039;&#039; um: manchmal gibt es zwischen einzelnen Bibliotheken unerwünschte und unvorhersehbare Querabhängigkeiten, z.B. nutzt eine iReport-Bibliothek xy.jar eine andere Bibliothek vz.jar, welche bereits im Tomcat Server vorhanden ist – aber mit einer anderen Versionsnummer. In diesem Falle kann es zu seltsamen Phänomenen kommen, die sehr schwer zu diagnostizieren sind, bis hin zu einer Instabilität des Servers. Man muss solche Kopiermaßnahmen auf jeden Fall gründlich testen!&amp;lt;br /&amp;gt;&lt;br /&gt;
Unter uns: Wir nennen Probleme, die dadurch entstehen können, die &amp;amp;quot;jar-Hölle&amp;amp;quot;...&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden sammeln wir ein paar Beispiele für gefahrlose Kopieraktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-grafiken-in-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-254&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Grafiken in JasperReports ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-255&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bitte vermeiden Sie, iReport-spezifische &amp;amp;quot;Themes&amp;amp;quot; zu benutzen (z.B. &amp;amp;quot;aegean&amp;amp;quot;), denn dafür würden weitere Bibliotheken benötigt. Wenn Sie z.B. die folgende Fehlermeldung bekommen, wurde ein Theme benutzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_theme_error.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann sollten Sie die Einstellung für das Objekt (hier das Theme der Grafik) wieder auf default setzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-bibliotheken-von-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-256&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Bibliotheken von iReport ====&lt;br /&gt;
&lt;br /&gt;
Bei der Meldung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollten Sie die Bibliotheken &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iReport-xxx/ireport/modules/ext/asm.jar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und zur Sicherheit auch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
asm-attrs.jar&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in den WEB-INF/lib-Ordner kopieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;troubleshooting&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-257&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;report-problem-class-not-set-for-bucket-variable&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-258&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Report Problem: Class not set for bucket: &amp;amp;lt;&amp;amp;lt;Variable&amp;amp;gt;&amp;amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Das Problem tritt in iReport 4.1.1 u.a. bei Kreuztabellen auf. Bei diesem Fehler fehlt in der jrxml-datei im Element &amp;amp;lt;bucketExpression&amp;amp;gt; Z.B.: class=&amp;amp;quot;java.lang.String&amp;amp;quot;. Diese einfach im Editor ergänzen und es funktioniert. Beispiel:&lt;br /&gt;
&lt;br /&gt;
Aus :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bucketExpression&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;bucketExpression class=&amp;quot;java.lang.String&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-jasper-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-259&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die jasper Datei ==&lt;br /&gt;
&lt;br /&gt;
Die jasper Datei ist die kompilierte jrxml. Wenn ein Bericht übertragen werden soll, z.B. von dem Entwickler auf den Server oder von dem Development System auch das Produktivsystem immer nur die jrxml Datei übertragen, da es bei Versionsunterschieden in JasperReport zu Fehlern kommt, wenn die Kompilierte Version zur Verfügung steht. Sobald der Bericht ausgeführt wird, erstellt (kompilliert) JasperReports automatisch die jasper Datei. &lt;br /&gt;
&lt;br /&gt;
Wenn die jasper Datei zur verfügung steht, wird auch nur noch diese von JasperReports verwendet und nicht mehr neu kompiliert. Falls Sie also einen Bericht weiter entwickelt haben oder eine neue Version einspielen, löschen Sie direkt die jasper Datei. Ansonsten werden die Änderungen nicht wirksam.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;im-excel-export-fehlen-felder&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-260&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im Excel Export fehlen Felder ==&lt;br /&gt;
&lt;br /&gt;
In Excel werden überlappende Elemente nicht angezeigt. Wenn also 2 Elemente übereinander liegen wird in Excel nur das oberste (welches im Vordergrund liegt) angezeigt. Hier ist besonders drauf zu achten, dass visuell 1px Abstand zwischen den Elementen Platz ist. Wenn von beiden Elementen jeweils eine Linie zu sehen ist, ist es korrekt. Wenn nicht, zählt das schon als Überlappung. Dafür im iReport Designer am besten ganz nah heran zoomen um diesen Abstand zu prüfen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel. Die beiden oberen Elemente überlappen, die unteren nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_excel.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hinweis-für-hisinone-7.0-kompatibilität&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-261&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hinweis für HisInOne 7.0 Kompatibilität ==&lt;br /&gt;
&lt;br /&gt;
Jrxml-Dateien, die unter iReport 4.1.3 entwickelt wurden und in HisInOne 7.1 funktionieren, können in 7.0. zur Fehlermeldung führen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
java.lang.NoClassDefFoundError: net/sf/jasperreports/compilers/GroovyEvaluator&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jasperreports5.1.0 (hisinone 7.0) ist die Klasse GroovyEvaluator nicht enthalten, für 7.1 ist die jasperreports-6.1.0.jar enthalten, die enthält den GroovyEvaluator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Workaround:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
language=&amp;quot;groovy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ändern in &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
language=&amp;quot;java&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;html-export-keinen-whitespace&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-262&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;HTML Export keinen whitespace ==&lt;br /&gt;
&lt;br /&gt;
Normal macht JR bei HTML-Exporten für den „Seitenumbruch“ eine Reihe von Leerzeilen. Um dies zu vermeiden, setzen Sie die Property IgnorePagination=true:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;jasperReport xmlns=&amp;quot;http://jasperreports.sourceforge.net/jasperreports&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd&amp;quot; name=&amp;quot;Kaufm. Quartalsbericht&amp;quot; language=&amp;quot;groovy&amp;quot; pageWidth=&amp;quot;2925&amp;quot; pageHeight=&amp;quot;565&amp;quot; orientation=&amp;quot;Landscape&amp;quot; columnWidth=&amp;quot;2925&amp;quot; leftMargin=&amp;quot;0&amp;quot; rightMargin=&amp;quot;0&amp;quot; topMargin=&amp;quot;0&amp;quot; bottomMargin=&amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
isIgnorePagination=&amp;amp;quot;true&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;uuids&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-263&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;UUID&#039;s ==&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio wird an jedes Element eine lange UUID angehängt, in aktuellen Versionen von SuperX/ Edustore macht das keine Probleme. In älteren Versionen bzw. in iReport 4.* schon. Damit der JasperReport abwärtskompatibel ist, muss diese gelöscht werden. Bei großen Berichten taucht diese aber unter Umständen mehrere hundert Mal auf. Hier kann in JasperSoft Studio in dem &amp;amp;quot;Source&amp;amp;quot;-Reiter des Berichtsdesigners nach folgender Regular Expression gesucht werden und diese mit einem Leerzeichen ersetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
uuid=&amp;quot;[0-9a-z-]{36}&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-dokus&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-264&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Dokus =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ahammad, S. (2010). iReport 3.7.Learn how to use iReport to create, format, and export reports. Birmingham: Packt&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Haneke, U. et al. (2010). Open Source Business Intelligence. Möglichkeiten, Chancen und Risiken quelloffener BI-Lösungen. Wien: Hanser&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Toffoli, G. (2007). The definitive guide to iReport. Berkeley, CA: Apress&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch mehr Infos (nur Englisch) erhält man unter:&amp;lt;br /&amp;gt;&lt;br /&gt;
http://jasperforge.org/plugins/project/project_home.php?projectname=ireport&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;und natürlich unsere Website:&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;http://www.superx-projekt.de/doku/entwicklung/iReport-Handbuch/main.htm&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;span id=&amp;quot;anchor-265&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16341</id>
		<title>Berichtsdesign mit JasperReports</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16341"/>
		<updated>2026-07-06T07:59:40Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Zellschutz aktivieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Berichtsdesign mit JasperReports &lt;br /&gt;
&lt;br /&gt;
von Daniel Quathamer &amp;amp;amp; Andre Knieschewski&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-installieren-und-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports installieren und konfigurieren =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;voraussetzungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* Jasperreports ist eine Laufzeitumgebung fürs Reporting, die in java-basierte Reporting Software integriert werden kann. Der Download ist hier: https://sourceforge.net/projects/jasperreports/. Dieses Paket enthält kommandozeilenbasierte Demos und die benötigten Libraries. Die Demos sind sehr nützlich und als Referenz gut nutzbar. &lt;br /&gt;
* Die Entwicklungsumgebung für JasperReports heißt &amp;amp;quot;Jaspersoft Studio&amp;amp;quot; und kann bezogen werden von https://community.jaspersoft.com/project/jaspersoft-studio. Es enthält auch obige Laufzeitumgebung.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da es ein Eclipse Plugin ist, können Sie es auch direkt in Ihrem Eclipse installieren (Menü Help → Eclipse Marketplace → Suchwort &amp;amp;quot;Jaspersoft&amp;amp;quot;. Dort können Sie aber nur die jeweils aktuelle Version installieren.&lt;br /&gt;
&lt;br /&gt;
Da der Download bei Jaspersoft nun nur für registrierte Nutzer zur Verfügung steht, hier noch ein Link für den Download: https://sourceforge.net/projects/jasperstudio/files/&lt;br /&gt;
&lt;br /&gt;
* Für altere Projekte wurde auch iReport verwendet. Da es ein paar Bugs in den verschiedenen Versionen gibt, empfehlen wir zu der Erstellung von JasperReport Berichten die iReport Version 4.1.3, auch wenn in Edustore die Version 5.1.0 verwendet wird. Download der passenden Version von iReport von http://sourceforge.net/projects/ireport (dort auf &amp;amp;quot;files&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;iReport&amp;amp;quot; klicken, dann erhalten Sie Links auf die jeweilige Version. &lt;br /&gt;
* Für Demos &amp;amp;amp; Deployment auch Apache ANT http://ant.apache.org/&lt;br /&gt;
* Java 1.8 JRE oder höher&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports und Jaspersoft Studio  ==&lt;br /&gt;
&lt;br /&gt;
JasperReports ist das Programm, das fertige Berichte erzeugen kann. Es besitzt (außer einer Vorschauansicht der Berichte) keine graphische Oberfläche. Für das Entwerfen von Berichten ist &#039;&#039;&#039;&#039;&#039;&#039;Jaspersoft Studio&#039;&#039;&#039;&#039;&#039;&#039; geeignet. Um es noch ein wenig zu veranschaulichen könnte man sagen, dass wenn ein JasperReport das Worddokument wäre, dann wäre Jaspersoft Studio z.B. Microsoft Word.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Download benötigen Sie Java 1.8 oder höher zum Ausführen. Nach dem Entpacken können Sie die Anwendung direkt starten. &lt;br /&gt;
&lt;br /&gt;
Bei JasperSoft Studio wird als Grundlage Eclipse verwendet. Wenn man JasperSoft Studio herunter lädt, erhält man automatisch Eclipse mit dabei. JasperSoft Studio kann [http://community.jaspersoft.com/project/jaspersoft-studio hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn lieber ein bereits vorhandenes Eclipse verwendet werden soll und Jaspersoft Studio dort als Plugin installiert werden soll, gibt es 2 Wege:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Unter Help → Eclipse Marketplace kann nach „Jaspersoft“ gesucht werden und das Plugin installiert werden&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:JasperReports-Handbuch_jaspersoftstudio_plugin_install1.png]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Man kann auch über die Marketplace Webseite von Eclipse das Plugin Jaspersoft Studio suchen und das Icon per Drag&amp;amp;amp;Drop nach Eclipse ziehen. Dann wird das Plugin automatisch installiert. [https://marketplace.eclipse.org/content/jaspersoft-studio Hier] die Webseite. (Bei mir hat das Drag&amp;amp;amp;Drop leider nicht funktioniert. Das kann an Linux liegen. Unter Windows wird es sicherlich funktionieren.)&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-4&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Unter Windows - &amp;amp;gt; Preferences → Jaspersoft Studio können Sie verschiedene Einstellungen vornehmen. Wichtig in der Menüpunkt &amp;amp;quot;Compatibility&amp;amp;quot;: wählen Sie dort die JR-Version, die auch Ihre Ziel-Platform enthält. &lt;br /&gt;
&lt;br /&gt;
Im Dateimanager von JasperSoft Studio gibt es Eclipse-typisch ein &amp;amp;quot;virtuelles&amp;amp;quot; Dateisystem mit dem Standardnamen &amp;amp;quot;MyReports&amp;amp;quot;, zumindest beim Speichern von Dateien. Dieses Dateisystem liegt physisch im Ordner &amp;amp;lt;&amp;amp;lt;Home-Verzeichnis&amp;amp;gt;&amp;amp;gt;/JaspersoftWorkspace/MyReports.&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen von Dateien können Sie direkt mit &amp;amp;quot;Open File&amp;amp;quot; aufs normale Dateisystem zugreifen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-5&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht des Entwurfsbereichs, in rot finden Sie Erläuterungen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_designer.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Die Unterfenster können Sie Eclipse-typisch beliebig anordnen. Oben ein Beispiel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-sortierung-und-filterung-der-datenquelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-6&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Sortierung und Filterung der Datenquelle =====&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenquelle definiert ist, kann /sollte der Bericht die Sortierung und Filterung der Daten festlegen. Dies ist etwas versteckt im Designer mittig oberhalb des Entwurfsbereichs:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie die Reiter &amp;amp;quot;Sorting&amp;amp;quot; und &amp;amp;quot;Filter Expression&amp;amp;quot;. Dort pflegen Sie beides.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsdesign-und-vorschau&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-7&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsdesign und Vorschau =====&lt;br /&gt;
&lt;br /&gt;
Im Designmodus können Sie den Bericht entwerfen, oder den XML-Quellcode. Beim Klick auf den Reiter &amp;amp;quot;Preview&amp;amp;quot; bekommen Sie eine Vorschau des Berichts:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_preview.png]]&lt;br /&gt;
&lt;br /&gt;
Oberhalb der Vorschau können Sie die Datenquelle (d.h. den &amp;amp;quot;Data Adapter&amp;amp;quot; angeben, und rechts daneben die Anwendung, die den Bericht zur Anzeige bringt (&amp;amp;quot;Viewer&amp;amp;quot;). Voreingestellt ist hier der Java-interne Viewer von JasperReports, Sie können den aber umstellen z.B: auf PDF oder Excel.&lt;br /&gt;
&lt;br /&gt;
Mit Klick auf das grüne Dreieck führen Sie den Bericht aus und erhalten die Vorschau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Es ist aufgefallen, dass beispielsweise Fettdruck in der PDF-Vorschau nicht angezeigt wird. Im Java-Preview und aus der Weboberfläche geladen, ist der Fettdruck ersichtlich. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsstruktur&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-8&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsstruktur =====&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Outline View&amp;amp;quot; sehen Sie die Struktur des Berichts, d.h. aktive &amp;amp;quot;Bänder&amp;amp;quot; und Metadaten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_outline.png]]&lt;br /&gt;
&lt;br /&gt;
Die Elemente unter &amp;amp;quot;Fields&amp;amp;quot; werden bei Nutzung in [[#3.1.3.Template erzeugen|outline|Edustore]] automatisch gefüllt. Alles weitere definieren Sie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-elemente-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-9&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Elemente bearbeiten =====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie im Design Modus ein Element markieren, wird es automatisch im Outline und in dem Reiter &amp;amp;quot;Properties&amp;amp;quot; selektiert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_properties.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Outline zeigt es lediglich, wo es sich befindet, und im Reiter &amp;amp;quot;Properties&amp;amp;quot; können Sie Formatierung, Anzeige etc. bearbeiten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-10&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport ===&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_welcome.png]] Das Paket enthält bereits die Laufzeitumgebung JasperReports, diese muss also nicht separat installiert werden. Nichtsdestotrotz empfiehlt sich der Download, denn in dem JasperReports-Paket befinden sich viele lehrreiche Demo-Berichte.&lt;br /&gt;
&lt;br /&gt;
Die Windows-Version beinhaltet auch einen Installer. Um diesen zu nutzen sind Admin-Rechte erforderlich. &lt;br /&gt;
&lt;br /&gt;
Alternativ bzw. unter Linux ist iReport ohne Installation direkt nach dem Entpacken lauffähig. Wenn Sie auch Scriptlets erstellen wollen, müssen Sie nicht nur eine Java-Laufzeitumgebung (JRE) installieren, sondern ein JDK, und die Datei $JAVA_HOME/lib/tools.jar nach iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/ireport/libs kopieren. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start unter Windows: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport.exe&lt;br /&gt;
&lt;br /&gt;
Start unter Linux: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-11&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Als erstes sollten Sie die Anwendungen einstellen, mit denen iReport generierte Berichte anzeigen soll:&lt;br /&gt;
&lt;br /&gt;
Im Menü Extras-&amp;amp;gt; Optionen wählen Sie im Reiter &amp;amp;quot;iReport&amp;amp;quot;-&amp;amp;quot;Viewers&amp;amp;quot; die entsprechenden Anwendungen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_viewers.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-12&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Der Entwurfsbereich bzw. &amp;amp;quot;Designer&amp;amp;quot; hat einen recht komplexen Aufbau. Sie können die Fenster und Seitenbereiche zwar recht flexibel anpassen, aber hier ist die Auslieferung:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_ueberblick.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Bereiche sind hervorgehoben:&lt;br /&gt;
&lt;br /&gt;
* Berichtsstruktur: Welche Seitenbereiche gibt es?&lt;br /&gt;
* Datenquelle: Welche Datenbank wird genutzt?&lt;br /&gt;
* Abfrage: Was ist die konkrete Abfrage für den Bericht?&lt;br /&gt;
* Elemente: Welche Elemente kann ich einfügen, und welche Eigenschaften haben sie?&lt;br /&gt;
* Vorschau: wie sieht der Bericht &amp;amp;quot;gedruckt&amp;amp;quot; aus?&lt;br /&gt;
* Fehlerausgabe: Jeder Bericht wird &amp;amp;quot;kompiliert&amp;amp;quot;, dazu gibt es eine Fehlerausgabe&lt;br /&gt;
&lt;br /&gt;
Im Reiter &amp;amp;quot;Preview&amp;amp;quot; kann man sich eine Vorschau des Ausdrucks anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterschiede-ireport-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-13&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterschiede iReport und JasperSoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Mit der Version 5.5 wurde die Entwicklung von iReport eingestellt, die Firma JasperSoft empfiehlt seit dem die Benutzung von JasperSoft Studio. Nach unseren Erfahrungen ist die Arbeit mit iReport 4.1.3 (die letzte stabile Version) hier und da &amp;amp;quot;leichtgewichtiger&amp;amp;quot; und einfacher, ganz zu schweigen vom Overhead, den JasperSoft Studio mit Eclipse einbringt. Besonders nervig empfanden wir es, dass JasperSoft Studio anders als iReport verschiedene Objekteigenschaften in Reitern organisiert, und bei jedem Wechsel der Markierung eines Berichtselements muss man in JasperSoft Studio wieder zum richtigen Reiter wechseln. &lt;br /&gt;
&lt;br /&gt;
Andererseits ist JasperSoft Studio kompatibel mit neueren JR-Möglichkeiten. Insbesondere bei dem Umgang mit Diagrammen gibt es in JasperSoft Studio erheblich mehr Möglichkeiten, z.B. Chart Customization. Außerdem ist es vorteilhaft, wenn Sie ohnehin Eclipse nutzen. Sie sollten für Ihre Arbeit also abwägen ob Sie die neueren Möglichkeiten im jeweiligen Bericht überhaupt brauchen, ggf. sind Sie mit iReport besser bedient. Aber das ist Geschmackssache.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Beachten Sie aber bitte: sobald Sie einen Bericht mit JasperSoft bearbeitet und gespeichert haben, ist er mit iReport 4.1.3 nicht mehr bearbeitbar, bzw. nur wenn Sie die [[Berichtsdesign_mit_JasperReports#UUID&#039;s|UUIDs]] entfernt haben.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beide Produkte befinden sich noch im Einsatz, daher hier nur ein paar Kapitel zur Handhabung der jew. Software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;handhabung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-14&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Handhabung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;preview&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-15&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Preview =====&lt;br /&gt;
&lt;br /&gt;
Bei iReport waren die Buttons für Designer und Preview immer oben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
Bei Jaspersoft Studio liegen die Buttons unten:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;palette&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-16&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Palette =====&lt;br /&gt;
&lt;br /&gt;
Die Palette ist bei iReport und Jaspersoft Studio an gleicher Position zu finden.&lt;br /&gt;
&lt;br /&gt;
Ireport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette1.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;objekt-eigenschaften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-17&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Objekt-Eigenschaften =====&lt;br /&gt;
&lt;br /&gt;
Die Objekt-Eigenschaften liegen auch an der gleichen Stelle, jedoch sind bei Jaspersoft Studio die Gruppierungen der Eigenschaften in Karteireiter unterteilt. Bei iReport ist es einfach eine lange Liste mit Unterteilungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iReport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-als-kommandozeilen-tool&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-18&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports als Kommandozeilen-Tool ==&lt;br /&gt;
&lt;br /&gt;
In der JasperReports-Distribution befindet sich ein ANT-Script, das mehrere Berichte erzeugen kann.&lt;br /&gt;
&lt;br /&gt;
 cd demo/samples&lt;br /&gt;
&lt;br /&gt;
Beispiel xmldatasource:&lt;br /&gt;
&lt;br /&gt;
cd xmldatasource&lt;br /&gt;
&lt;br /&gt;
 ant -p&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe ist:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ant_xmldatasource.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden, je nach Auswahl pdf-, Excel- oder andere Berichte erzeugt. Mit dem Target &amp;amp;quot;test&amp;amp;quot; werden alle Targets durchlaufen.&lt;br /&gt;
&lt;br /&gt;
ant test&lt;br /&gt;
&lt;br /&gt;
Achtung: manche Demos brauchen eine laufende HSQLDB (siehe demo/hsqldb).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-19&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquellen =&lt;br /&gt;
&lt;br /&gt;
Allgemein unterstützt JasperReports verschiedene Datenquellen, z.B. relationale Datenbanken, Excel, CSV oder XML. Auch Webservices sind möglich. Speziell für SuperX/ HISinOne-BI gibt es spezielle Datenquellen-Vorgaben, damit Sie die Daten auch im Server-Betrieb nutzen können. Hier also nur die allgemeinen, also SupeRX/BI-unabhängigen Quellen, wenn Sie JasperReports am lokalen Arbeitsplatz nutzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-datenbank&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-20&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Eine relationale Datenbank ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Oben links befindet sich der Dialog zum Erzeugen (1) des Data Adapter, und dann darunter die Zeile &amp;amp;quot;Database Jdbc Connection&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_data_adapter1.png]]&lt;br /&gt;
&lt;br /&gt;
Dort geben Sie dann die jdbc-spezifischen Daten an (Datenbanktyp, Name etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: die Nutzung setzt eine direkte Datenbankverbindung zum DB-Server voraus, an vielen Unternehmenanwendungen wird dies nicht mehr erlaubt. Ggf. fragen Sie bei Ihren Systemadministrator/innen nach. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-excel-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-21&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Excel-Datei ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-22&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Eine Excel Datei ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Excel Datei hat vier Spalten und eine führende Zeile mit den Spaltenüberschriften. Achten Sie darauf, dass die Datentypen der Spalten in Excel dem Inhalt entsprechen. Hier die Spalten:&lt;br /&gt;
&lt;br /&gt;
* Frage Nr. &lt;br /&gt;
* Text &lt;br /&gt;
* Mit_ohne_schule &lt;br /&gt;
* Summe&lt;br /&gt;
&lt;br /&gt;
Aus der Excel-Datei erzeugen Sie einen &amp;amp;quot;Data Adapter&amp;amp;quot;. Der Data Adapter vom Typ &amp;amp;quot;Excel File&amp;amp;quot; hat ein paar Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können Sie in einem Berichtsdesign die Datenquelle definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie wählen dort oben links zunächst den &amp;amp;quot;Data Adapter&amp;amp;quot; aus (1), und klicken dann rechts auf &amp;amp;quot;Read Fields&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_3.png]]&lt;br /&gt;
&lt;br /&gt;
Aus der Datenquelle werden dann die Datenfelder (3) und Inhalte (Reiter &amp;amp;quot;Data preview&amp;amp;quot;) automatisch übernommen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-23&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsdesign =&lt;br /&gt;
&lt;br /&gt;
Das Erstellen eines Berichtes erleichtert JasperReports wesentlich. Dennoch wird man sich damit etwas beschäftigen müssen, um ein vernünftiges Ergebnis zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Zuerst muss man den Bericht öffnen. Das geschieht über „Datei“ → „Open“ → Bericht auswählen → auf „Öffnen“ klicken. Nun noch oben links die für diesen Bericht erstellte Datenquelle auswählen und man kann loslegen.&lt;br /&gt;
&lt;br /&gt;
JasperReports bezeichnet die Ausgabebereiche als Bänder. Ein Band ähnelt einer Zeile. Es reicht über die komplette Seitenbreite. Die Höhe kann dabei selbst bestimmt werden und wird dem Informationsgehalt angepasst. Das Band „Detail 1“ ist so etwas wie das Hauptband, in dem dann die Informationen zeilenweise ausgegeben werden. Es wird also eine Schleife über die Daten (Tabelle) ausgeführt und für jeden Datensatz ein mal das Detail Band ausgegeben. Die linke Spalte könnte z.B so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-iReport_Leiste_Neu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, das das Band „Detail 1“ aktiv ist und die anderen wie „Title“ noch nicht. In den Gruppen „Fields“ und „Variablen“ befinden sich die Felder (Spalten) aus der Ergebnistabelle und interessante Variablen wie Seitenzahl, die man nun einfach in das bestehende Band „Detail 1“ per „Drag and Drop“ ziehen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Feld_Name.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man z.B. in der Gruppe Fields das Feld „Name“ hat und dies in das Band „Detail 1“ zieht,befindet sich ein Platzhalter im Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie dann auf „Preview“ klicken, wird eine Vorschau des Berichts angezeigt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Designer_Preview.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden alle Namen aufgelistet, die in der Datenquelle vorhanden sind:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können das Layout der Ausgabe (Schriftart, Größe) über die Eigenschaften des Feldes variieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-24&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um wieder zurück in den Entwicklermodus zu kommen klickt man einfach wieder auf den Reiter &amp;amp;quot;Designer&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Bänder „Title“, „Page“ usw. kann man mit einem Rechtsklick und dann „Add Band“ hinzufügen und auch wieder mit einem rechtsklick und dann „Delete Band“ wieder entfernen. Diese Bänder haben bestimmte Eigenschaften. Z.B. Band „Titel“ wird nur einmal auf der ersten Seite abgebildet, Band „Page Header/Footer“ auf jeder Seite am Anfang/Ende.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-und-filtern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-25&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung und Filtern ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise verarbeitet JasperReports die Datensätze zeilenweise in der Reihenfolge, in der sie bereitgestellt werden. Sie können im Entwurfsmodus die Sortierung bzw. Filterung der Datensätze anpassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort1.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf das Icon mit der Tonne und Sie gelangen in die Einstellungen für die Datenquelle. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort2.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button Sortieren können Sie nach allen Feldern des Berichts aufsteigend bzw. absteigend sortieren.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button &amp;amp;quot;Filter expression&amp;amp;quot; können Sie eine Formel definieren, um die Gültigkeit von Datensätzen zu definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Z.B. die Expression &amp;amp;quot;.contains(&amp;amp;quot;12&amp;amp;quot;) würde auf alle Datensätze filtern, die im Feld die Zeichenkette &amp;amp;quot;12&amp;amp;quot; enthalten. Weitere Infos im Kapitel zum [[#2.9.Expression Editor|outline|Expression Editor]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;listen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-26&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Listen ==&lt;br /&gt;
&lt;br /&gt;
Listen lassen sich einfach erstellen, indem man die jeweiligen Felder ins Detail-Band zieht. Manchmal kann es vorkommen, dass Textfelder &amp;amp;quot;überlaufen&amp;amp;quot;, d.h. die rechteckige Box, die das Feld markiert, ist zu klein für den Feldinhalt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_listen_stretch.png]]&lt;br /&gt;
&lt;br /&gt;
In diesem Falle muss man das Attribut des jew. Felder (hier &amp;amp;quot;Fächergruppe&amp;amp;quot;) &amp;amp;quot;Text Field properties &amp;amp;gt; Stretch with overflow&amp;amp;quot; ankreuzen.&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn das Feld Teil einer tabellarischen Auflistung ist, muss man die anderen Element mit der Eigenschaft &amp;amp;quot;Stretch type → Relative to tallest object&amp;amp;quot; versehen, hier z.B. die Felder &amp;amp;quot;Studienfeld&amp;amp;quot; und &amp;amp;quot;Studienbereich&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 Bei vielen Zeilen ist es übersichtlicher, jede zweite Zeile farbig zu hinterlegen. Dieser Trick ist im Abschnitt Tabellengestaltung [[#2.4.3.Zeilen alternierend einfärben|outline|erläutert]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-27&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ==&lt;br /&gt;
&lt;br /&gt;
Wichtige Vorbemerkung zum Gruppieren: JasperReports setzt bei der Gruppierung voraus, dass die Datensätze der Datenquelle nach den Gruppierungsmerkmalen sortiert sind. Alle Merkmale, nach denen Sie gruppieren, sollten also entweder direkt in der Datenquelle sortiert sein, oder in JasperReports im [[#2.1.Sortierung und Filtern|outline|Berichtsentwurf]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppen-definieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-28&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppen definieren ===&lt;br /&gt;
&lt;br /&gt;
Zu den Standardbändern kann man nun auch noch selbst definierte Gruppen hinzufügen. Mit einem Rechtsklick auf den obersten Knoten → „Add Report Group“ öffnet sich ein Fenster in dem man der Gruppe einen Namen geben kann und das Objekt wählt für das die Gruppe erstellt wird.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie mehrere Gruppierungsebenen benötigen, dann sollte die Reihenfolge des Hinzufügens der Gruppen &amp;amp;quot;top-down&amp;amp;quot; verlaufen, d.h. zuerst die oberste Gruppierung hinzufügen, dann die Gruppe darunter usw.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
In dem folgenden Beispiel wird die Gruppe „Monat“ gewählt und in dem nächsten Schritt mit Header und Footer hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
Man zieht das Feld „Namen“ in das Band „Detail“ und &amp;lt;span id=&amp;quot;anchor-29&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Monat“ in das erstellte Band „Monat Group Header 1“. Aus der Palette rechts oben (wenn nicht vorhanden bekommt man es über „Fenster“ → „Palette“) zieht man einen „Static Text“ in das Band „Monat Group Header 1“ vor der Ausgabe des Monats, benennt das Feld „Monat:“ und noch eine Linie darunter. Zusammen sollte es so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man nun auf „Preview“ klickt erhält man als Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-30&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Damit eine Gruppe nicht durch einen Seitenumbruch auseinandergerissen wird, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;lt;span id=&amp;quot;anchor-31&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
Sie können auch angeben daß vor jedem Gruppierungswechsel ein Seitenumbruch ausgeführt wird:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_new_page.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit &amp;amp;quot;Start on a new page&amp;amp;quot; wird eine neue Seite bei jedem Gruppenwechsel begonnen. Speziell beim Export nach Excel kann dies in Tandem mit Arbeitsblättern nutzen, siehe [[#2.19.2.Excel-Export in einzelne Tabellenblätter|outline|unten]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppensummen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-32&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppensummen ===&lt;br /&gt;
&lt;br /&gt;
Gruppensummen kann man im Kopf oder Fuß einer Gruppe anlegen. Sie aktivieren z.B. den Gruppenfuß im Report Inspector, und ziehen dann das Feld Summe in den Entwurfsbereich. Beim &amp;amp;quot;Fallenlassen&amp;amp;quot; werden Sie gefragt, ob Sie den jew. Wert oder eine Aggregatfunktion nutzen wollen. Für Zwischensummen wählen Sie &amp;amp;quot;Sum&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_designer_add_group_foot1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich setzen Sie noch ein Label bzw. &amp;amp;quot;Static Text&amp;amp;quot;-Element rechtsbündig davor, und setzen beide Elemente fett:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_foot2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-ohne-eigenes-band&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-33&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ohne eigenes Band ===&lt;br /&gt;
&lt;br /&gt;
Bei der Gruppierung in JasperReports wird in der Regel ein horizontales Band für die Gruppierungsebene angelegt. Das führt dazu, daß man zeilenorientiert gruppiert. In manchen Fällen kann es gewünscht sein, in den Spalten einer Tabelle zu gruppieren. Hier ein Beispiel für das Ziel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten1_vorlage.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird in den Zeilen nach dem Merkmal &#039;&#039;&#039;Fach&#039;&#039;&#039; gruppiert. Zusätzlich wird noch in den Spalten nach Fachsemestern gruppiert. Um dieses Layout zu realisieren, muss man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie ein Column Header Band, und ein Group Footer-Band für die Gruppierungsebene Fach. Warum Group Footer? Weil innerhalb des Fachs nochmal gruppiert werden soll, und daher erst nach dem Gruppieren nach Fach nach Fachsemestern gruppiert wird. Ein Detail-Band gibt es hier nicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten3_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie eine neue Variable z.B. mit dem Namen &amp;amp;quot;fs1&amp;amp;quot; für erstes Fachsemester, und geben Sie der Variable folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten2_variable_1fs.png]]&lt;br /&gt;
&lt;br /&gt;
 Zur Erläuterung: Die Variable filtert die Datensätze gemäß dem Ausdruck in Variable Expression, und tut dies auf der Gruppierungsebene &amp;amp;quot;fach&amp;amp;quot;. Die Variable Expression ist eine für unsere Zwecke sehr nützliche Java-Kurzfassung einer IF-THEN-Bedingung, und meint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn der Inhalt des Feldes &amp;amp;quot;Anzahl Fachsemester&amp;amp;quot; gleich 1 ist, dann gib die Summe der jew. Studierenden aus, wenn nicht, dann gib 0 aus.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Analog kann man noch die Variable &amp;amp;quot;fsgr13&amp;amp;quot; für &amp;amp;quot;Fachsemester &amp;amp;gt; 13&amp;amp;quot; anlegen. &lt;br /&gt;
&lt;br /&gt;
Danach kann man die Variablen &amp;amp;quot;fs1&amp;amp;quot; und &amp;amp;quot;fsgr13&amp;amp;quot; in das Band &amp;amp;quot;Fach Group Footer 1&amp;amp;quot; ziehen, und noch das Feld &amp;amp;quot;Summe&amp;amp;quot; für die Gesamtsumme. Dann tragen wir im Column Header Band noch die Spaltenüberschriften ein. Insgesamt sieht Berichtsentwurf dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten4_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten5_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fertig. Man könnte nun noch weitere Fachsemester-Intervalle einfügen, oder z.B. eine Summe der Studierenden in der Regelstudienzeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-34&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nach Feldern gruppieren wollen, die es in Ihrer Datenquelle gar nicht gibt (z.B. nach Aggregationen von Mekrmalskombinationen), dann können Sie auch Variablen mit speziellen Formeln anlegen, und diese dann in die Gruppierung aufnehmen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wichtig: Wenn die Gruppierungsvariable nicht im Summary Band genutzt wird, muss der resettype der Variable auf „None“ gesetzt werden. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Abschnitt zu [[#2.5.4.Kreuztabellen mit virtuellen Dimensionen|outline|Kreuztabellen]] wird z.B. gezeigt, wie die Fächer Mathe, Physik und Biologie in einen neuen Wert &amp;amp;quot;Naturwissenschaften&amp;amp;quot; transformiert werden.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variablen-und-gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-35&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Variablen und Gruppierung ===&lt;br /&gt;
&lt;br /&gt;
Beim Anlegen von Gruppen-Bändern und beim Ziehen von Feldern in das jew. Gruppenband legt JR automatisch eine Variable an, mit der jew. Aggregationsfunktion. Diese Variable hat folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Expression: das Feld, aus dem die Variable gespeist wird&lt;br /&gt;
&lt;br /&gt;
Calculation: Die Aggregatfunktion, z.B. &amp;amp;quot;sum&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reset Type: Die Gruppierungsebene&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Variable in Textfeldern des Gruppenbandes nutzen, gibt sie jeweils den richtigen Wert an, egal ob Gruppenkopf oder Fuß.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie aber mit &amp;amp;quot;Print-when-Expressions&amp;amp;quot; im Gruppenband arbeiten und auf die Variablen zugreifen, funktionieren diese standardmäßig nur im Gruppenfuß, weil erst am Ende der Gruppe der Wert bekannt ist. In diesem Fall müssen Sie der Variable auch eine &amp;amp;quot;Initial Value Expression&amp;amp;quot; mit dem jew. Feld geben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen-auf-gruppenebene&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-36&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen auf Gruppenebene ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf der Gruppenebene Berechnungen, z.B. Mittelwerte, durchführen wollen, gibt es einige Fallstricke: &lt;br /&gt;
&lt;br /&gt;
* Die in JR eingebauten Funktionen wie &amp;amp;quot;avg&amp;amp;quot; arbeiten auf Gruppenebene nicht immer exakt.&lt;br /&gt;
* Komplexere Formeln auf Gruppenebene in Variablen abzubilden und diese dann das Quelle für Textfelder zu nehmen hat bei uns nicht geklappt. &lt;br /&gt;
&lt;br /&gt;
Hier unser Vorgehen:&lt;br /&gt;
&lt;br /&gt;
* Definieren Sie auf der Ebene der jew. Gruppe eine Variable mit der Gesamtsumme, und eine mit der Summe der zu mittelnden Werte. Diese Variablen haben als &amp;amp;quot;reset Type&amp;amp;quot; die jew. Gruppierungsebene.&lt;br /&gt;
* Im Textfeld, das Sie ausgeben, verwenden Sie dann die Berechnungsformel, z.B. einen Quotienten. Verwenden Sie für die Berechnung nicht eine neue Variable, sondern fügen Sie die Formel direkt in das Textfeld ein.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel: Wir haben eine Absolventenliste pro Studiengang und Semester, darin werden dann Mittelwerte von Abschlussnoten gebildet. Die Datenquelle hat summierte Zeilen pro Note:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_daten.png]]&lt;br /&gt;
&lt;br /&gt;
Im obigen Beispiel haben wir in der Zeile 5 eine Absolventin mit der Note 1,1. In der letzten Zeile haben wir zwei Absolventinnen mit der Note 1,2.&lt;br /&gt;
&lt;br /&gt;
Würden wir den Notenschnitt manuell berechnen, müßten wir die Notensumme (Spalte H*K) ermitteln, hier wäre der Wert 32,3. Die Summe der Absolventen in Spalte K wäre 16, d.h. der Notenschnitt wäre 32,3/16 = 2,02.&lt;br /&gt;
&lt;br /&gt;
In JasperReports wäre der Entwurf wie folgt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir haben eine Variable &amp;amp;quot;Summe_1&amp;amp;quot; auf der Ebene des Semester-Bandes, die im obigen Excel der Summe der Spalte &amp;amp;quot;Summe&amp;amp;quot; entspricht. &lt;br /&gt;
&lt;br /&gt;
Außerdem haben wir eine Variable &amp;amp;quot;Notensumme&amp;amp;quot; mit der Formel $F{Note}*$F{Summe}, auf der Ebene der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Achten Sie drauf, dass Sie als Typ &amp;amp;quot;java.lang.Double&amp;amp;quot; nehmen, damit Sie keine Rundungsfehler bekommen.&lt;br /&gt;
&lt;br /&gt;
Der Quotient wird dann im Textfeld gebildet, das den Notenschnitt auf Semesterebene enthält, und auf zwei Nachkommastellen gerundet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld selbst muss bei &amp;amp;quot;Evaluation time&amp;amp;quot; den Wert &amp;amp;quot;Group&amp;amp;quot; haben, und bei &amp;amp;quot;Evaluation group&amp;amp;quot; dann den Wert der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Und hier das Ergebnis in der Vorschau:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_vorschau.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert 2,02 stimmt mit unserer manuellen Berechnung überein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;tabellengestaltung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-37&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Tabellengestaltung ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;summen-seitenzahlen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-38&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Summen, Seitenzahlen ===&lt;br /&gt;
&lt;br /&gt;
Um es noch ein wenig interessanter zu gestalten fügt man noch das Gehalt hinzu, summiert es für die Monate und gesamt. Dazu noch die Seitenanzahl und einen Seitenzähler und eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
Das Gehalt bekommt man, indem man das Gehalt aus den Feldern neben den Namen zieht. Das selbe macht man auch nochmal in das Band „Monat Group Footer 1“ und wählt hier die Aggregation „Sum“ aus, um die Summe zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Um einen Seitenzähler zu erhalten fügt man zunächst das Band „Page Footer“ hinzu und legt dort die Variable „PAGE_NUMBER“ ab. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Page_Number.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Eigenschaften“ → „Text field properties“ → „Evaluation Time“ wählt man hier „Now“ um die aktuelle Seitenanzahl zu bekommen und „Report“ um die gesamte Seitenanzahl zu erhalten. In dem Beispiel ist die Ausgabe z.B.: „Seite 2 von 6“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-steuern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-39&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche steuern ===&lt;br /&gt;
&lt;br /&gt;
Damit die drei Personen im Monat 2 nicht durch einen Seitenumbruch auseinandergerissen werden, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen (hier „Monat“) und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel im Designermodus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_1_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_2_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilen-alternierend-einfärben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-41&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilen alternierend einfärben ===&lt;br /&gt;
&lt;br /&gt;
Um nun bei mehreren Datensätzen auch noch den Überblick in den Zeilen zu behalten kann man jetzt auch noch den Hintergrund der Zeile abwechselnd farbig gestalten. Dazu Zieht man aus den „Reports Elements“ das „Rectangle“ in das „Detail 1“ Band&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und passt es der Größe des Bandes an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Hintergrundfarbe kann man nun in den Eigenschaften in „Backcolor“ ändern. Damit dies nun nicht in jeder Zeile erscheint, sondern abwechselnd, fügt man noch in den Eigenschaften in „Print When Expression“ den Wert &amp;lt;span id=&amp;quot;anchor-42&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-43&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Boolean.valueOf( $V{PAGE_COUNT}.intValue() % 2 == 0 ) ein. &lt;br /&gt;
&lt;br /&gt;
Zur erläuterung:&lt;br /&gt;
&lt;br /&gt;
Die Variable „PAGE_COUNT“ zählt die Anzahl der Datensätze hoch. Mit „% 2“ wird diese Variable durch 2 geteilt und nur der Restwert ausgegeben. Als Ergebnis erhält man also in jeder ungeraden Zeile eine 1. Dieses Ergebnis wird nun mit der „0“ verglichen. Wenn dieser Ausdruck/Vergleich (expression) wahr ist, wird das Objekt, in diesem Fall der Hintergrund, angezeigt. Bei diesem Ausdruck erhält also jede gerade Zeile den Hintergrund. Möchte man lieber die ungeraden Zeilen hervorheben, schreibt man einfach eine 1 anstelle der 0 hinter „==“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis bei einer ungeraden Hervorhebung sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel welches bereits in der Uni Mannheim benutzt wird ist die Ausgabe einer Rechnungslegungsliste. Das Beispiel zeigt nicht nur ein aufwändigeres Layout, sondern auch, wie man gruppierte Tabellen anlegt: Dabei sind die Zeilen der Tabelle im Detail 1 Band, und die Zwischensummen in den Gruppierungs-Bändern. Die Spaltenüberschriften der Tabelle befinden sich im untersten Group-Header-Band. Im Designermodus sieht das ganze folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rahmenlinien-vorausschauend-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-44&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rahmenlinien &#039;&#039;&#039;vorausschauend setzen&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Sowohl bei Text- als auch bei Static-Fields findet sich ein eigener Reiter zum setzen von Rahmeneigenschaften. Dort wird der Abstand des Inhaltes zum Rahmen des jeweiligen Feldes definiert, sowie Rahmenlinien gesetzt.&lt;br /&gt;
&lt;br /&gt;
Beim Setzen von Rahmenlinien wird empfohlen, dass bei nebeneinanderliegenden Feldern, welche durch eine Rahmenlinie getrennt werden, jeweils in beiden Feldern Rahmenlinien gesetzt werden und nicht nur in einem der beiden Felder. Denn beim Export in das PDF-Format ist ersichtlich ob nur eines der Felder oder beide Felder Rahmenlinien besitzen. Falls dies also nicht einheitlich umgesetzt wird, erscheinen Rahmenlinien an entsprechenden Stellen dünner beziehungsweise dicker (bei Excel-Dokumenten tritt dieser Effekt nicht auf):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_borders2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-45&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterberichte  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: In Edustore funktionieren Unterberichte nur, wenn der Dateiname der jrxml-Datei mit &amp;amp;quot;_xmlsource.jrxml&amp;amp;quot; endet. Dadurch wird dem Servlet mitgeteilt, dass die Datenquelle für den Bericht ein XML-Datenstrom ist. Dabei ist mit Performanceeinbußen zu rechnen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem muss beim Berichtsdesign die gleiche JasperReports Version genutzt werden wie im Server. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden eine Anleitung zur Erstellung eines Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-46&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Hauptberichts ===&lt;br /&gt;
&lt;br /&gt;
 Erzeugen Sie für den Unterbericht mit Hilfe des [[#2.1.3.Template erzeugen|outline|Template]][[#2.1.3.Template erzeugen|outline|-Generators]] in Edustore einen leeren Bericht, und speichern Sie diesen am besten im gleichen Verzeichnis wie den Hauptbericht. &lt;br /&gt;
&lt;br /&gt;
 Ziehen Sie dann das Subreport-Werkzeug in den Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
Ggf.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport0_tool.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es startet der Subreport-Assistent. Hier geben Sie zunächst den Dateinamen oben an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt geben Sie eine Datenbank-Verbindung an. Hier wählen Sie &amp;amp;quot;Don&#039;t use any connection...&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden Parameter angezeigt, zu diesem Zeitpunkt gibt es aber noch keine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einfach auf &amp;amp;quot;Weiter&amp;amp;quot;. Sie werden dann aufgefordert, einen Dateipfad für den Unterbericht zu vergeben. IReport legt diesen standardmäßig in das gleiche Verzeichnis wie den Hauptbericht. Für Edustore sollten Sie dies auch tun.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass Sie beim Unterbericht nicht die *.jrxml-Datei verlinken, sondern die *.jasper-Datei, d.h. den kompilierten Report.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach sehen Sie einen Platzhalter für den Unterbericht im Entwurfsbereich. Beachten Sie bitte daß die Größe des Platzhalters unwichtig ist: die Ausdehnung des Unterberichts wird im Unterbericht definiert. Der Platzhalter ist lediglich wichtig, um die linke obere Ecke des Unterberichts festzulegen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Rechts neben dem Platzhalter sehen Sie die Eigenschaften des Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_none.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Unterbericht arbeitet meist mit Übergabe von Parametern, z.B. will man vom Hauptbericht den Inhalts des Feldes &amp;amp;quot;Kostenstelle&amp;amp;quot; an den Unterbericht übergeben. Dies müssen wir in den Eigenschaften des Unterberichts &amp;amp;quot;deklarieren&amp;amp;quot;. In der Zeile &amp;amp;quot;Parameters&amp;amp;quot; steht nach Bedienung des Assistenten noch kein Wert. Für die Datenquelle XML gibt es außerdem einen Parameter &amp;lt;span id=&amp;quot;anchor-47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_DATA_DOCUMENT, der immer übergeben werden muss: Die XML-Datenquelle des Hauptberichts. Hier eine Übersicht, welche Parameter übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport10_parameters.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Zeilen mit Großschreibung sind die vorgegebenen Werte, der Parameter &amp;amp;quot;Kst&amp;amp;quot; speist sich aus dem JR-Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;. Das Beispiel zeigt, daß der Name für den Parameter beliebig ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis für Unterberichte mit Dezimalzahlen&#039;&#039;&#039;: Wenn der Unterbericht mit Zahlen mit Nachkommastellen arbeitet, und Sie in JasperReports testen, dann müssen Sie noch die [[#3.1.2.Datenquelle erzeugen|outline|Parameter]] &amp;lt;span id=&amp;quot;anchor-48&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_LOCALE und &amp;lt;span id=&amp;quot;anchor-49&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_NUMBER_PATTERN wie folgt übergeben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_number.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterbericht-mit-header-und-footer-vom-hauptbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-50&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterbericht mit Header und Footer vom Hauptbericht ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Unterbericht in einem normalen Gruppen- oder Detail-Band liegt, wird der Header und Footer vom Hauptbericht automatisch mitbenutzt. In vielen Fällen möchte man aber den Unterbericht nur ein mal ausgeben und legt ihn daher in das Summery-Band. Hier wird Standardmäßig der Header und Footer nicht ausgegeben oder wiederholt. Möchte man aber z.B. die Seitenzahl die im Footer liegt weiterhin angezeigt bekommen, gibt es eine Eigenschaft vom Hauptbericht, die man nur aktivieren braucht. Diese Eingenschaft nennt sich: Summary with Page Header and Footer.&lt;br /&gt;
&lt;br /&gt;
Also einfach auf den Hauptbericht auswählen und in Eigenschaften diesen Punkt aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport_header_footer.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-unterberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-51&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Unterberichts ===&lt;br /&gt;
&lt;br /&gt;
Nun können wir den Unterbericht öffnen, indem wir über dem Platzhalter die rechte Maustaste betätigen und &amp;amp;quot;Open Subreport&amp;amp;quot; wählen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport3_open.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es erscheint ein neues Fenster mit einem leeren Entwurfsbereich. Sie könnten nun loslegen und im Detailbereich verschiedene Elemente gestaltet. Aber man muss bedenken daß ein Unterbericht für jeden Datensatz im Hauptbericht ausgeführt und eingebettet wird. Daher wird man vermutlich in den meisten Fällen im Unterbericht auf einen Filter zurückgreifen. Hier kommt dann wieder der oben genannte Parameter, z.B. &amp;amp;quot;Kst&amp;amp;quot; ins Spiel: Als ersten deklarieren wir den Parameter im Unterbericht, indem wir Links bei den Parametern die rechte Maustaste drücken, und &amp;amp;quot;Hinzufügen...&amp;amp;quot; wählen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nennt IReport den Parameter &amp;amp;quot;parameter1&amp;amp;quot;. Rechts können wir in den Eigenschaften des Parameters den Namen ändern, und &amp;amp;quot;Use as a prompt&amp;amp;quot; abwählen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Änderungen sind nicht notwendig.&lt;br /&gt;
&lt;br /&gt;
Wir ergänzen nun die &amp;amp;quot;Report Query&amp;amp;quot; [[Datei:JasperReports-Handbuch_report_query.png]] des Unterberichts von&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/ergebnisse/ergebnis/ergebniselement/sqlerg/row&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
um einen Filter, der mit der Abfragesprache XPATH formuliert wird. Im obigen Beispiel würden wir jetzt nur die Zeilen der Datenquelle auswählen, wo die Nummer der Kostenstelle mit der des Hauptberichts übereinstimmt. Wir erinnern uns: letztere steht im Parameter &amp;amp;quot;Kst&amp;amp;quot;. Anhand der vorhandenen Report Query können wir sehen, dass die Kostenstelle in den Spalten (&amp;amp;quot;col&amp;amp;quot;) mit der id=5 steht. Der Ausdruck wird also um den Filter &amp;amp;quot;&#039;&#039;[col[@id=&amp;amp;quot;5&amp;amp;quot;]/wert=&#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-52&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;$P{Kst}&#039;]&#039;&#039;&amp;amp;quot; ergänzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Nun ändern wir im Entwurfsbereich des Unterberichts das Layout: für das aktuelle Beispiel wollen wir im Unterbericht eine Summe der Beträge für jede Kostenstelle ausgeben. Dazu müssen wir zunächst eine Gruppierung nach Kostenstelle hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Gruppierungsassistenten wählen wir das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot; als Gruppierungsmerkmal, und im nächsten Schritt sagen wir, daß ein Gruppenkopf hinzugefügt werden soll:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist die Gruppierung als Band verfügbar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In die Gruppierung ziehen wir dann das Feld &amp;amp;quot;Summe&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim &amp;amp;quot;Loslassen&amp;amp;quot; des Feldes werden wir gefragt, ob wir eine Aggregatfunktion nutzen wollen; wir wählen hier die Summierung:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist das Feld verfügbar. Wir setzen noch das Label &amp;amp;quot;Summe:&amp;amp;quot; davor. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Den Detailbereich brauchen wir eigentlich nicht, wir können den ganz schmal machen. Danach speichern wir den Unterbericht, und gehen wieder zum Hauptbericht. Hier setzen wir den Unterbericht direkt unter das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport15_align.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Bericht mit der jew. Datenquelle ausführen. Das Ergebnis läßt je nach Datenmenge ein bisschen auf sich warten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport20_erg.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einhängen-des-berichts-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-53&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einhängen des Berichts in Edustore ===&lt;br /&gt;
&lt;br /&gt;
Damit der Bericht auch im Server nutzbar ist, muss noch folgendes eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
* Der Server sollte ausreichend RAM haben (Variable CATALINA_OPTS), weil hier XML als Datenquelle verarbeitet wird.&lt;br /&gt;
* Im Hauptbericht gibt es einen neuen Parameter SUBREPORT_DIR. Setzen Sie hier den Defaultwert (&amp;amp;quot;Default value Expression&amp;amp;quot; auf den Pfad, in dem die Dateien liegen (z.B. &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-54&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-55&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/home/superx/webserver/tomcat/webapps/superx/WEB-INF/reports/&amp;amp;quot;).&lt;br /&gt;
* Kopieren Sie die .jasper Datei des Unterberichts in dieses Verzeichnis. &lt;br /&gt;
* Bei Nutzung von Versionskontrollsystemen haben Sie die *.jasper-Dateien vermutlich ignoriert (gitignore / svnignore). Sie müssen die Dateien daher mit &amp;amp;quot;-f&amp;amp;quot; adden / committen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorsicht beim Einsatz von JasperSoft Studio: Die Anwendung erzeugt bei der Einzelbearbeitung eines Unterberichts nicht automatisch eine entsprechende .jasper-Datei beim Previewen des Hauptberichts (iReport machte das). Man muss also in Jaspersoft Studio im Bearbeitungsfenster oben immer &amp;amp;quot;Compile Report&amp;amp;quot; anklicken, um eine neue .jasper Datei zu erzeugen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-56&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedienung-des-assistenten-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-57&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedienung des Assistenten für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Für die Erstellung von Kreuztabellen gibt es einen eigenen Assistenten. Vorab sollte man aber zunächst ein &amp;amp;quot;Summary&amp;amp;quot;-Band erzeugen. Im folgenden Beispiel haben wir alle anderen Gruppierungen und Detail-Bands entfernt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir das Crosstab-Element in den Summary Band. Es erscheint der Assistent. Als Datenquelle nutzen wir die Abfrage des Berichts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als nächsten definieren wir die Zeilendimension des Berichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen z.B. die Abschlüsse. Danach definieren wir die Spalten-Dimension:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;. Danach definieren wir das Merkmal, das in den Zellen ausgegeben werden soll. Dies ist die Summe der Studierenden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluß kann man ein Layout festlegen, und Zeilen- und Spaltensummen erzeugen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich erscheint ein neues Fenster mit der Kreuztabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können wir nun Spaltenbreiten und Überschriften ändern:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab9.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab8.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nachbearbeitung-des-kreuztabellen-assistenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-58&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nachbearbeitung des Kreuztabellen-Assistenten ===&lt;br /&gt;
&lt;br /&gt;
Der Assistent liefert nur einfache Kreuztabellen, ggf. wollen Sie diese im Nachhinein anpassen. Sie können z.B. mehr als zweistufige Hierarchien in Kreuztabellen einrichten, indem Sie im Report Inspector manuell neue Merkmale anlegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_new_row.png]]&lt;br /&gt;
&lt;br /&gt;
Auch bei &amp;amp;quot;Measures&amp;amp;quot; können Sie neue &amp;amp;quot;abhängige Variablen&amp;amp;quot; anlegen, z.B. wenn Sie in einer Tabelle mit den Zeilen &amp;amp;quot;Ausgaben&amp;amp;quot; und &amp;amp;quot;Einnahmen&amp;amp;quot; die Ausgaben mit negativem Vorzeichen versehen wollen und dann saldieren wollen: Sie würden ein neues &amp;amp;quot;Measure&amp;amp;quot; anlegen, mit der Calculation=&amp;amp;quot;Sum&amp;amp;quot;, Typ &amp;amp;quot;java.lang.Float&amp;amp;quot;, und der folgenden Expression bekommen alle Ausgaben ein negat. Vorzeichen:&lt;br /&gt;
&lt;br /&gt;
($F{Kostenart}==&amp;amp;quot;Ausgaben&amp;amp;quot;)?-$F{Betrag}:$F{Betrag}&lt;br /&gt;
&lt;br /&gt;
Das neue Measure können Sie dann in die Zeilen- oder Spaltensummen ziehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-im-gruppenfuß&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-59&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen im Gruppenfuß ===&lt;br /&gt;
&lt;br /&gt;
Kreuztabellen lassen sich nicht nur im Summary Band nutzen, sondern auch in Gruppenfuß/Gruppenkopf-Bändern. Wenn Sie die Kreuztabelle z.B. in einen Groupfooter legen, müssen Sie den &amp;amp;quot;Reset type“ der Gruppe anpassen. Das machen Sie indem Sie ein rechts klick auf die Kreuztabelle machen und dann auf &amp;amp;quot;Crosstab data&amp;amp;quot; klicken. Dort stellen Sie den &amp;amp;quot;Reset type&amp;amp;quot; auf &amp;amp;quot;Group&amp;amp;quot; und die &amp;amp;quot;Reset group&amp;amp;quot; auf die Gruppe in der die Kreuztabelle gelegt wurde. Wenn Sie das nicht machen funktioniert der Report nicht! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-60&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Sie können auch virtuelle Dimensionen in Kreuztabellen nutzen, indem Sie ähnlich wie bei der [[#2.2.4.Gruppierung ohne eigenes Band|outline|Gruppierung ohne eigenes Band]] mit Variablen arbeiten. &lt;br /&gt;
&lt;br /&gt;
Um z.B. alle Studienfächer im Feld &amp;amp;quot;1. Fach&amp;amp;quot; auszugeben, und nur die Fächer Mathematik, Physik und Biologie zu einem Fach &amp;amp;quot;Naturwissenschaften&amp;amp;quot; zusammenzufassen, legen Sie eine neue Variable &amp;amp;quot;fachgruppe&amp;amp;quot; an, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell.png]]&lt;br /&gt;
&lt;br /&gt;
In der Kreuztabelle können Sie nun z.B. in den Zeilen die Variable &amp;amp;quot;fachgruppe&amp;amp;quot; auswählen, und erhalten eine Tabelle mit der &amp;amp;quot;künstlichen&amp;amp;quot; Zeile &amp;amp;quot;Naturwissenschaften&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-in-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-61&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung in Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Zeilen- oder Spaltendimensionen werden in Kreuztabellen immer alphabetisch sortiert, egal wie die Sortierung in der Datenquelle ist. Das ist in der Regel kein Problem, aber wenn z.B. eine Zeilendimension anders sortiert werden soll, geht das nicht ohne weiteres. Hier ein Problembeispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_falsch.png]]&lt;br /&gt;
&lt;br /&gt;
Das Balkendiagramm übernimmt die Sortierung nach dem Schlüssel der Gehaltsgruppe aus der Datenquelle. In der Kreuztabelle wird die Zeilendimension &amp;amp;quot;Bezeichnung der Gehaltsgruppe&amp;amp;quot; angezeigt, und diese sortiert alphabetisch, was an dieser Stelle aber unsinnig ist: Der Eintrag &amp;amp;quot;Kein Einkommen&amp;amp;quot; sollte ganz oben stehen.&lt;br /&gt;
&lt;br /&gt;
Wir schauen uns zunächst die Definition der Kreuztabelle an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Zeilendimension sortiert aufsteigend nach Bezeichnungstext. Man kann auch keine alternative Expression als Sortierkriterium angeben. Wir müssen also einen Trick anwenden: wir nehmen den Sortierschlüssel mit in die &amp;amp;quot;Bucket Expression&amp;amp;quot; der Zeilendimension auf, und setzen ihn als Präfix davor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach ist die Sortierung richtig:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig3.png]]&lt;br /&gt;
&lt;br /&gt;
Aber optisch ist das natürlich unschön, der Sortierschlüssel sollte am besten gar nicht angezeigt werden. Wir lösen das, indem wir den Anzeigetext wiederum so abwandeln, dass der erste Buchstabe nicht sichtbar ist. Java bietet dazu die Funktion &amp;amp;quot;substring()&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig4.png]]&lt;br /&gt;
&lt;br /&gt;
Und siehe da: die Sortierung und Anzeige ist perfekt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig5.png]]&lt;br /&gt;
&lt;br /&gt;
Dies ist nur ein Beispiel, wie man mit Hilfe von Java Expressions die Anzeige von Kreuztabellen variieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;parameter-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-62&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Parameter für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
In Kreuztabellen hat man keinen direkten Zugriff auf die Variablen und Felder des Hauptberichts. Man kann die Werte aber als Parameter übergeben. Dazu gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie machen den Parameter im Crosstab-Element bekannt, hier z.B. der Parameter &amp;amp;quot;RSZ&amp;amp;quot; für Regelstudienzeit):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach übergeben Sie den Parameter im Hauptbericht. Mit Rechtsklick auf das Cosstab Element können Sie eine Parameters-Map Expression hinterlegen, das ist einfach eine Zuweisung von einer oder mehreren Variablen zu jeweils einem Wert in der Groovy-Syntax mit &amp;amp;quot;[Variable:Wert,...]&amp;amp;quot;. In dem Beispiel unten weisen wir dem Parameter &amp;amp;quot;RSZ&amp;amp;quot; den Wert des Feldes &amp;amp;quot;RSZ&amp;amp;quot; zu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Parameter in der Kreuztabelle nutzen, z.B. um in einer Spaltenüberschrift nur dann eine Zahl mit Soll-Kreditpunkten anzuzeigen, wenn die Fachsemester innerhalb der Regelstudienzeit liegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param3.png]]&lt;br /&gt;
&lt;br /&gt;
Und hier das Ergebnis für einen Studiengang mit 6 Semestern Regelstudienzeit:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;manuelle-kreuztabelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-63&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Manuelle Kreuztabelle ===&lt;br /&gt;
&lt;br /&gt;
Wenn die gewünschte Konfiguration/Einstellungen in der Kreuztabelle nicht möglich ist, kann eine Kreuztabelle mit Einschränkungen auch selber erstellt werden. Im Beispiel mit Semestern, muss vorher abgeschätzt werden wie viele Semester vorraussichtlich in den Spalten vorkommen werden. Für jedes Semester (z.B. für 10 Semester) wird dann eine Variable angelegt. Die erste bekommt das höchste Semester (wie im Screenshot zu sehen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das zweite Semester wir dann das höchste welches aber unterhalb von dem ersten liegen soll, usw.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Semester können nun als Spalten verwendet werden mit der Option „blank when null“.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;layout-von-kreuztabellen-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-64&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Layout von Kreuztabellen bearbeiten  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt befasst sich mit Themen zur Layoutanpassung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;total-einer-row-group-entfernen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-65&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Total einer ‚Row Group‘ entfernen ====&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue ‚Row Group‘ angelegt wird, wird automatisch ein dazugehöriges Total-Feld erzeugt und mit eingefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_001.png|642x367px]]&lt;br /&gt;
&lt;br /&gt;
Das ist in diesem Falle nicht erwünscht. Um dieses Feld zu entfernen, wird in den &amp;lt;span id=&amp;quot;anchor-66&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-67&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Properties der &amp;lt;span id=&amp;quot;anchor-68&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Row Group‘ die ‚Total Position‘ = ‚none’ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_002.png|642x263px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;header-von-row-groups-für-jede-zeile-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-69&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Header von ‚Row Groups‘ für jede Zeile wiederholen ====&lt;br /&gt;
&lt;br /&gt;
Im folgenden Screenshot ist eine Kreuztabelle dargestellt, bei welcher die Header der ‚Row Groups‘ nur einmal dargestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_003.png|434x315px]]&lt;br /&gt;
&lt;br /&gt;
Zwar ließe sich das Feld noch, so dass es bis zum nächsten ‚Row Header‘ reicht, aber in diesem Beispiel ist erwünscht, dass sich der Header für jede Zeile wiederholt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_004.png|530x420px]]&lt;br /&gt;
&lt;br /&gt;
Dazu wird die Funktion ‚Merge Header Cells‘ in den Properties der ‚Row Group‘ deaktiviert. Es kann sein, dass die Funktion einmal aktiviert und dann wieder deaktiviert werden muss, damit sie als deaktiviert erkannt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_005.png|642x275px]]&lt;br /&gt;
&lt;br /&gt;
Damit der Text in der ersten Spalte nicht abgeschnitten wird, wurde ‚Stretch with Overflow‘ in den Text-Field-Properties ausgewählt. Dadurch ist eine Lücke bei den anderen Spalten entstanden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_006.png|509x404px]]&lt;br /&gt;
&lt;br /&gt;
Um diese Lücke zu schließen wird der ‚Stretch Type‘ in allen folgend eingerahmten Textfeldern auf ‚Relative To Band Height (deprecated)‘ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_007.png|642x322px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;static-field-und-text-field-frei-gestaltenbewegen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-70&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Static Field‘ &amp;lt;span id=&amp;quot;anchor-71&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;und ‚Text Field‘ frei gestalten/bewegen ====&lt;br /&gt;
&lt;br /&gt;
Im Default sind ‚Static Field‘ und ‚Text Field‘ in einer Kreuztabelle nicht frei positionierbar/gestaltbar. Um das zu ändern, wird im jeweiligen Bereich das Layout auf ‚Free Layout‘ eingestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_008.png|642x279px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reihenfolge-der-row-groups-ändern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-72&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reihenfolge der ‚Row Groups‘ ändern ====&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der ‚Row Groups‘ muss nachträglich im ‚Outline‘-Bereich geändert werden. Dies erfolgt per Drag and Drop im rot markierten Bereich:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_009.png|642x437px]]&lt;br /&gt;
&lt;br /&gt;
Die Textfelder im Design-Bereich zu verschieben, reicht nicht aus, denn die ‚Row Group‘ selbst bleibt wo sie ist und dann würde nur das Textfeld in eine andere Row Group verschoben. Im folgenden Negativbeispiel wurden nachträglich im Design-Bereich die Textfelder Intervall und Datenherkunft vertauscht. Dadurch sind sie in der jeweils falschen ‚Row Group‘ gelandet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_010.png|642x387px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-73&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme ==&lt;br /&gt;
&lt;br /&gt;
Um einen Bericht ansprechend zu gestalten dürfen Diagramme wie Torten- oder Balkendiagramme nicht fehlen. Diese in einen Bericht einzubringen ist auch nicht schwer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorab sei aber darauf hingewiesen: Grafiken in JasperReports arbeiten nicht analog zu Kreuztabellen, in denen Daten nach Zeilen- oder Spaltenmerkmalen automatisch gruppiert und summiert werden. Für Grafiken sollten Sie gewährleisten, dass die Datenbasis für die Grafik &#039;&#039;&#039;bereits gruppiert und summiert&#039;&#039;&#039; sind, Sie können also keine Einzeldaten für Grafiken verwenden. Bei Datenblatt-Berichten in Edustore ist dies gewährleistet, wenn Sie im Feld &amp;amp;quot;Felder&amp;amp;quot; nur die Felder selektieren, nach denen in der Grafik gruppiert werden soll. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-74&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme ===&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben eine Tabelle, die die Studierendenzahl mehrerer Semester nach Geschlecht aufführt. Hier ein Screenshot der Datengrundlage:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Tabelle enthält die Merkmale Geschlecht, Semester und Summe. Daraus erzeugen wir in Jaspersoft Studio (und weiter unten in iReport) ein Balkendiagramm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-75&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Zunächst definieren wir die Sortierung der Daten. Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie den Reiter &amp;amp;quot;Sorting&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query2.png]]&lt;br /&gt;
&lt;br /&gt;
Damit die Grafik richtig funktioniert müssen wir nach beiden Merkmalen (Semester und Geschlecht) sortieren. Das Semester sollte nicht alphabetisch nach Namen sortiert sein, sondern nach dem Zahlenschlüssel. Sonst ständen alle Wintersemester untereinander, und davor alle Sommersemester.&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir aus der Palette das Chart Element in das Summary Band. Es startet automatisch ein &amp;amp;quot;Chart Wizward&amp;amp;quot;. Hier wählen wir &amp;amp;quot;Stacked Bar&amp;amp;quot; als Grafiktypen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun müssen wir ihm sagen welches Feld die Y-Achse darstellt (hier &amp;amp;quot;Summe&amp;amp;quot;), und welches die X-Achse (hier &amp;amp;quot;Semester der Belegung&amp;amp;quot;). Das Merkmal zur Unterscheidung der Balkenfarben (&amp;amp;quot;Series&amp;amp;quot;) ist das Geschlecht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach klicken wir auf &amp;amp;quot;Finish&amp;amp;quot;, und die Grafik wird als Platzhalter im Summary Band eingefügt. Dort definieren wir noch die Breite der Grafik:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Entwurf fertiggestellt. So sieht die Grafik aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
Es ist etwas ungünstig dass die Labels der X-Achse nicht ganz lesbar sind. Wir lösen dies mit Rotation der Labels um 45 Grad:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht es besser aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard5.png]]&lt;br /&gt;
&lt;br /&gt;
Das Beispiel lädt zur weiteren Verfeinerung an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-76&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in iReport ====&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht in iReports &amp;amp;quot;Refresh Preview Data&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Spalten der Tabelle sind selbsterklärend. Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Wir wählen hier das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart3.png]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der X-Achse (in JasperReports heißt das &amp;amp;quot;Category Axis&amp;amp;quot;) nehmen wie das Merkmal Semester, und bei der &amp;amp;quot;Value expression&amp;amp;quot; die Summe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist die Definition beendet. Wir können dann in den Eigenschaften der Grafik noch eine &amp;amp;quot;Title Expression&amp;amp;quot; festlegen, z.B. &amp;amp;quot;Studierende nach Semester und Geschlecht&amp;amp;quot;. In der Vorschau sieht die Grafik so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Wintersemester werden noch nicht abgedruckt, dazu ändern wie die &amp;amp;quot;Label rotation&amp;amp;quot; auf 30°. Dies lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wichtig für die Grafik war die Sortierung in der Datenquelle nach &amp;amp;quot;dim_semester.quell_id&amp;amp;quot;. Mit &amp;amp;quot;Series Colors&amp;amp;quot; kann man die Farbe der Balken ändern etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn sie jeden Balken bzw. Teil des Balkens zusätzlich mit den Werten ausgeben wollen, müssen sie in den Chart-Eigenschaften unter den &amp;amp;quot;Bar*Properties&amp;amp;quot; das Ankreuzfeld &amp;amp;quot;Show labels&amp;amp;quot; ankreuzen. Wenn es bereits angekreuzt ist, sollten Sie das Kreuz einmal entfernen und wieder setzen (Bug in iReport seit Version 4.x)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-nach-tabelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-77&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme nach Tabelle ausgeben ===&lt;br /&gt;
&lt;br /&gt;
Üblicherweise ähnelt ein Diagramm in JasperReports einer Kreuztabelle. Wenn nun ein Diagramm nach Vorgabe einer Tabelle ausgegeben werden soll, muss ein wenig getrickst werden. &lt;br /&gt;
&lt;br /&gt;
Erläuterung:&lt;br /&gt;
&lt;br /&gt;
In der Series expression werden die Zeilen angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Category expression werden die Spalten angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Value expression wird der Wert angegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um ein Diagramm nun zu erstellen muss pro Series + Category eine Categorie series angelegt werden und das entsprechende Feld angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-mit-berechneten-werten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-78&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme mit berechneten Werten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die einem Diagramm zugrunde liegende Tabelle noch Berechnungen erfordert, muss man mit Variablen arbeiten. Als Beispiel wird hier die Maske &amp;amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;amp;quot; benutzt. Das Ergebnis wird eine Tabelle mit Balkendiagramm der &amp;amp;quot;Studierende und Studienanfänger im 1. Fachsemester (Zeitreihe)&amp;amp;quot; sein.&lt;br /&gt;
&lt;br /&gt;
Ein bereits fertiges Datenblatt könnte folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_datenblatt_ohne_grafik.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier fehlt jetzt die Grafik, die in dem noch leeren Band &amp;amp;quot;Summary&amp;amp;quot; eingefügt werden soll. Wenn das Band noch nicht eingefügt wurde, einfach mit Rechtsklick auf Summary (im &amp;amp;quot;Report Inspector&amp;amp;quot;) und dann auf &amp;amp;quot;Add Band&amp;amp;quot; um es anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_how_to_add_summary.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Da es in diesem Beispiel dafür keine Variable gibt, wird später noch per Hand eine Weitere hinzugefügt. Wenn es bei Ihnen möglich ist, klicken Sie rechts neben dem Feld auf den Button und fügen dort eine Variable ein. In diesem Beispiel wird als fester String &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-79&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Frauen im 1. FS&amp;amp;quot; eingegeben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_series_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und dann wieder auf &amp;amp;quot;Weiter&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Auf der X-Achse soll in diesem Beispiel die Semester erscheinen und auf der Y-Achse die Anzahl der Weiblichen Studierenden im 1. Fachsemester. Um dies zu erhalten wählt man als &amp;amp;quot;category expression&amp;amp;quot; die Variable &amp;amp;quot;Semester&amp;amp;quot; aus. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies geschieht, indem man auf den Button rechts neben dem Feld klickt, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dann doppelt auf das Feld &amp;amp;quot;Semester&amp;amp;quot; klickt und dann auf &amp;amp;quot;Apply&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In den meisten Fällen werden hier Felder benutzt. Wenn Sie jedoch z.B. eine Variable benutzen wollen, müssen Sie nach dem Klick rechts auf den Button in dem neuen Fenster links unten z.B. auf &amp;amp;quot;Variables&amp;amp;quot; oder &amp;amp;quot;Parameter&amp;amp;quot; klicken. Dabei ändert sich der Inhalt von dem mittleren Feld. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können Sie nun auch eine andere Auswahl treffen.&lt;br /&gt;
&lt;br /&gt;
Das selbe gilt auch für &amp;amp;quot;value expression&amp;amp;quot;. Der Unterschied ist hierbei, die &amp;amp;quot;category expression&amp;amp;quot; ist die Bezeichnung und in &amp;amp;quot;value expression&amp;amp;quot; dürfen nur Zahlen vorkommen, welche von JasperReports addiert werden können. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wählen wir nun z.B. das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun noch abschließend auf Beenden drücken und wir erhalten das erste Ergebnis. Über &amp;amp;quot;Preview&amp;amp;quot; wird nun das Diagramm mit den Frauen aus dem 1. Fachsemester über die Semester angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_erstes_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um nun die männlichen Studenten aus dem 1. FS noch hinzuzufügen oder Änderungen an der gerade getroffenen Auswahl vorzunehmen klickt man mit der rechten Maustaste auf die Chart und dann auf &amp;amp;quot;Chart Data&amp;amp;quot;. In dem Reiter &amp;amp;quot;Details&amp;amp;quot; kann man nun die eben angelegte Category bearbeiten/entfernen oder auch eine neue anlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_details.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wollen wir jetzt noch die männlichen Studierende aus dem 1. FS noch Hinzufügen. Also klickt man auf &amp;amp;quot;Hinzufügen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Eingabe funktioniert hier genau wie in dem Assistenten bei der Erstellung einer neuen Chart. Nur taucht jetzt das Problem auf, dass es kein Feld mit den Männlichen Studierenden gibt, sondern nur gesamt. Die Lösung ist aber ganz einfach. Zunächst geht man wieder in den &amp;amp;quot;Expression editor&amp;amp;quot; der &amp;amp;quot;Value expression&amp;amp;quot; und wählt das Feld &amp;amp;quot;1. FS gesamt&amp;amp;quot; aus, setzt dahinter ein Minuszeichen und danach wählt man noch das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus. Jasper berechnet dann jeweils das Ergebnis und benutzt dieses als Value. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun erhalten wir als Ergebnis folgende Tabelle:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt noch viele Änderungsmöglichkeiten unter Einstellungen wie z.B. &amp;amp;quot;Label rotation&amp;amp;quot; lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind und &amp;amp;quot;Series Colors&amp;amp;quot; um die Farbe der Balken zu ändern. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;chart-customizer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-80&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Chart Customizer ===&lt;br /&gt;
&lt;br /&gt;
Mit JasperSoft Studio können die über sog. &amp;amp;quot;Chart Customizer&amp;amp;quot; Details bzgl. des Layouts vor Diagrammen steuern. Im folgenden ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
Wir haben ein einfaches Balkendiagramm, in dem wir eine (automatisch) ermittelte Y-Achse mit Werten von 0-15 haben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir den Bereich auf 12 (in 2er-Schritten ändern). Man könnte dies ganz leicht über die Eigenschaften ändern:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man aber nicht die Schrittweite ändern. Wir legen dazu einen Chart Customizer vom Typ &amp;amp;quot;Value Axis Range and Tick&amp;amp;quot; an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und damit sieht das Diagramm so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Y-Achse zählt nun in 2er Schritten von 0 bis 12.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch ein Hinweis: Bei Y-Achsen mit kleinen Wertebereichen kann es vorkommen, dass JR die Y-Achse automatisch mit Intervallen mit Nachkommastellen versieht, also z.B. 1 - &amp;lt;span id=&amp;quot;anchor-81&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;1,5 - 2 - 2,5 etc. Bei manchen Maßen macht die Nachkommastelle keinen Sinn (z.B. wenn Studierende gezählt werden). Um das zu ändern gehen Sie in der Eigenschaften der Y-Achse (Chart → Value axis) und setzen bei der Eigenschaft &amp;amp;quot;Value axis tick label mask&amp;amp;quot; den Wert &amp;amp;quot;#&amp;amp;quot; (Pattern für ganzzahlig) ein. Damit wird nur noch ganzahlig hochgezählt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;balken-labels&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-82&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Balken Labels ===&lt;br /&gt;
&lt;br /&gt;
In Balkendiagrammen können die exakten Zahlen nicht genau ermittelt werden. Aus diesem Grund wird oft gewünscht, die Zahlen noch mal schriftlich darzustellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_balken_labels_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Zahlen anzeigen zu lassen muss einfach in den Chart Properties unter Advanced „Common Chart Properties → Plot → Show Labels“ auf true gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-83&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklets ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-84&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ab JR 6.2 oder höher (d.h. SuperX-Kernmodul 4.8 oder HISinOne-BI 2018.12) gibt es die Möglichkeit, Berichts-&amp;amp;quot;Bücher&amp;amp;quot; mit Deckblatt, Inhaltsverzeichnis und Schlußseite zu erstellen. Die Erstellung ist übersichtlicher als eine Kombination aus Haupt- und Unterbericht, und bietet beim Seitenlayout mehr Optionen, z.B. kann man in einem Booklet Hoch- und Querformat kombinieren.&lt;br /&gt;
&lt;br /&gt;
Englische Anleitungen siehe &lt;br /&gt;
&lt;br /&gt;
https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/report-books&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wg. der Version ist diese Möglichkeit in iReport nicht mehr verfügbar, Sie müssen JasperSoft Studio nutzen. Wenn Sie dort mit File -&amp;amp;gt; New einen neuen Report erzeugen, können Sie bei Report type den Wert &amp;amp;quot;Book report&amp;amp;quot; wählen. Der Assistent fragt Sie dann, ob Sie Deckblatt, Inhaltsverzeichnis und die Schlußseite benötigen, kreuzen Sie die jew. Position an. Sie erhalten danach ein Entwurfsfenster mit dem Hauptbericht, der drei Abschnitte enthält: Das &amp;lt;span id=&amp;quot;anchor-85&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Deckblatt und Inhaltsverzeichnis (&amp;amp;quot;Cover and table of contents&amp;amp;quot;), den Buchinhalt (&amp;amp;quot;Content&amp;amp;quot;) und die Schlußseite (&amp;amp;quot;Backcover&amp;amp;quot;):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Datei speichern, werden die jew. Unter-Dateien automatisch mit angelegt, mit dem Zusatz &amp;lt;span id=&amp;quot;anchor-86&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;*_cover.jrxml&amp;amp;quot;, &amp;amp;quot;*_toc.jrxml&amp;amp;quot; und &amp;amp;quot;*_backcover.jrxml&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hauptbericht-im-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-87&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hauptbericht im Booklet ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;aufbau-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-88&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Aufbau des Hauptberichts ====&lt;br /&gt;
&lt;br /&gt;
Startpunkt beim Booklet ist der Hauptbericht. Dieser hat keine &amp;amp;quot;Bänder&amp;amp;quot; im Sinne einer Ergebnisausgabe, insbesondere gibt es kein Detailband. Trotzdem arbeitet der Hauptbericht mit einer Datenquelle im Sinne eines Detailbandes, hier heißt das Band &amp;amp;quot;Content&amp;amp;quot;. Für Makroberichte in SuperX-/BI müssen wir für alle Unterberichte dieselbe XML-Quelle verwenden, d.h. wir müssen im Hauptbericht genau eine Zeile der XML-Quelle filtern. Wir machen das mit XPATH mit dem Ausdruck&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/ergebnisse/ergebnis[@ordnr=&#039;0&#039;]/ergebniselement/sqlerg/row[@no=&#039;0&#039;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies liefert die erste Zeile der ersten Tabelle des Makroberichts im Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie also oben auf die Datenquelle des Hauptberichts, und fügen Sie den Filter ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Funktion „Read Fields“ funktioniert in diesem Fall nicht. Die Felder für den Hauptbericht werden manuell in den Sourcecode eingefügt. Dazu erstellen Sie zunächst, wie in [[#4.5.Makroberichte als Datenquelle für JasperReports|outline|Abschnitt 4.5]] beschrieben, ein JR-Template für den Makrobericht. Aus diesem Template kopieren Sie aus dem Sourcecode die Felder und fügen diese im Booklet ein. Fügen Sie alle Felder sowohl im Haupt- als auch in den Unterberichten des Booklets ein.&lt;br /&gt;
&lt;br /&gt;
Im Content Band können Sie dann mit der rechten Maustaste die jew. Unterberichte verlinken. Die Technik ist identisch mit den normalen Haupt/-Unterberichten, nur dass das Seitenlayout nicht vom Hauptbericht zum Unterbericht vererbt wird. &lt;br /&gt;
&lt;br /&gt;
Im Beispiel haben wir einen Unterbericht verlinkt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;amp;quot;Component Expression&amp;amp;quot; geben Sie den Unterbericht an. Im Feld &amp;amp;quot;Tab name expression&amp;amp;quot; können Sie den Namen des TABs in Excel definieren. Standardmäßig wird bei einem Booklet beim Export nach Excel also ein Arbeitsblatt mit mehreren Sheets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht wird mit den gleichen Parametern aufgerufen wie bei klassischen [[#2.5.1.Konfiguration des Hauptberichts|outline|Unterberichten]]. Der erste Unterbericht bekommt die ordnr 0, der zweite Unterbericht die ordnr 1 usw.:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main4.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;übergabe-von-layouts-vom-hauptbericht-an-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-89&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Übergabe von Layouts vom Hauptbericht an Unterberichte ===&lt;br /&gt;
&lt;br /&gt;
Generell werden im Booklet keine Layoutvorgaben vom Hauptbericht an den jew. Unterbericht übergeben. Ausnahme: Die Property &amp;amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;amp;quot;, die beim Excel Export als Zahl formatierte Zellen auch in Excel als Zahl ausgibt, wird im Hauptbericht gesetzt und dann an die Unterberichte übergeben.&lt;br /&gt;
&lt;br /&gt;
Achtung: Je nach JasperSoft Studio Version kann man diese Property nicht in der graphischen Entwcklungsumgebung setzen, sondern nur im *.jrxml-Quellcode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-deckblatt&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-90&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Deckblatt ===&lt;br /&gt;
&lt;br /&gt;
Das Deckblatt ist ein normaler JasperReport mit Elementen im Titel-Band. Beachten Sie dass im Unterbericht auch Seitenränder und Seitenformate definiert sein müssen. Sie können auch vom Hauptbericht Parameter übergeben, hier z.B. das Semester:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover1.png]]&lt;br /&gt;
&lt;br /&gt;
 Im Hauptbericht wiederum wird dieser Parameter dann übergeben, hier z.B. aus der Legende der Maske:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-inhaltsverzeichnis&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-91&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Inhaltsverzeichnis ===&lt;br /&gt;
&lt;br /&gt;
Das Inhaltsverzeichnis ist ein Bericht ohne Datenquelle, und bekommt über die Evaluation Time=&amp;amp;quot;Report&amp;amp;quot; die Anweisung, die Inhaltsdokumente nach Lesezeichen (HTML-Anchors) zu durchsuchen. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist leer, und über die Property &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
net.sf.jasperreports.bookmarks.data.source.parameter=REPORT_DATA_SOURCE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wird als Datenquelle der Content angegeben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Berichtsdesign ist vom Assistenten vorgegeben und relativ einfach. Sie können bis zu drei Ebenen für das Inhaltsverzeichnis angeben, jede Ebene benötigt ein eigenes Detailband.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc2.png]]&lt;br /&gt;
&lt;br /&gt;
 Die Feldnamen im Bericht sollten nicht geändert werden. Sie können aber das Layout anpassen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-erster-detailbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-92&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet erster Detailbericht ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Detailbericht ist ein normaler Unterbericht, d.h. er hat den Parameter &amp;amp;quot;ordnr&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;amp;quot;ordnr&amp;amp;quot; wird dann bei der Datenquelle des Unterberichts ausgewertet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht soll sicherlich auch Seitenzahlen anzeigen, dazu fügen Sie noch ein &amp;amp;quot;Page footer&amp;amp;quot; Band hinzu, und erzeugen dort ein Textfeld mit dem Inhalt z.B. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Seite &amp;amp;quot;+$V{MASTER_CURRENT_PAGE}&lt;br /&gt;
&lt;br /&gt;
Das Textfeld muss bei Evaluation time den Wert &amp;amp;quot;Master&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content3.png]]&lt;br /&gt;
&lt;br /&gt;
Danach wird die Seitenzahl jedes Unterberichts an den Hauptbericht angepaßt.&lt;br /&gt;
&lt;br /&gt;
Für das Inhaltsverzeichnis müssen Sie im jew. Detailbericht Lesezeichen (HTML-Anchors) und jeweils eine Ebene angeben. Wir können z.B. für das Textfeld der Überschrift einen Anker der Ebene 1 festlegen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach legen wir für das Gruppenband für das Textfeld mit dem Label der Gruppe (Fakultätsname) einen Anker der Ebene 2:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-fertige-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-93&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das fertige Booklet ===&lt;br /&gt;
&lt;br /&gt;
So sieht das Booklet im Preview im JasperSoft Studio aus: Zuerst das Deckblatt...&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
... und dann auf Seite 2 das Inhaltsverzeichnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und dann auf Seite 3 der erste Unterbericht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-94&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemeines-zu-schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-95&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemeines zu Schriften ===&lt;br /&gt;
&lt;br /&gt;
Für den Entwurf von Berichten ist es wichtig, daß die jew. Schriftart auch beim Server-System und beim Client verfügbar sind. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ein häufiger Fallstrick ist hier: unter Windows wird mit JasperReports entworfen, und dort z.B. die Schriftart &amp;amp;quot;Arial&amp;amp;quot; gewählt. Der Report soll auf dem Server unter Linux laufen, dort gibt es die Schriftart nicht. Resultat: der Bericht ist nicht kompilierbar. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Bei PDF-Dateien lassen sich Fonts ggf. auch in die Datei einbetten, bei Exportformaten wie OpenOffice oder Word ist dies nicht möglich. Sie sollten daher Schriftarten wählen, die auch beim Client mit größter Wahrscheinlichkeit installiert sind. Die sicherste Wahl ist es, Font-Familien anzugeben, z.B. &amp;amp;quot;Serif&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Im Zweifelsfall installieren Sie die Schriftart auf allen beteiligten Systemen. TrueType Fonts lassen sich in JasperReports importieren und nutzen, sie können sogar in PDF-Dateien standardmäßig eingebettet werden. Im folgenden wird die Schriftart &amp;amp;quot;Liberation Sans&amp;amp;quot; installiert, die man auf [https://fedorahosted.org/liberation-fonts/ https://fe][https://fedorahosted.org/liberation-fonts/ dorahosted.org/liberation-fonts/] herunterladen kann. Entpacken Sie das Download Paket in einem beliebigen Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-ireport-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-96&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-97&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in iReport einbinden ===&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn Sie iReport unter Windows nutzen, müssen Sie für die folgenden Schritte iReport als Admin starten:&lt;br /&gt;
&lt;br /&gt;
Im Menü &amp;amp;quot;Extras&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;Optionen&amp;amp;quot; können Sie den Font importieren:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wählen Sie aus der Dateiliste zunächst den &amp;amp;quot;Regular&amp;amp;quot;-Font aus, z.B. die Sans-Serif-Variante. &amp;lt;span id=&amp;quot;anchor-98&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im nächsten Schritt geben Sie dem Font einen Namen, und Sie wählen die zugehörigen Dateien für Fettdruck etc:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-99&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht, wenn Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des Formulars können Sie noch PDF-Exportoptionen wählen, z.B. ob die Schriftart in PDF-Dateien eingebunden werden soll. &amp;lt;span id=&amp;quot;anchor-100&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Achtung: beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-jaspersoft-studio-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-101&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in &#039;&#039;&#039;JasperSoft Studio&#039;&#039;&#039; einbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Window“ → „Preferences“ können Sie Fonts einbinden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach einem Klick auf „Add“ öffnet sich ein neues Fenster. Dort geben Sie dem Font einen Namen und wählen die zugehörige Datei für den normale Ausführung des Fonts. Es gibt weitere Reiter für Bold, Italic und Bold Italic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import5.png]]&lt;br /&gt;
&lt;br /&gt;
Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import6.png]]&lt;br /&gt;
&lt;br /&gt;
Achtung: Beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-schriftart-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-102&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default-Schriftart in iReport ===&lt;br /&gt;
&lt;br /&gt;
Sie können die Default Schriftart in iReport einstellen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_default_font.png]]&lt;br /&gt;
&lt;br /&gt;
Stellen Sie den Default-Font auf &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-103&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Liberation Sans&amp;amp;quot;. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fonts-auf-dem-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-104&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fonts auf dem Server  ===&lt;br /&gt;
&lt;br /&gt;
Um Schriftarten auf einen Tomcat-Server zu installieren, müssen die vier ttf-Dateien (normal, fett, kursiv, fett-kursiv) in den Ordner $JRE_HOME/lib/fonts kopiert werden. Für alle Java Anwendungen wie den Tomcat und JasperReports stehen dann die in dem verwendetem Java zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beispiel Arial unter Ubuntu 18.04:&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie mit dem Kommando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-105&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;ps fax | grep tomc&lt;br /&gt;
&lt;br /&gt;
welcher Tomcat läuft. Sie bekommen eine Ausgabe z.B. &lt;br /&gt;
&lt;br /&gt;
47769 ?       Sl   36:25 &amp;lt;span id=&amp;quot;anchor-106&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xmx3500M -XX:MaxPermSize=400m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -DSuperX-DB-PROPERTIES-SET=true -Djava.endorsed.dirs=/var/lib/tomcat8/endorsed -classpath /var/lib/tomcat8/bin/bootstrap.jar:/var/lib/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/var/lib/tomcat8 -Djava.io.tmpdir=/var/lib/tomcat8/temp org.apache.catalina.startup.Bootstrap start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Befehl zeigt den Pfad zu JRE_HOME, also &amp;lt;span id=&amp;quot;anchor-107&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64. Sie kopieren also die Dateien z.B. &lt;br /&gt;
&lt;br /&gt;
arial.ttf&lt;br /&gt;
&lt;br /&gt;
arialbd.ttf&lt;br /&gt;
&lt;br /&gt;
arialbi.ttf&lt;br /&gt;
&lt;br /&gt;
ariali.ttf&lt;br /&gt;
&lt;br /&gt;
von&lt;br /&gt;
&lt;br /&gt;
 C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-arial_31bf3856ad364e35_6.1.7601.17514_none_d0a9759ec3fa9e2d\*.ttf&lt;br /&gt;
&lt;br /&gt;
nach &lt;br /&gt;
&lt;br /&gt;
/usr/lib/jvm/java-8-openjdk-amd64/lib/fonts&lt;br /&gt;
&lt;br /&gt;
und starten dann Tomcat neu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Sorgen Sie dafür dass Sie eine Lizenz für die jew. Fonts haben, weil diese bei PDF in die ausgelieferten Dateien eingebettet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;font-extension&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-108&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Font Extension ===&lt;br /&gt;
&lt;br /&gt;
Eine Alternative zu dem Einbinden der Schriftart über das Java Verzeichnise Font Extension. Diese hat aber nicht immer funktioniert. Um auf diesem Wege die Fonts auf einem Ziel-Server einzubinden, kann man die Schriftart als Font Extension exportieren, die dann wiederum in den CLASSPATH des Servers (bei Webanwendungen WEB-INF/lib) kopiert werden müssen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nutzen Sie dazu den obigen Button &amp;amp;quot;Export as extension&amp;amp;quot;, und wählen Sie einen Dateinamen mit der Endung &amp;amp;quot;.jar&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: Die Einbettung einer Font Extension in einer JasperReports-Laufzeitumgebung klappt erst mit JasperReports 3.7.2 oder höher. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Wenn Sie in iReport auch PDF als Vorschau wählen, erzeugt iReport im Verzeichnis der jrxml-Datei auch eine entsprechende PDF-Datei. Damit diese die Fonts enthält, müssen Sie auch in iReport im CLASSPATH die Font-Extension einbinden. In diesem Falle ist es vorteilhaft, die Endung &amp;amp;quot;.jar&amp;amp;quot; (nicht &amp;amp;quot;.zip&amp;amp;quot;) zu wählen, weil iReport hier nur jar-Dateien einbindet.&lt;br /&gt;
&lt;br /&gt;
Noch ein Hinweis zu den Attributen &amp;amp;quot;PDF Font name&amp;amp;quot; und &amp;amp;quot;PDF Encoding&amp;amp;quot;: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Attribute werden nicht mehr ausgewertet, wenn Sie mit Font Extensions arbeiten. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfield-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-109&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;TextField-Formatierung ==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt werden verschiedene Einstellungen und Möglichkeiten der Formatierung in TextFields vorgestellt und erläutert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ausgabe-von-null-als-string-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-110&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ausgabe von &#039;&#039;&#039;NULL&#039;&#039;&#039; als &#039;&#039;&#039;String&#039;&#039;&#039; verhindern ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls NULL in einem TextField als String ausgeschrieben wird, kann dies verhindert werden, indem die Einstellung „Blank When NULL“ aktiviert wird. Das Feld bleibt dann leer:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_text_field_formatting.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-wörter-unterstreichen-oder-fett-drucken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-111&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Wörter unterstreichen oder fett drucken ===&lt;br /&gt;
&lt;br /&gt;
Wenn in einem TextField einzelne Wörter unterstrichen oder fett gedruckt werden sollen, einfach in den „Text properties“ unter „Markup“ „styled“ auswählen. In dem Textfield dann einfach um das zu unterstreichende Wort „&amp;amp;lt;u&amp;amp;gt; … &amp;amp;lt;/u&amp;amp;gt;“ schreiben oder „&amp;amp;lt;b&amp;amp;gt; … &amp;amp;lt;/b&amp;amp;gt;“ um es fett gedruckt auszugeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Bitte beachten, dass die PDF-Preview aus Jaspersoft Studio heraus keinen Fettdruck darstellt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;zahlen--und-datumsformat&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-112&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zahlen- und Datumsformat ===&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_textfield_pattern1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld bekommt das Pattern &amp;amp;quot;0&amp;amp;quot;, d.h. es wird eine Ganzzahl inkl. 0 angezeigt. Der Platzhalter &amp;amp;quot;#&amp;amp;quot; steht für Zahlenbestandteile, hier wird eine 0 allerdings nicht angezeigt. Weitere Zahlen- und Datumsformate sind im Assistenten (linker Teil des Screenshots) sicher selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-113&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ===&lt;br /&gt;
&lt;br /&gt;
Hat man pro Spalte / Zelle unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;#0;#0&amp;amp;quot; : &amp;amp;quot;###0.00;###0,00&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;effiziente-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-114&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Effiziente Formatierung ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keine Lust haben, jedes Textelement eines Berichts einzeln zu formatieren, empfehlen wir als ersten Schritt, Formatierungen zu kopieren. &lt;br /&gt;
&lt;br /&gt;
Im Kontextmenü jedes Elements gibt es die Menüpunkte &amp;amp;quot;Copy Format&amp;amp;quot; und &amp;amp;quot;Paste Format&amp;amp;quot;, die jeweils Formate kopieren und einfügen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_copy_format.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Hochschulen ist ein einheitliches Layout der Berichte wichtig, und so bietet es sich an, zentrale Layouts zu definieren und dann wiederzuverwenden. In JasperReports heißen Layouts auch &amp;amp;quot;Styles&amp;amp;quot; bzw. Formatvorlagen. Ähnlich wie in OpenOffice Writer oder MS Word lassen sich Formatvorlagen definieren und zuweisen. Bei Änderungen der Formatvorlage werden diese Änderungen auf alle Elemente automatisch übertragen - auch nachträglich. &lt;br /&gt;
&lt;br /&gt;
In der &amp;amp;quot;Styles Library&amp;amp;quot; werden z.B. einige häufig verwandte Layoutvorlagen angeboten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles_library.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Formate anwenden, indem Sie einfach die jew. Vorlage von der &amp;amp;quot;Styles Library&amp;amp;quot; per Drag and Drop auf das Ziel-Textfeld im Report Design ziehen und somit anwenden.&lt;br /&gt;
&lt;br /&gt;
 Sie können auch eigene Formatvorlagen zentral definieren. Im Menü Datei-&amp;amp;gt;New-&amp;amp;gt;Style geht es los: Wir erzeugen z.B. eine neue Style-Datei mit dem Namen &amp;amp;quot;meinLayout.jrtx&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_style_def_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jrtx-Datei definieren sie einen oder mehrere Formatvorlagen. Wir definieren z.B. die Formatvorlage &amp;amp;quot;Textelemente&amp;amp;quot;, und geben ihr die Eingenschaft &amp;amp;quot;SansSerif, Schriftgröße 12&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Danach können sie die Datei in der jrxml-Datei im Report Inspector unter &amp;amp;quot;Styles&amp;amp;quot; einbinden. Damit sind die Formatvorlagen in dieser Datei verfügbar, und können bei den Elementeigenschaften im Attribut &amp;amp;quot;Style&amp;amp;quot; zugewiesen werden: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styleref_design_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 JasperReports nimmt standardmäßig den absoluten Pfad der jrtx-Datei, in der XML-Quelle sollten Sie diesen Pfad auf relativ umstellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-styles-bedingte-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-115&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Conditional styles – &#039;&#039;&#039;Bedingte Formatierung&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man in einzelne Textfelder &amp;amp;quot;bedingte Formatierung&amp;amp;quot; nutzen will (z.B. farbiger Hintergrund, Fettdruck), hat man früher mehrere Textfelder einzeln angelegt, mit dem gleichen Inhalt und einer jeweiligen &amp;amp;quot;Print-when expression&amp;amp;quot;. Das geht seit JR 3.x eleganter mit den sog. &amp;amp;quot;Conditional styles&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Hierfür wird ein Style angelegt und diesem diverse „Conditional Styles“ untergeordnet. Die „Conditional Styles“ enthalten Bedingungen und Formatierungseinstellungen. Der Style kann beispielweise einem Textfeld übergeben werden. Sobald die Bedingung eines &amp;lt;span id=&amp;quot;anchor-116&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Conditional Styles“ erfüllt wird, werden die im „Conditional Style“ festgelegten Formatierungseinstellungen auf das Textfeld angewandt. Die Einstellungen im Textfeld selbst werden allerdings höher priorisiert. Eine detaillierte Erläuterung der Priorisierung anhand eines Beispiels findet sich in Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-jaspersoft-studio-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-117&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in JasperSoft Studio – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst legen Sie die Formatierungen an, indem Sie unter Styles die rechte Maustaste drücken und über „Create Style“ einen Style erstellen, beispielsweise &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch Rechtsklick auf &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039; wird über „Create Conditional Style“ ein neuer Conditional Style hinzugefügt. Es erscheint ein neuer Unterknoten &amp;amp;lt;No condition set&amp;amp;gt;. Über die Properties können anschließend die zu erfüllende Bedingung als Expression, beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-118&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;$F{Name}.equals(&amp;amp;quot;Summe Aktiva&amp;amp;quot;)||$F{Name}.equals(&amp;amp;quot;Summe Passiva&amp;amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
festgelegt und die Formatierungseinstellungen vorgenommen werden. In diesem Falle ist Fettschrift (bold) gewählt : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style4.png]]&lt;br /&gt;
&lt;br /&gt;
Um den Style inklusive seiner Conditional Styles auf beispielsweise ein Textfeld anzuwenden, werden die Properties des entsprechenden Feldes geöffnet. Im Reiter Appearance wird der gewünscht Style, in diesem Falle &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;,&#039;&#039;&#039; &#039;&#039;&#039;dem Textfeld zugeordnet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Die Reihenfolge wird direkt im XML oder per Drag&amp;amp;amp;Drop geändert.&lt;br /&gt;
&lt;br /&gt;
Es kam in der Vergangenheit bereits zu dem Phänomen, dass im Conditional Style Fettschrift gewählt war, aber nicht ins Textfeld übernommen wurde, während beispielsweise Kursivschrift problemlos und wie erwartet funktionierte. Eine genauere Beschreibung und Lösung findet sich im Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-ireport-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in iReport – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
Um z.B. einzelne Zeil&amp;lt;span id=&amp;quot;anchor-120&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;en nach einer Bedingung f&amp;lt;span id=&amp;quot;anchor-121&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;ett zu machen oder nicht kann man so vorgehen: &amp;lt;span id=&amp;quot;anchor-122&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zunächst legen Sie die Formatierungen an, indem Sie im Report Inspector unter Styles die rechte Maustaste drücken und ein Style hinzufügen, z.B. &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; für einen Style der Fett sein soll, wenn im Feld &#039;&#039;&#039;zw&#039;&#039;&#039; bestimmte Werte stehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-123&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Danach erzeugen Sie mit Rechtsklick auf &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; eine neue Bedingung mit „Hinzufügen von Conditional Style“. Bei dem neuen Unterknoten &amp;lt;span id=&amp;quot;anchor-124&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;No condition set&amp;amp;gt; klicken Sie auf die rechte Maustaste, dann Edit Condition. Hier können Sie wie gewohnt eine Bedingung in Form einer Expression eingeben, z.B. &lt;br /&gt;
&lt;br /&gt;
$F{Zweckbestimmung}.equals(&amp;lt;span id=&amp;quot;anchor-125&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Gesamtausgaben&amp;amp;quot;)||$F{Zweckbestimmung}.equals(&amp;lt;span id=&amp;quot;anchor-126&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Gesamteinnahmen&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Dann müssen Sie den neuen Conditional Style anklicken &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style.png]]&lt;br /&gt;
&lt;br /&gt;
und in den Eigenschaften bold auf true setzen.&lt;br /&gt;
&lt;br /&gt;
Dann wählt man im Report designer die Felder aus, die ggfs. fett dargestellt werden sollen, und bei den Eigenschaften als Style &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style2.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn man mit Padding arbeiten will, kann man für den Style padding angeben, muss aber anscheinend manuell im jrxml leftpadding entfernen&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;box topPadding=&amp;amp;quot;0&amp;amp;quot; &amp;lt;s&amp;gt;leftPadding=&amp;amp;quot;0&amp;amp;quot;&amp;lt;/s&amp;gt; bottomPadding=&amp;amp;quot;0&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-127&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Es gibt zwar einen Menüpunkt „Reihenfolge ändern“ bei rechtem Mausklick, der ist jedoch deaktiviert, man kann die Reihenfolge aber direkt im XML ändern oder per Drag&amp;amp;amp;Drop.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-128&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Leider kann man nicht einen conditionalstyle auf ein leere Zelle anwenden (z.B. Unterstrich), wenn man Excelexport macht, wird daraus einfach eine leere Zelle ohne Formatierung selbst wenn man Leerzeichen in der Text Expression hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden Variablen im conditional style verwendet, muss die evaluation time aktiviert werden über die property:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-129&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.style.evaluation.time.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
Siehe https://community.jaspersoft.com/blog/tip-data-set-variable-usage-conditional-style-table-component-jasper-reports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Style kann auch mit einem anderen Style verknüpft werden, indem in dem entsprechenden Style unter dem Reiter „Style“ in dem Feld „Style“ das entsprechende Style ausgewählt wird. Somit können bestimmte Wiederholungen gespart werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfeld-vs.-conditional-style-priorisierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-130&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-131&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Textfeld vs. Conditional Style – Priorisierung&amp;lt;span id=&amp;quot;anchor-132&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt wird anhand eines Beispiels aufgezeigt, dass Textfelder höher priorisiert sind als Conditional Styles und welche Fallstricke dadurch entstehen können. Das Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einem Textfeld wird ein Style zugeordnet, der einen Conditional Style enthält, welcher bei erfüllter Bedingung den Text fett und kursiv darstellen soll: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style6.png]]&lt;br /&gt;
&lt;br /&gt;
Im Textfeld selbst sind beide Einstellungen deaktiviert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style7.png]]&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist, dass im Bericht der Text dieses Feldes zwar kursiv, aber nicht fett dargestellt wird. Zum Testen werden weitere Formatierungseinstellungen im Conditional Style hinzugefügt, beispielsweise Unter- und Durchstreichen und auch dies wird umgesetzt. Die Bedingung des Conditional Styles ist also erfüllt. &lt;br /&gt;
&lt;br /&gt;
Der Grund für dieses Verhalten ist nur mit Blick auf den Source-Code ersichtlich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style8.png]]&lt;br /&gt;
&lt;br /&gt;
Dort findet sich in den Einstellungen des Textfeldes &#039;&#039;isBold=“false“&#039;&#039;. Dieses Fragment ist dadurch entstanden, dass in der Designoberfläche von JasperSoft Studio für das Textfeld die Einstellung bold einmal aktiviert und dann wieder deaktiviert wurde. Im Source-Code wird nach dem ersten Aktivieren &#039;&#039;isBold=“true“&#039;&#039; hinzugefügt und beim Deaktiveren nicht wieder komplett entfernt, sondern auf false gesetzt. Da die Einstellungen im Textfeld selbst höher priorisiert werden, als jene der Conditional Styles, wird der Fettdruck des Conditional Styles nicht umgesetzt. Löscht man im Source-Code das Fragment &#039;&#039;isBold=“false“&#039;&#039;, dann wird der im Conditional Style definierte Fettdruck umgesetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-style&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-133&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default Style ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen Style als Default Style zu verwenden. Hierfür wird beim Style, nicht beim Conditional Style, die entsprechende Einstellung gesetzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style9.png]]&lt;br /&gt;
&lt;br /&gt;
Dieser Style wird nun auf jedes Feld angewandt, dem kein anderer Style zugeordnet ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;expression-editor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-134&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Expression Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Expression Editor werden die für die Ausgabe bestimmten Werte angegeben. Zahlen werden ohne Zusatz eingetragen. Feste String Werte werden zwischen Anführungszeichen gesetzt. Felder und Variablen können über ein Doppelklick auf den jeweiligen Namen unterhalb des Eingabefeldes eingefügt werden. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Zu den Feldern und Variablen gibt es auch noch Funktionen in dem 3. unterem Kästchen. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für Textausgabe:&lt;br /&gt;
&lt;br /&gt;
Es soll ausgegeben werden „Auswertungszeitraum 1.1.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt; bis 31.12.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt;“.&lt;br /&gt;
&lt;br /&gt;
Anstatt zwei statische Textfelder und zwei dynamische zu machen, legt man eine Expression an:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Auswertungszeitraum: 1.1.&amp;amp;quot;+$F{legende_Jahr_value}+&amp;amp;quot; bis 31.12.&amp;amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Der Clou an JasperReports ist: da das Programm auf der Programmiersprache Java beruht, kann man in Expressions echten Java Code einfügen bzw. um eigenen Java Code erweitern. Wenn Sie z.B. wissen dass das benutzte Feld &amp;amp;quot;$F{Lehr- und Forschungsbereich}&amp;amp;quot; vom Typ String ist, können Sie alle in Java eingebauten String Funktionen benutzen, z. B. Substring, contains, indexOf, toLowerCase etc. Analog auch für andere Datentypen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedingungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-135&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedingungen ===&lt;br /&gt;
&lt;br /&gt;
Bedingungen sind in dem Expression Editor auch möglich. Wenn z.B. eine Variable nur Ausgegeben werden soll, wenn der Wert größer, kleiner oder gleich einem anderem vorgegebenen Wert oder Variable sein soll, wird folgende Syntax verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;Bedingung&amp;amp;gt;&amp;amp;gt; ? &amp;amp;lt;&amp;amp;lt;&amp;lt;span id=&amp;quot;anchor-136&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ausgabe wenn Bedingung wahr&amp;amp;gt;&amp;amp;gt; : &amp;amp;lt;&amp;amp;lt;Ausgabe wenn Bedingung falsch&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bedingungen:&lt;br /&gt;
&lt;br /&gt;
String1 == String2&lt;br /&gt;
&lt;br /&gt;
String1 != String2&lt;br /&gt;
&lt;br /&gt;
Nummer1 &amp;amp;gt; Nummer2&lt;br /&gt;
&lt;br /&gt;
String1.contains( String2 )&lt;br /&gt;
&lt;br /&gt;
String1 == null&lt;br /&gt;
&lt;br /&gt;
usw.&lt;br /&gt;
&lt;br /&gt;
Wie oben angegeben: Wenn die Bedingung wahr ist, wird der Wert nach dem Fragezeichen genommen. Wenn die Bedingung falsch ist, wird der Wert nach dem Doppelpunkt genommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-zeichenketten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-137&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Zeichenketten ===&lt;br /&gt;
&lt;br /&gt;
Häufig werden für Berichtsausgaben Zeichenketten manipuliert. Dadurch, daß JasperReports innerhalb der Java-Runtime läuft, stehen uns mächtige Methodenaufrufe zur Verfügung, die in Java schon eingebaut sind. &lt;br /&gt;
&lt;br /&gt;
Für Zeichenketten hier eine Übersicht:&lt;br /&gt;
&lt;br /&gt;
 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-datumsfeldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-138&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Datumsfeldern ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datumswerte-aggregieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-139&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datumswerte aggregieren ====&lt;br /&gt;
&lt;br /&gt;
Fürs Berichtsdesign auf aggregierter Ebene ist es oft praktisch, Datumswerte auf &amp;amp;quot;grobere&amp;amp;quot; Kategorien zu aggregieren, z.B. Monate, Quartale, oder Jahre. Um solche Werte auszugeben bzw. danach zu gruppieren können Sie eigene Variablen anlegen, die dann im Expression Editor mit Hilfe von Java berechnet werden. Hier ein Beispiel für eine Transformation vom Datum zur Einheit &amp;amp;quot;Jahr-Monat&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
(($F{Datum}.getYear()+1900)*100)+($F{Datum}.getMonth()+1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn wir annehmen, dass im Feld &amp;amp;quot;Datum&amp;amp;quot; ein Datums- oder Zeitstempel-Wert steht, dann wird über die o.g. Expression daraus ein Zahlenwert nach dem Muster Jahr (vierstellig) + Monat (zweistellig), z.B. für den 13.5.2013 würde daraus der Wert 201305. Nach diesem ganzzahligen Wert kann man dann sortieren und gruppieren. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Anmerkung: die o.g. Methoden getYear() und getMonth() sind seit einigen Jahren in Java &amp;amp;quot;deprecated&amp;amp;quot;, d.h. sie könnten in zukünftigen Java Versionen entfallen. Aber da dies in den letzten 7 Jahren nicht passiert ist, können wir damit noch arbeiten und optimistisch sein. Falls die Methoden wirklich entfernt werden, muss man eigene statische Methoden mit dem in Java eingebauten Calender-Objekt erstellen, Codebeispiele dazu gibt es viele im WWW.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wenn man Text &amp;amp;quot;Erzeugungsdatum&amp;amp;quot; und das Datum in einem Feld haben will geht so:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-140&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Erzeugungsdatum:&amp;amp;quot;+new SimpleDateFormat(&amp;amp;quot;dd.MM.YYYY&amp;amp;quot;, Locale.GERMAN).format(new java.util.Date()) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeichenketten-zum-datumstyp-konvertieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-141&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeichenketten zum Datumstyp konvertieren ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Datum als String-Feld geliefert bekommen, können Sie es mit Groovy zum Typen &amp;amp;quot;java.util.Date&amp;amp;quot; konvertieren, z.B. um danach zu sortieren. Wenn z.B. das Feld „Beginn“ den Typ String hat und gefüllt ist mit dem Wert &amp;amp;quot;18.11.2020 18:05:00&amp;amp;quot;, dann können Sie eine Variable vom Typ java.util.Date erzeugen, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
Date.parse(&amp;amp;quot;dd.MM.yyyy hh:mm:ss&amp;amp;quot;, $F{Beginn})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-workarounds&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-142&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Besonderheiten / Workarounds ===&lt;br /&gt;
&lt;br /&gt;
* Bei Feldern mit Länge 1 klappte einfaches equals nicht, mit einer substring Anweisung geht es dann:&lt;br /&gt;
&lt;br /&gt;
$F{legende_Art des Berichts_value}.substring(0,1).equals(&amp;amp;quot;B&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;anchor-143&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Folgejahr berechnen: Selbst es das Feld Jahr gibt und es als Integer definiert ist in der Felderinfo, klappt der Bericht nur in JasperReports nicht in SuperX nicht wenn man schreibt:&amp;lt;br /&amp;gt;&lt;br /&gt;
$F{legende_Jahr_value}.intValue()+1&amp;lt;br /&amp;gt;&lt;br /&gt;
geht nicht, statt dessen:&amp;lt;br /&amp;gt;&lt;br /&gt;
new Integer($F{legende_Jahr_value}).intValue()+1&lt;br /&gt;
* Statt das Element table zu nutzen kann man auch manuell eine Tabelle erzeugen, in dem man per Rechtsklick auf ein Element Padding und Borders bearbeitet. Siehe http://www.youtube.com/watch?v=LbU6qTj3zQM&lt;br /&gt;
* Achten muss man dann darauf, dass Felder die Null sein können nicht „remove when blank“ haben und als TextFieldExpression besser nehmen: $F{Betrag}==null?&amp;amp;quot; &amp;amp;quot;:$F{Betrag}&lt;br /&gt;
* außerdem, wenn die erste Spalte einen stretch with overflow hat auch bei „stretch type“ „relative to tallest object“ einstellen &lt;br /&gt;
* Zeilenumbruch in Feld&amp;lt;br /&amp;gt;&lt;br /&gt;
Markup auf html setzen und dann z.B. &amp;amp;quot;Plan&#039;&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;br&amp;amp;gt;&#039;&#039;&#039;&#039;&#039;&#039;&amp;amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;häufig-benötigte-transformationen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-144&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Häufig benötigte Transformationen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-tid-in-namen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-145&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester-tid in Namen ====&lt;br /&gt;
&lt;br /&gt;
$V{Semester (Schlüssel)}.toString().endsWith(&amp;amp;quot;1&amp;amp;quot;)?(&amp;amp;quot;SS &amp;amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)):(&amp;amp;quot;WS &amp;amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)+&amp;amp;quot;/&amp;amp;quot;+(new Integer($V{Semester (Schlüssel)}.toString().substring(0,4))+1).toString())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-in-akad.-jahr&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-146&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester in akad. Jahr ====&lt;br /&gt;
&lt;br /&gt;
Die folgende Formel formt die Semesterzahl aus dem Studierenden-Datenblatt in ein akad. Jahr um nach der Formel &amp;amp;quot;Akad. Jahr=WS + darauf folgendes SS&amp;amp;quot;, z.B. WS 2009/2010 und SS 2010 werden zum akad. Jahr 2009:&lt;br /&gt;
&lt;br /&gt;
$F{Semester der Belegung (Schlüssel)}.toString().endsWith(&amp;amp;quot;2&amp;amp;quot;) ? $F{Semester der Belegung (Schlüssel)}.toString().substring(0,4):(new Integer($F{Semester der Belegung (Schlüssel)}.toString().substring(0,4))-1).toString() &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formel nimmt beim WS die ersten vier Stellen des Semester-Schlüssels, und beim SS werden die ersten vier Stellen als Ganzzahl codiert, und dann wird 1 subtrahiert.&lt;br /&gt;
&lt;br /&gt;
Da es diverse Definitionen von Akad. Jahr / Studienjahr / Prüfungsjahr gibt, kann man das obige Beispiel leicht für eigene Bedürfnisse abwandeln.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-147&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-148&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ==&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hat man allerdings unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;#0;#0&amp;amp;quot; : &amp;amp;quot;###0.00;###0,00&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fortgeschrittene-techniken-bei-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-149&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fortgeschrittene Techniken bei Feldern ==&lt;br /&gt;
&lt;br /&gt;
Textfelder enthalten standardmäßig nur den Feldnamen, aber die zugrunde liegenden [[#2.9.Expression Editor|outline|Ausdrücke]] lassen sich erweitern. Dabei kann auch alle Java Klassen zugegriffen werden, die sich im CLASSPATH befinden, z.B. [[#2.9.2.Umgang mit Zeichenketten|outline|java.lang.String]]. &lt;br /&gt;
&lt;br /&gt;
Hier ist ein Beispiel, in dem die Klasse &amp;amp;quot;StringBuilder&amp;amp;quot; (wird mit Java ausgeliefert , java.lang.StringBuilder) genutzt wird, um einen Text auszugeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Beispiel verdeutlicht: Man könnte da auch de.meineKlasse.erzeugeText(&amp;amp;quot;mein Text&amp;amp;quot;) schreiben, und diese Klasse dann in den CLASSPATH bei Jasper Start legen, und voila! Durch diese Funktionalität lassen sich also beliebige Java Klassen einbinden. Das gleiche geht übrigens auch mit Groovy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einrücken-von-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-150&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einrücken von Feldern ==&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Feldern macht man am besten, in dem man mehrere Textfelder definiert und jeweils eine printWhenExpression auf die Ebene einbaut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativer Versuch war folgendes:&lt;br /&gt;
&lt;br /&gt;
Wobei Nachteil bei sehr langen Texten, bei denen strech with overflows zur Geltung kommt, dann die zweite Zeile nicht eingerückt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Felder kann man für Textfelder (Strings) machen, indem der SuperX-Bericht eine Spalte einruecken definiert, der je nach gewünschter Einrückung eine Anzahl von x enthält, also z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| Betrag&lt;br /&gt;
| Einrücken&lt;br /&gt;
|-&lt;br /&gt;
| 1. Überschrift&lt;br /&gt;
| 30000&lt;br /&gt;
| X (mindestens 1 x nötig)&lt;br /&gt;
|-&lt;br /&gt;
| 1.1 Unterüberschrift&lt;br /&gt;
| 15000&lt;br /&gt;
| Xxxxx&lt;br /&gt;
|-&lt;br /&gt;
| 1.3. UnterUnterübersichrift&lt;br /&gt;
| 3000&lt;br /&gt;
| xxxxxxxxx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann kann man ein Textfeld erzeugen und bei TextFieldExpression einfach eintragen:&lt;br /&gt;
&lt;br /&gt;
$F{Einruecken}.replace(&#039;x&#039;,&#039; &#039;)+$F{Name}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Zahlfelder (z.B. Double) geht das so nicht so gut, weil dann das Pattern der Darstellung ###0,00 nicht mehr greift.&lt;br /&gt;
&lt;br /&gt;
Man definiert drei Felder nebeneinander, Beispiel:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| $F{Name}&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;gt;=6&lt;br /&gt;
&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;lt;6&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bei Ebene 1-5 wird ganz rechts ausgegeben, bei Ebene &amp;amp;gt;=6 wird mittig ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-151&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen ==&lt;br /&gt;
&lt;br /&gt;
Bei Berechnungen muss immer auch auf (ich nenne es mal) die Gültigkeit der Variable geachtet werden. Wenn eine Variable eine Summe bildet kann diese für z.B. „jetzt“ oder für eine Gruppe oder den ganzen Report gelten. Je nach Gültigkeit gilt z.B. die Summe nur für die aktuelle Gruppe (bei Gruppenbändern). &lt;br /&gt;
&lt;br /&gt;
Achtung: Es gibt nicht nur eine Gültigkeit bei der Variable selber (Reset type) sondern auch bei dem Element in dem Bericht. Wenn eine Variable in den Bericht gezogen wird, besitzt das entstandene Element eigene Eigenschaften, bei dem dann die „Evulation Time“ eingestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;prozentrechnung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-152&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Prozentrechnung ===&lt;br /&gt;
&lt;br /&gt;
Für die Prozentrechnung musst zuerst eine Variable z.B. mit dem Namen &amp;amp;quot;Gesamt&amp;amp;quot; anlegen mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Calculation = Sum&lt;br /&gt;
&lt;br /&gt;
Reset type = Report&lt;br /&gt;
&lt;br /&gt;
Dannach kann ein Textfeld mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
$F{Summe} / $V{Gesamt}&lt;br /&gt;
&lt;br /&gt;
erstellt werden mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Expression Class = Double&lt;br /&gt;
&lt;br /&gt;
Pattern = #.##0.00 % (kannst du unter Prozent auswählen)&lt;br /&gt;
&lt;br /&gt;
Evaluation Time = Auto &lt;br /&gt;
&lt;br /&gt;
In der Variable „Gesamt“ wird die Summe aus allen Werten des Feldes Summe gezogen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Prozentberechnungen in Grafiken muss in manchen Fällen der Wert auf 0 überprüft werden. Das kann man z.B. mit folgendem Code machen:&lt;br /&gt;
&lt;br /&gt;
( $V{zahl1} == 0 || $V{zahl2} == 0 ? 0 : ( $V{zahl1} / $V{zahl1} * 100) )&lt;br /&gt;
&lt;br /&gt;
Damit ist dann sichergestellt, dass es keine Probleme bei der Berechnung gibt, auch wenn die Zahlen mal leer sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rundung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-153&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rundung ===&lt;br /&gt;
&lt;br /&gt;
Wenn man runden möchte den Datentyp am besten auf BigDecimal stellen. Ansonsten wird schon mal aus 2,45 gerundet 2,4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hyperlinks&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-154&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hyperlinks ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;externe-links&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-155&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Externe Links ===&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld kann auch als Hyperlink befüllt und ausgegeben werden. Vorab bemerkt: Hyperlinks funktionieren in internen Viewer von JasperSoft Studio sowie beim Export nach Excel nicht bzw. nur eingeschränkt, zumindestens wenn man POI als Excel Engine nutzt. Selbst wenn Hyperlinks ausgegeben werden, ist in den Sicherheitseinstellungen von Excel oder OpenOffice eine Änderung vorzunehmen, damit Hyperlinks auch aktiv sind. Da es hier komplexte Unterschiede bei MS Excel-/OpenOffice-Versionen gibt, haben wir das Thema nicht weiter verfolgt und raten davon ab.&lt;br /&gt;
&lt;br /&gt;
In den anderen üblichen Ausgabeformaten (PDF, HTML) funktionieren die Hyperlinks.&lt;br /&gt;
&lt;br /&gt;
Dabei gibt es zwei Varianten:&lt;br /&gt;
&lt;br /&gt;
Das Textfeld hat als Markup Typ den Wert &amp;amp;quot;html&amp;amp;quot;, und die Hyperlinks werden in HTML-Notation eingefügt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier der Quellcode der textField-Expression zum Kopieren:&lt;br /&gt;
&lt;br /&gt;
$V{Gross_Forsch_Proj_Sprech}.replaceAll( &amp;amp;quot;\n&amp;amp;quot;,&amp;amp;quot;&amp;amp;lt;br /&amp;amp;gt;&amp;amp;quot; )+&amp;amp;quot;&amp;amp;lt;a href=\&amp;amp;quot;http://www.meinserver.de/url/\&amp;amp;quot;&amp;amp;gt;Siehe Details&amp;amp;lt;/a&amp;amp;gt;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Variante 2 erhält ein ReportElement im Quellcode die entsprechende Eigenschaft. In der von uns genutzten Version von JasperSoft Studio (6.5.1 final) war das noch nicht im GUI bearbeitbar, daher kann man das nur im Quelltext machen. Immerhin &amp;amp;quot;zerstört&amp;amp;quot; JasperSoft Studio dies beim Speichern nicht. &lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft des textField heißt hyperlinkType=&amp;amp;quot;Reference&amp;amp;quot; und wird wie folgt belegt:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;textField pattern=&amp;amp;quot;&amp;amp;quot; isBlankWhenNull=&amp;amp;quot;true&amp;amp;quot; &#039;&#039;&#039;hyperlinkType=&amp;amp;quot;Reference&amp;amp;quot;&#039;&#039;&#039;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;reportElement mode=&amp;amp;quot;Opaque&amp;amp;quot; x=&amp;amp;quot;363&amp;amp;quot; y=&amp;amp;quot;22&amp;amp;quot; width=&amp;amp;quot;259&amp;amp;quot; height=&amp;amp;quot;22&amp;amp;quot; forecolor=&amp;amp;quot;#000000&amp;amp;quot; backcolor=&amp;amp;quot;#FFFFFF&amp;amp;quot; uuid=&amp;amp;quot;48c8e2df-f231-4433-8836-309668e0a859&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;printWhenExpression&amp;amp;gt;&amp;amp;lt;![CDATA[$V{Gross_Forsch_Proj_Sprech}.length() &amp;amp;gt;100]]&amp;amp;gt;&amp;amp;lt;/printWhenExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/reportElement&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;box&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;pen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;topPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;leftPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;bottomPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;rightPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/box&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;textElement textAlignment=&amp;amp;quot;Left&amp;amp;quot; verticalAlignment=&amp;amp;quot;Middle&amp;amp;quot; rotation=&amp;amp;quot;None&amp;amp;quot; markup=&amp;amp;quot;html&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;font fontName=&amp;amp;quot;SansSerif&amp;amp;quot; size=&amp;amp;quot;6&amp;amp;quot; isBold=&amp;amp;quot;false&amp;amp;quot; isItalic=&amp;amp;quot;false&amp;amp;quot; isUnderline=&amp;amp;quot;false&amp;amp;quot; isStrikeThrough=&amp;amp;quot;false&amp;amp;quot; pdfEncoding=&amp;amp;quot;Cp1252&amp;amp;quot; isPdfEmbedded=&amp;amp;quot;false&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;paragraph lineSpacing=&amp;amp;quot;Single&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/textElement&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;textFieldExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;amp;quot;Siehe Details&amp;amp;quot;]]&amp;amp;gt;&amp;amp;lt;/textFieldExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;&amp;amp;lt;hyperlinkReferenceExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;amp;quot;http://meinserver/url&amp;amp;quot;]]&amp;amp;gt;&amp;amp;lt;/hyperlinkReferenceExpression&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;/textField&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des textField wird dann im Element hyperlinkReferenceExpression das Ziel des Hyperlinks definiert. Da dies eine Expression ist, kann man die Hyperlinks auch dynamisch aufbauen. In der Ausgabe dies das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pdf.png]]&lt;br /&gt;
&lt;br /&gt;
Je nach PDF Viewer muss man auch hier in den Sicherheitseinstellungen Hyperlinks aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;interne-linksanker&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-156&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Interne Links/Anker ===&lt;br /&gt;
&lt;br /&gt;
Auf einem Text Field kann ein Link eingetragen werden. Dafür muss man einfach mit der rechten Maustaste auf das Textfeld klicken und dann auf Hyperlink klicken. &lt;br /&gt;
&lt;br /&gt;
Das erste Feld oben &amp;lt;span id=&amp;quot;anchor-157&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Anchor Name Expression“ kann einen Text enthalten, auf den von einer anderen Stelle verwiesen werden kann. Es ist also eine Markierung. &lt;br /&gt;
&lt;br /&gt;
Wenn ich einen Hyperlink Type wähle, kann ich auch Verweise in den generierten Bericht erzeugen. Z.B. kann ich hier den Type „LocalAnchor“ wählen.&lt;br /&gt;
&lt;br /&gt;
Um z.B. ein Inhaltsverzeichnis zu erzeigen, welches im PDF bei klick auf ein Element dort hin springen soll, gehe ich zunächst zu der Stelle an der die Sprungmarke gesetzt werden soll und erzeuge dort ein Text Field mit der „Anchor Name Expression“ z.B. „Überschrift1“. Das Inhaltsverzeichnis muss dann auch aus Text Fields erzeugt werden und dort wähle ich dann bei Hyperlink type „LocalAnchor“. Nun habe ich unter der Auswahl von dem Hyperlink type ein neues Eingabefeld „Hyperlink Anchor Expression“. Dort trage ich jetzt exakt den gleichen Text „Überschrift1“ ein und im generierten PDF kann ich dort drauf klicken um an die Markierte Stelle zu kommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichts-properties-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-158&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichts-Properties setzen ==&lt;br /&gt;
&lt;br /&gt;
Es gibt auf Berichtsebene die Möglichkeit, die Ausgabe der Berichte über sog. &amp;amp;quot;Properties&amp;amp;quot; zu steuern, teilweise auch formatspezifisch. So können Sie z.B. steuern, daß bei der Ausgabe nach Excel Zahlenfelder als Zahlenfelder ausgegeben werden, nicht als Textfelder. &lt;br /&gt;
&lt;br /&gt;
Um die Berichts-Properties zu setzen, können Sie dies entweder für einzelne Berichte, order auch Server-weit einstellen.&lt;br /&gt;
&lt;br /&gt;
Bei einzelnen Berichten gehen Sie im Report Inspector auf das oberste Element, und dort auf &amp;amp;quot;Eigenschaften&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
Sie erhalten dann eine Liste der Eigenschaften: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Dort können Sie Zeilen hinzufügen, bearbeiten und löschen. Eine Erläuterung der jew. Property erhalten Sie in dem jew. Dialog.&lt;br /&gt;
&lt;br /&gt;
Um eine Property systemweit zu speichern, legen Sie eine Textdatei mit dem Namen &amp;amp;quot;jasperreports.properties&amp;amp;quot; an, und legen diese in den CLASSPATH. Im Kontext von Tomcat ist dies das Verzeichnis webapps/superx/WEB-INF/classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenlayout&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-159&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenlayout ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-160&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Typen von Seitenumbrüchen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wenn der gesamte Bericht paginiert ist (Report-Eigenschaft &amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;false&amp;amp;quot;), berechnet JR aufgrund des Seitenformats die Seitenumbrüche automatisch, und fügt auch, sofern vorhanden, die Bänder &amp;amp;quot;page header&amp;amp;quot; und &amp;amp;quot;page footer&amp;amp;quot; hinzu.&lt;br /&gt;
* Bei eingeschalteten Eigenschaften des jew. Bandes &amp;amp;quot;Start on a new page=true&amp;amp;quot; werden Seitenumbrüche ebenfalls aufgeführt&lt;br /&gt;
* Es gibt für manuelle Seitenumbrüche in der Palette das Element &amp;amp;quot;Break&amp;amp;quot;, das an beliebiger Stelle einen manuellen Seitenumbruch einfügt. Nun ist die Frage: wenn gesamte Bericht nicht paginiert ist (&amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot;), was dann bei einem Break passieren soll. In älteren JR Versionen (vor 4.8) wurde der Break trotzdem gesetzt. In Versionen ab 4.8 passiert das nicht mehr, man kann aber ab Version 5.1 über die Berichts-Property&amp;lt;br /&amp;gt;&lt;br /&gt;
net.sf.jasperreports.page.break.no.pagination=apply&amp;lt;br /&amp;gt;&lt;br /&gt;
das alte Verhalten nachbilden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 In JasperSoft Studio oder iReport kann man zusätzlich noch beim Rendern des Berichts über den Parameter JRParameter.&amp;lt;span id=&amp;quot;anchor-161&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;IS_IGNORE_PAGINATION steuern, ob Seitenumbrüche ausgeführt werden. Dies überlagert die Berichtseinstellung, wenn es angehakt ist. Das ist z.B. sinnvoll, wenn Sie im PDF Export Seitenumbrüche haben wollen, in Excel oder HTML aber nicht. &lt;br /&gt;
&lt;br /&gt;
Leider kann man diesen Parameter nicht im Servlet setzen. Wenn Sie Seitenkopf/Fuß bei PDF wünschen, bei Excel aber nicht, nutzen Sie die Anleitung [[#2.21.5.Seitenkopf und Seitenfuß bei Excel unterdrücken|outline|unten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten, wie sich das Detailband bei einem Seitenumbruch verhalten soll. Diese werden über den ‚Split Type‘ des Bandes gesteuert. Beispiel: &lt;br /&gt;
&lt;br /&gt;
Bei einem Seitenumbruch wird die aktuelle Zeile des Detailbandes aufgeteilt und geht auf der nächsten Seite weiter. Der ‚Split Type‘ steht auf Stretch.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_011.png|642x170px]]&lt;br /&gt;
&lt;br /&gt;
Falls erwünscht ist, dass jede Zeile ganz dargestellt wird, kann der ‚Split Type‘ auf Prevent gestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_012.png|300x281px]]Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_013.png|642x223px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-höhe-von-textfeldern-dynamisch-anpassen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-162&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-163&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die Höhe von Textfeldern dynamisch anpassen ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Textfelder besitzen die Eigenschaft „Stretch With Overflow“. Wird diese aktiviert, passt das Textfeld dynamisch seine Größe, falls der Inhalt nicht in das Feld passt. Der Text bricht um und die Höhe des Feldes wird vergrößert. Damit auch alle anderen Felder derselben Zeile ihre Größe entsprechend anpassen wird der „Stretch Type“ aller Felder dieser Zeile auf „Relative To Tallest Object (deprecated)“ gesetzt. Die Felder passen ihre Höhe dann dem höchsten Feld dieser Zeile an. Im Detailband genügt dies. Für Bänder mit festgelegter Zeilenanzahl, wie beispielsweise dem Titelband ist eine weitere Einstellung vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
Um im Titelband die Funktion „Stretch With Overflow“ nutzen zu können, ist es notwendig allen Feldern in darunterliegenden Zeilen den „Position Type“ „Float“ zuzuweisen. Die Position der Felder verändedrt sich dann entsprechend der Höhe darüberliegender Felder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bericht-ausgeben-ohne-dateninput&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-164&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bericht ausgeben, ohne Dateninput ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Bericht bzw. das Layout mit Titelband etc. ausgegeben werden soll, obwohl es keine Daten gibt, dann wird die Funktion ‚When No Data Type‘ auf ‚All Sections No Detail‘ gestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_014.png|336x374px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-beim-export-nach-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Besonderheiten beim Export nach Excel  ==&lt;br /&gt;
&lt;br /&gt;
Für jedes Exportformat gibt es auf Berichtsebene bzw. darunter spezielle Properties, die Feinheiten des Zielformates festlegen. Dies wird im folgenden anhand des Excel-Exports von Formeln und Namen von Arbeitsblättern (Sheet-Names) gezeigt.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass diese Hinweise für den &amp;amp;quot;alten&amp;amp;quot; Excel Export (&amp;amp;quot;xls&amp;amp;quot;) gelten. Für die Exportformate xlsx, JExcel-API oder OpenOffice-Spreadsheets funktionieren diese teilweise nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-165&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um leere Zeilen im Excelexport zu vermeiden, im jrxml-Kopf:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.collapse.row.span&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.remove.empty.space.between.columns&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-166&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-167&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-168&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.remove.empty.space.between.rows&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
wenn man Zahlenanpassung möchte&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
  → font wird ggfs. verkleinert&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.print.keep.full.text&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-formeln&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-169&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-170&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Formeln ===&lt;br /&gt;
&lt;br /&gt;
Es gibt auch die Möglichkeit Zahlen nicht nur vorab zu berechnen, sondern beim Export nach Excel als Excel-Formel zu übergeben. &lt;br /&gt;
&lt;br /&gt;
Um diese Funktion zu aktivieren muss im JRXML die Property mit folgender Zeile eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder über die Report Properties:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können in jedem Text Field in der Property expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type2.png]]&lt;br /&gt;
&lt;br /&gt;
folgende Einträge ergänzt werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type3.png]]&lt;br /&gt;
&lt;br /&gt;
Rechts neben &amp;lt;span id=&amp;quot;anchor-171&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-172&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.formula wird die Formel für Excel eingetragen, allerdings ohne = am Anfang. Außerdem werden nicht alle Excel-Formeln unterstützt, insbesondere nicht deren deutsche Lokalisierung (z.B. oben SUMME(D119...). Details finden Sie in der [https://poi.apache.org/spreadsheet/formula.html POI]-Dokumentation. Um zu erfahren wie die Felder lauten, welche berechnet werden sollen, am besten den Bericht einmal ausführen und in Excel anzeigen lassen. Achtung: Wenn der Bericht noch bearbeitet wird, können sich die Felder noch verändern.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;span id=&amp;quot;anchor-173&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-174&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-175&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-176&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.pattern können speziell für Excel Formatangaben gemacht werden. In dem obigen Beispiel &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-177&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-178&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;#,##0.00;-#,##0.00&amp;amp;quot; gibt es 2 Nachkommastellen und ein Tausender-Trennzeichen. Wenn z.B. Tausende von Euro angezeigt werden sollen, nimmt man als Pattern #. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Fallstrick: in der von uns getesteten Version (4.1.3) wurde die Property net.sf.jasperreports.export.xls.formula nur dann ausgewertet, wenn das das jew. Textfeld eine korrekte &amp;amp;quot;Text field expression&amp;amp;quot; hat, sie darf also nicht leer sein. Ob das ein Bug ist oder nicht ist uns derzeit unklar.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beispiel für eine komplexe Summenformel SUM(D7:D20,D28,D33,D40)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann die Formel auch als Expression formulieren, z.b. um eine Division durch 0 zu verhindern. Setzen Sie dazu das Häkchen bei &amp;amp;quot;Use an expression&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excelformula_expression.png]]&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel führt die Formel &amp;amp;quot;D91/D149&amp;amp;quot; nur aus, wenn die Variable $V{Haush_Professoren_1} (die Quelle für die Zelle D149) einen Wert größer 0 hat. Wenn nicht, wird keine Formel reingeschrieben, sondern der Wert 0. &lt;br /&gt;
&lt;br /&gt;
Diese Funktion bietet natürlich noch viel mehr Möglichkeiten, z.B. könnte man damit Excel-Zellennummern dynamisch berechnen etc. Beispiele dazu finden Sie in den JasperReport Demos in demo/samples/xlsformula/reports/XlsFormulaReport.jrxml. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilennummern-dynamisch-berechnen-ein-beispiel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-179&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilennummern dynamisch berechnen (Ein Beispiel) ====&lt;br /&gt;
&lt;br /&gt;
Will man dass in der gesamten Exceldatei immer Spalte F=D+E ist, braucht man nicht für jede Zeile feste Formeln eintragen.&lt;br /&gt;
&lt;br /&gt;
Als Erstes schaut man in welcher Zeile die eigentlichen Daten anfangen, also z.B. nach den zwei Headerzeilen ganz am Anfang der Tabelle und den 3 Spaltenüberschriften, die pro Seite wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel&lt;br /&gt;
&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||($F{Soll}==null&amp;amp;amp;&amp;amp;amp;$F{Reste}==null))?&amp;amp;quot;&amp;amp;quot;:&amp;lt;span id=&amp;quot;anchor-180&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;SUM(D&amp;amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+&amp;lt;span id=&amp;quot;anchor-181&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;$V{REPORT_COUNT}.intValue()+2)+&amp;amp;quot;,E&amp;amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+$V{REPORT_COUNT}.intValue()+2)+&amp;amp;quot;)&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Elegant geht es auch so&lt;br /&gt;
&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||&amp;lt;span id=&amp;quot;anchor-182&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;($F{Soll}==null&amp;amp;amp;&amp;amp;amp;$F{Reste}==null))?&amp;amp;quot;&amp;amp;quot;:&amp;lt;span id=&amp;quot;anchor-183&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-184&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-185&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;INDIRECT(\&amp;amp;quot;D\&amp;amp;quot; &amp;amp;amp; ROW())+INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das hat nur den Nachteil, dass die Formel in Excel nicht so schön ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;wenn-if-formel-ein-fallstrick&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-186&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;WENN-/IF-Formel – &#039;&#039;&#039;Ein&#039;&#039;&#039; Fallstrick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick, der uns einige Stunden Arbeitzeit gekostet hat: die IF-Formel wird in OpenOffice und MS Excel mit dem Trennzeichen &amp;amp;quot;;&amp;amp;quot; für die THEN- und ELSE-Bedingung formuliert. JasperReports nutzt als Trennzeichen aber &amp;amp;quot;,&amp;amp;quot;. Interessanterweise wird dann im fertigen Excel das &amp;amp;quot;,&amp;amp;quot; als &amp;amp;quot;;&amp;amp;quot; angezeigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sumif-summen-mit-bedingungen-bsp.-zwischensummen-ignorieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-187&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-188&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;SUMIF – Summen mit Bedingungen (Bsp.: Zwischensummen ignorieren) ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn die Summe über einen großen Bereich gezogen werden soll, in dem auch Zwischensummen vorkommen, gibt es die Folgende Formel:&lt;br /&gt;
&lt;br /&gt;
SUMIF(A&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:A&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;,\&amp;amp;quot;&amp;amp;lt;&amp;amp;gt;Summe*\&amp;amp;quot;,B&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:B&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Wenn die Zwischensummen mit addiert werden würden, wäre das Ergebnis doppelt so hoch wie es sein sollte. Die Funktion SUMIF beinhaltet 3 Bereiche. Zuerst wird der Bereich eingegeben, auf den die Bedingung angewendet wird:&lt;br /&gt;
&lt;br /&gt;
A&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:A&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von A1 bis A10. &lt;br /&gt;
&lt;br /&gt;
Danach kommt die Bedingung:&lt;br /&gt;
&lt;br /&gt;
\&amp;amp;quot;&amp;amp;lt;&amp;amp;gt;Summe*\&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, es werden alle Zeilen genommen, die &#039;&#039;&#039;&#039;&#039;NICHT&#039;&#039;&#039;&#039;&#039; mit „Summe“ anfangen.&lt;br /&gt;
&lt;br /&gt;
Als letztes kommt der Bereich, der summiert werden soll:&lt;br /&gt;
&lt;br /&gt;
B&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:B&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von B1 bis B10. &lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel werden alle Zahlen zwischen B1 und B10 aufsummiert, wenn in der entsprechenden Zeile in der Spalte A der Text nicht mit „Summe“ beginnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;statt-0-werten-eine-leere-zelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-189&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-190&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Statt 0-Werten eine leere Zelle ausgeben ====&lt;br /&gt;
&lt;br /&gt;
Im Standardfall wird eine 0 ausgegeben, falls eine Formel in Excel auf leere Zellen oder Zellen mit einer 0 verweist. Um stattdessen eine leere Zelle auszugeben wird die Property Property net.sf.jasperreports.export.xls.pattern genutzt. Das obige Beispiel wird erweitert:&lt;br /&gt;
&lt;br /&gt;
###0.00;-###0.00;;@&lt;br /&gt;
&lt;br /&gt;
Die jeweiligen Zellen weisen nun 2 Nachkommastellen aus und zudem werden 0-Werte nicht mehr angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;openoffice-vs-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-191&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;OpenOffice vs Excel&amp;lt;span id=&amp;quot;anchor-192&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
OpenOffice kommt mit folgender Berechnung klar&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())+INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW())-INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW())-INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW())&amp;amp;quot;:&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Excel macht hier Ärger, wenn eine der Zellen Null ist, wird als Gesamtergebnis #WERT angezeigt, entweder Sum-Formel benutzen, oder noch mal mit IF prüfen, ob Zelle gefüllt ist&lt;br /&gt;
&lt;br /&gt;
Struktur ist (IF(Zelle leer,0,sonst Zellenwert))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;IF(INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW()))+IF(INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW()))-IF(INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW()))-IF(INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW()))&amp;amp;quot;:&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;stretch-with-overflow-in-excel-korrekt-verarbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-193&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Stretch with Overflow‘ in Excel korrekt verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine Zelle haben mit besonders langem Text, z.B. „Unterstützungen auf Grund der Unterstützungsgrundsätze, Fürsorgemaßnahmen sowie Kosten nach dem Arbeitssicherheitsgesetz“, hilft es, nur bei der Zelle, Line Spacing auf double zu setzen, dann sieht es in Excel besser aus.&lt;br /&gt;
&lt;br /&gt;
Es wird das Stretch richtig verarbeitet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span id=&amp;quot;anchor-194&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ verkleinert fonts bei bedarf&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.print.keep.full.text&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pagination-in-excel-dokumenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-195&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pagination in Excel-Dokumenten ===&lt;br /&gt;
&lt;br /&gt;
In Excel-Dokumenten in die Seitengröße naturgemäß irrelevant. Trotzdem wird das im jrxml gesetzte Seitenformat beim Excel-Export beachtet. Das stellt sich so dar, dass im Excel-Dokument der „Rest der Seite“ durch einzelne breitere beziehungsweise höhere Zellen gefüllt wird. Das sieht beispielsweise folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter dem Tabellenschluss ist die Zeile 84 so hoch, dass die im jrxml eingestellte Seitenhöhe erreicht ist. Um das zu verhindern wird für den gesamten Bericht &amp;lt;span id=&amp;quot;anchor-196&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;isIgnorePagination=“true“ gesetzt. Die Einstellung wird im source-Code ganz oben im Tag &amp;amp;lt;jasperReport isIgnorePagination=“true“&amp;amp;gt; gesetzt oder über die grafische Oberfläche:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-export-in-einzelne-tabellenblätter&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-197&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Export in einzelne Tabellenblätter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normalerweise werden beim Export nach Excel die Berichtsinhalte in das erste Tabellenblatt geschrieben. Je nachdem wie Sie auf Berichtsebene die Property net.sf.jasperreports.export.xls.one.page.per.sheet setzen, wird der Seitenumbruch gesteuert. Setzen Sie den Wert auf &amp;amp;quot;true&amp;amp;quot;, dann führt jeder Seitenumbruch zu einem neuen Sheet bzw. Arbeitsblatt in der Excel-Datei. Standardmäßig werden diese dann &amp;amp;quot;Page 1&amp;amp;quot;, Page 2&amp;amp;quot; etc. benannt. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Namen der Sheets explizit vergeben wollen, können Sie dies wie folgt machen: Wenn Sie z.B. die Berichtsproperty net.sf.jasperreports.export.xls.sheet.names.all auf den Wert &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Hauptseite/wichtige Seite/Unwichtige Seite&amp;amp;quot; setzen, bekommen Sie drei Sheets mit den jew. Namen, d.h. der &amp;amp;quot;/&amp;amp;quot; fungiert als Trennzeichen. Dementsprechend sollte im Namen des Sheets kein &amp;amp;quot;/&amp;amp;quot; auftauchen.&lt;br /&gt;
&lt;br /&gt;
Seit JR 4.1 gibt es auch die Möglichkeit, die Sheetnamen dynamisch zu vergeben. Auch hier werden Properties mit Expressions genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten Berichtsinhalte in verschiedene Excel-Tabellenblätter zu verteilen. Im Folgenden werden zunächst Möglichkeiten betrachtet, welche bei Einzelberichten in Frage kommen. Danach geht es um die klassische Haupt- und Unterberichtsstruktur und zuletzt um Booklets, welche die in den meisten Fällen wohl elegantere Alternative zu klassichen Haupt- und Unterberichten darstellen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-berichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-198&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Berichte ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben einen Bericht mit der Gruppierung auf die Spalte &amp;amp;quot;LFB&amp;amp;quot;, im Gruppenkopf befindet sich ein Text Field mit der Expression $F{LFB}.&lt;br /&gt;
&lt;br /&gt;
Sie können diesem Textfeld eine Property net.sf.jasperreports.export.xls.sheet.name geben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names.png]]&lt;br /&gt;
&lt;br /&gt;
Das Textfeld erhält somit beim Füllen des Berichts den jew. Wert, z.B. &amp;amp;quot;Anglistik, Amerikanistik&amp;amp;quot;, und diese Überschrift steht auch im Gruppenkopf. Wenn der Gruppenkopf das Attribut &amp;amp;quot;Start on a new page&amp;amp;quot; hat, dann beginnt der Gruppenkopf auf einer neuen Seite und, dank der Berichts-Property net.sf.jasperreports.export.xls.one.page.per.sheet , erzeugt Excel / OpenOffice dann ein neues Sheet mit dem Namen Anglistik, Amerikanistik. Beim Sheetnamen soll nur sichergestellt werden, dass kein &amp;amp;quot;/&amp;amp;quot; im Text vorkommt, daher der replace-Befehl zur Sicherheit. Hier ein Screenshot in OpenOffice:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann das gesamte Verhalten auch deaktivieren, indem man auf Berichtsebene das Attribut &amp;amp;quot;Ignore Pagination&amp;amp;quot; auf &amp;amp;quot;true&amp;amp;quot; setzen. In diesem Falle werden alle Seitenumbrüche ignoriert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis für SuperX/Edustore Nutzer: leider haben wir in älteren Kernmodul-Versionen dieses Attribut &amp;amp;quot; Ignore Pagination&amp;amp;quot; im Servlet fest auf &amp;amp;quot;true&amp;amp;quot; gesetzt, so dass Sie diese Funktion im Servlet erst ab Version SuperX 4.5 bzw. HISinOne-BI 7.0 nutzen können.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;haupt--und-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-199&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haupt- und Unterberichte ====&lt;br /&gt;
&lt;br /&gt;
Das vorherige Kapitel hat aufgezeigt, wie innerhalb eines einzelnen Einzelberichtes mit gezieltem setzen von Seitenumbrüchen ein solcher Berichte auf verschiedene Tabellenblätter eines Excel-Dokumentes augeteilt wird.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Einzelberichte in einem Excel-Dokument gesondert auf verschiedene Tabellenblätter aufzuteilen eignen sich klassiche Haupt- und Unterberichtsstrukturen (vgl. Kapitel 3.5). Die simpelste Methode wäre das Seitenlayout eines Berichtes so groß zu wählen, dass der gesamte Bericht auf eine Seite passt. &lt;br /&gt;
&lt;br /&gt;
Falls Haupt- und Unterberichte verwendet werden, darauf achten, dass der Hauptbericht direkt unter dem letzten Unterberichtselement endet. Ansonsten entsteht ein weiteres leeres Tabellenblatt. Der folgende Screenshot zeigt, wie es nicht sein sollte. Hier muss das Summary-Band verkleinert werden, sodass es mit dem Unterberichtselement endet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_main-_subreport.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;individuelle-gestaltung-bei-booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-200&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Individuelle Gestaltung&#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-201&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; bei Booklets ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Booklets bieten diverse Vorteile beim Gestalten der einzelnen Seiten beziehungsweise Sheets. Denn jeder Unterbericht kann hier individuell formatiert werden. Dies betrifft beispielsweise die Definition von Sheetnamen, da hierfür die Eigenschaft &amp;amp;quot;Tab name expression&amp;amp;quot; im &amp;amp;quot;Buch&amp;amp;quot;-[[#2.8.1.Hauptbericht im Booklet|outline|Bericht]] vorgesehen ist. Auch das Problem, dass ein Sheet in diesem Falle nicht mehrere Seite umfassen darf (und man somit die Seitengröße unrealistisch groß machen muss) ist damit behoben.&lt;br /&gt;
&lt;br /&gt;
Eine Ausnahme stellen jedoch die Properties dar. Diese werden im Hauptbericht gesetzt und gelten für alle Unterberichte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-drucklayout-in-excel-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-202&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das Drucklayout in Excel konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenränder-und-kopfzeile-im-drucklayout-formatieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-203&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Seitenränder und Kopfzeile im Drucklayout formatieren&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Anlegen eines Textes in der Kopfzeile gibt es die Properties&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-204&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.left&amp;amp;quot;&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je nach gewünschter Position wird der jeweiligen Property ein Wert übergeben. Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;![CDATA[&amp;lt;span id=&amp;quot;anchor-205&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-206&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;10&amp;lt;span id=&amp;quot;anchor-207&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Meldung der Ist-Besetzung]]&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;/property&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;![CDATA[&amp;lt;span id=&amp;quot;anchor-208&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;amp;amp;10&amp;lt;span id=&amp;quot;anchor-209&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Anlage 1 &amp;lt;span id=&amp;quot;anchor-210&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Regular&amp;amp;quot;&amp;amp;amp;10 (zu VwV HWiF 3.2.1)]]&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;/property&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird zentral der Text „&#039;&#039;&#039;Meldung der Ist-Besetzung&#039;&#039;&#039;“ übergeben. Der Text ist in der Schriftart Liberation Sans und fettgedruckt formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;), sowie in Schriftgröße 10 (&amp;amp;amp;10).&lt;br /&gt;
&lt;br /&gt;
Rechts wird der Text „&amp;lt;span id=&amp;quot;anchor-211&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Anlage 1 &#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-212&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;(zu VwV HwiF 3.2.1)“ verwandt. Der erste Teile „&#039;&#039;&#039;Anlage 1&#039;&#039;&#039;“ ist wie der zentrale Text formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;amp;amp;10). Für den zweiten Teil „(zu VwV HwiF 3.2.1)“ wird von Fett- auf Regulärdruck gewechselt (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Regular&amp;amp;quot;&amp;amp;amp;10). Weitere Möglichkeiten zur Formatierung finden sich auf https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/extensions/XSSFHeaderFooter.html.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit die Kopfzeile im Drucklayout sichtbar ist, ist es notwendig den Seitenrand groß genug zu gestalten. Dafür werden folgende Properties genutzt:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.left.margin&amp;amp;quot; value=&amp;amp;quot;20&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.right.margin&amp;amp;quot; value=&amp;amp;quot;20&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.top.margin&amp;amp;quot; value=&amp;amp;quot;40&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.bottom.margin&amp;amp;quot; value=&amp;amp;quot;10&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;vordefinierte-zeilen-im-drucklayout-auf-jeder-seite-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-213&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Vordefinierte Zeilen im Drucklayout auf jeder Seite wiederholen ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um im Drucklayout beispielsweise einen Tabellenkopf auf jeder Seite zu wiederholen, wird die Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-214&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-215&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sx_repeating.rows.range&amp;amp;quot; &amp;lt;span id=&amp;quot;anchor-216&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-217&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;value=&amp;amp;quot;3:7&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
genutzt (dafür eigene Klasse de.superx.servlet.SxJRXlsExporter geschaffen und de.superx.servlet.JasperCreator angepasst – aktuell in NHS-Pack für 7.1 enthalten). Der Wert gibt an, welche Zeilen des Excel-Dokumentes im Drucklayout auf jeder Seite wiederholt werden. Im Beispiel (&#039;&#039;value=&amp;amp;quot;3:7&amp;amp;quot;&#039;&#039;) sind die Zeilen 3 bis 7 betroffen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-im-drucklayout-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-218&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche im Drucklayout verhindern ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teilweise ist es wünschenswert Seitenumbrüche im Drucklayout zu verhindern, sowohl in der Breite als auch in der Höhe. Hierfür werden die Properties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.fit.width&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.fit.height&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
genutzt. Also value kommen hier 1 und 0 für entweder true oder false infrage. Setzt man der Wert true, dann wird nicht umgebrochen. Das bedeutet für dieses Beispiel, dass der gesamte Inhalt des Excel-Dokuments auf eine Seite gedruckt würde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-verbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-219&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellen verbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.export.xls.sx_cell_merge&amp;amp;quot; value=&amp;amp;quot;0,6,0,7|1,2,3,4&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
1,1,4,1 - will merge from B2 to E2. Remember it is zero based indexing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellschutz-aktivieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-220&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellschutz aktivieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.password&amp;amp;quot; value=&amp;amp;quot;gmmmyflb&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ Alle Zellen sind mit Passwort geschützt.&lt;br /&gt;
&lt;br /&gt;
Wenn bestimmte Spalten/Zeilen nicht geschützt sein sollen:&lt;br /&gt;
&lt;br /&gt;
Property net.sf.jasperreports.export.xls.cell.locked  false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies kann man auch über eine komplexe PropertyExpression steuern, z.B.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(&lt;br /&gt;
&lt;br /&gt;
($F{Zeile}!=null&amp;amp;amp;&amp;amp;amp;(&lt;br /&gt;
&lt;br /&gt;
  $F{Zeile}.indexOf(&amp;amp;quot;A&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.indexOf(&amp;amp;quot;B&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.indexOf(&amp;amp;quot;C&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;I.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;II.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;III.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;IV.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;V.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VI.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VII.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VIII.&amp;amp;quot;)))||&lt;br /&gt;
&lt;br /&gt;
($F{Kontengruppe}!=null&amp;amp;amp;&amp;amp;amp;$F{Kontengruppe}.equals(&amp;amp;quot;53,54,58&amp;amp;quot;))||&lt;br /&gt;
&lt;br /&gt;
($F{Name}!=null&amp;amp;amp;&amp;amp;amp;(&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe der (ordentlichen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Ordentliche &amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;- ordentliche&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;+/- Finanz&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Investitionen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Finanzbedarf&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Deckung&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;5.1 E&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe sonstige betriebl&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Sonstige betriebliche&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;5.1.) Erträge aus Zuweisungen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Materialaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe Materialaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Personalaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe Personalaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Sonstige betriebliche Aufwendungen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe sonstige betriebliche Aufwendungen&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
))?&amp;amp;quot;true&amp;amp;quot;:&amp;amp;quot;false&amp;amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-fixieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zellen fixieren ===&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio können Sie festlegen, dass beim Excel-Export bestimmte Zeilen und Spalten fixiert werden, indem Sie spezielle Eigenschaften für den Export konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Um Zeilen und Spalten in Excel zu fixieren, müssen Sie die Eigenschaften &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;net.sf.jasperreports.export.xls.freeze.row &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
und &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;net.sf.jasperreports.export.xls.freeze.column&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
konfigurieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie möchten, dass die erste Zeile und die erste Spalte fixiert werden:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;net.sf.jasperreports.export.xls.freeze.row = 2&#039;&#039;&lt;br /&gt;
* &#039;&#039;net.sf.jasperreports.export.xls.freeze.column = B&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nach dem Export werden in Excel die erste Zeile und die erste Spalte fixiert, und der Rest des Arbeitsblatts bleibt scrollbar.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.freeze.column&amp;amp;quot; value=&amp;amp;quot;B&amp;amp;quot;/&amp;amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.freeze.row&amp;amp;quot; value=&amp;amp;quot;2&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hintergrund--oder-textfarben-beim-excel-export&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-221&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-222&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hintergrund- oder Textfarben beim Excel-Export ===&lt;br /&gt;
&lt;br /&gt;
Beim Excel Export werden Zellen, die ein Rechteck mit einer Print-When-Expression zugewiesen bekommen haben, u.U. nicht richtig wiedergegeben, während es beim PDF Export klappt. Um dies zu beheben müssen Sie&lt;br /&gt;
&lt;br /&gt;
1. den Farbraum beim Excel Export erweitern: Excel unterstützt bei Hintergrund- oder Vordergrundfarben nur wenige [http://dmcritchie.mvps.org/excel/colors.htm Farbcodes]. Für spezielle Farben nach RGB-Wert muss die Berichts-property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-223&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.create.custom.palette&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
gesetzet werden (benötigt Bibliothek org-netbeans-core.jar im Classpath der Anwendung)&lt;br /&gt;
&lt;br /&gt;
2. Statt farbiger Textfelder oder Rechtecke mit &amp;amp;quot;Print-When-Expression&amp;amp;quot; müssen Sie [[#2.11.Conditional styles - Zeilen fett machen|outline|Conditional Styles]] nutzen.&lt;br /&gt;
&lt;br /&gt;
3. Wenn Sie mit Hintergrundfarben arbeiten, müssen die Textfelder und die jew. Styles die Eigenschaft &amp;amp;quot;Opaque&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
4. Beim Export nach Excel müssen Sie das JExcelApi nutzen. Dies ist bei SuperX seit Kernmodul 4.5 der Standard, bei HISinOne-BI seit Version 7.1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenkopf-und-seitenfuß-bei-excel-unterdrücken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-224&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenkopf und Seitenfuß bei Excel unterdrücken ===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr Bericht normalerweise ein Band &amp;amp;quot;Page Header&amp;amp;quot; bzw. &amp;amp;quot;Page Footer&amp;amp;quot; hat, können Sie dies beim Exportformat XLS unterdrücken (z.B. wenn Sie dort keine Seitenzahlen wünschen, bei PDF aber schon).&lt;br /&gt;
&lt;br /&gt;
Setzen Sie dazu die Berichts-Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-225&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-226&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.1&amp;amp;quot; value=&amp;amp;quot;pageHeader&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.2&amp;amp;quot; value=&amp;amp;quot;pageFooter&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Ausgabeformat XLSX heißen die Properties:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.1&amp;amp;quot; value=&amp;amp;quot;pageHeader&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.2&amp;amp;quot; value=&amp;amp;quot;pageFooter&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies klappt ab JR Version 4.5, sie können diese Properties aber lediglich im XML-Quellcode hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;dimension-tausend-euro&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-227&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dimension Tausend-Euro  ==&lt;br /&gt;
&lt;br /&gt;
In Excel als Dimension Tausend-Euro ausgeben, mit zwei Nachkommastellen&lt;br /&gt;
&lt;br /&gt;
In Deutschem Excel bei manueller Angabe benutzerdefiniertes Format #.##0,00.&lt;br /&gt;
&lt;br /&gt;
In Jasper muss Amerikanische Vorlage sein:&lt;br /&gt;
&lt;br /&gt;
-&amp;amp;gt; #,##0.00&lt;br /&gt;
&lt;br /&gt;
Bei Excel kann man als Property Expresion net.sf.jasperreports.export.xls.pattern z.B. nehmen&lt;br /&gt;
&lt;br /&gt;
#, → zeigt nur Tausender Werte an&lt;br /&gt;
&lt;br /&gt;
#,##0.00, → zeigt Tausernder Werte, mit zwei Nachkommastellen an&lt;br /&gt;
&lt;br /&gt;
der Werte selber ist einfach &amp;lt;span id=&amp;quot;anchor-228&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;$F{Soll}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei PDF/HTML muss man den Wert duch 1000 teilen $F{Soll}.doubleValue()/1000&lt;br /&gt;
&lt;br /&gt;
und dann als Pattern z.B. #,##0.00;-#,##0.00&lt;br /&gt;
&lt;br /&gt;
Die Rundung macht das Pattern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-229&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung in Edustore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsentwicklung-bei-grunddaten-und-basisberichten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-230&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsentwicklung bei Grunddaten und Basisberichten ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemein&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-231&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemein ===&lt;br /&gt;
&lt;br /&gt;
In den Grunddaten- und Basisberichten kann man beliebige Ergebnistabellen lokal als XML speichern, und dann als Datenquelle in JasperReports einbinden. Dann kann man den Bericht lokal gestalten, und, wenn er fertig ist, in die Weboberfläche einhängen. Die XML Datei wird nur für die Testausgabe bei JasperReports verwendet und dient als Ersatz der Datenbank. Wenn der Bericht in der Weboberfläche eingehängt ist, wird dieser direkt mit frischen Daten versorgt.&lt;br /&gt;
&lt;br /&gt;
Für die Folgenden 2 Punkte „Datenquelle erzeugen“ und „Template erzeugen“ gibt es [http://www.superx-projekt.de/doku/benutzerhandbuch/movies/jasper_erzeugen.viewlet/jasper_erzeugen_viewlet_swf.html hier] einen Kurzfilm.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_vergleich_jrxml_xml_zusammen.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-232&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Ergebnistabelle eines Berichtes vorliegt, erhält man über den XML Export von SuperX die Datenquelle für den Jasper Report. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man lokal ab: Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine xml-Datei abspeichern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls der Tomcat in ISO Kodierung läuft, muss für JasperReports in der ersten Zeile bei encoding ein UTF-8 eingetragen werden. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;ISO-8859-1&amp;amp;quot;?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird ersetzt mit:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot;?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In JasperReports sind dann folgende Schritte zu tun, um die neue Datenquelle einzubinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-233&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Die Datenquellen heißen hier &amp;amp;quot;Data Adapters&amp;amp;quot; und werden im Repository hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie JasperSoft in Ihrem vorhandenen Eclipse als Plugin installiert haben, sehen Sie den Reiter &amp;amp;quot;Repository&amp;amp;quot; nicht; in diesem Fall liegen die Data Adapter im jew. Projekt. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Assistenten geben Sie XML-Document als Datentyp an, und im nächsten Reiter spezifizieren Sie das Format:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Datumsformat ist bei Edustore das deutsche Schema &amp;amp;quot;dd.MM.yyyy&amp;amp;quot;, und das Zahlenformat ist eine Zahl mit 6 Nachkommastellen und &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner, also &amp;amp;quot;#0.######&amp;amp;quot;. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist auch das Ankreuzfeld &amp;amp;quot;Use the report Xpath expression&amp;amp;quot;, dies müssen Sie immer ankreuzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-234&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in iReport ====&lt;br /&gt;
&lt;br /&gt;
Klick auf „Report Datasources“. Es öffnet sich ein Fenster, in dem die vorhandenen Datenquellen angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Fenster Klickt man auf „New“ um eine neue Datenquelle anzulegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wählt man „XML file datasource“ aus und klickt auf „Weiter“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt wählt man einen Eindeutigen Namen aus, der auch später in dem Dropdown Menü erscheint, gibt den Dateipfad an und ändert die restlichen Einstellungen wie im Screenshot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formate für Datum und Nummer müssen angegeben werden, da sonst die amerikanischen angenommen werden. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: in JasperReports 3.7.1 werden trotz des korrekten Zahlenformats die Dezimalstellen von Beträgen immer mit &amp;amp;quot;,00&amp;amp;quot; wiedergegeben. Dies liegt an der &amp;amp;quot;Locale&amp;amp;quot;, man muss diese auf &amp;amp;quot;Englisch&amp;amp;quot; umstellen. Das Problem ist allerdings: sobald man das macht, kann man die XML-Datenquelle in der Datenquellenverwaltung nicht mehr ändern, d.h. man muss sie bei Änderungen löschen und neu einfügen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Nach dem Speichern erscheint die Datenquelle im dropdown Menü und kann ausgewählt werden. Damit man die Datenquelle nutzen kann, braucht man auch noch ein Template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-235&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Um ein leeres Template zu erzeugen, geht man wieder in die Ergebnistabelle der selben Maske, deren Datenquelle erstellt wurde, wählt im Dropdown Menü neben „Bericht entwerfen“ „Leerer Bericht“ aus und klickt auf das Icon daneben „Export als JasperReport-Template“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-leeren_Bericht_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man Lokal ab. Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine jrxml Datei abspeichern. JR in der Endung jrxml steht für JasperReports. Damit können die Datenquellen und die Templates unterschieden werden und sogar den selben Dateinamen tragen (nur unterschiedliche Dateiendung).&lt;br /&gt;
&lt;br /&gt;
Sie sollten es sich nicht zumuten und versuchen über JasperReports einen neuen Bericht zu entwerfen. Nehmen Sie immer den &amp;amp;quot;leeren&amp;amp;quot; Bericht aus der entsprechende Maske, da dort sehr viele Kleinigkeiten voreingestellt sind. Sie sparen sich damit immens viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-236&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template einbinden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reportdesign-verlinken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-237&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reportdesign verlinken ====&lt;br /&gt;
&lt;br /&gt;
Um das erstellte Template einzubinden, muss zunächst die jrxml Datei in das Verzeichnis webapps/superx/WEB-INF/reports kopiert werden. Danach muss das Stylesheet im System bekannt gegeben werden. In Grunddaten und Basisberichte geht man dazu in „Administration“ → „Masken“ → „Stylesheet suchen“ und schickt die Maske so ab. Danach klickt man bei einem beliebigen Stylesheet auf den „bearbeiten“ Button ganz rechts in der Tabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klickt dann auf „Neuen Datensatz erzeugen“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Dateiname kommt der Dateiname der jrxml Datei rein, welche sich in dem reports Ordner befindet. Beschriftung und Beschreibung sollte eindeutig dem Stylesheet zuzuordnen sein. Für JasperReport wählt man bei „Tabelle oder Maske“ „Stylesheet für eine Ergebnistabelle“ aus. Der Dateityp stellt das default Ausgabeformat fest.&lt;br /&gt;
&lt;br /&gt;
Um dieses Stylesheet nun einer Maske zuzuordnen, geht man in die Maske „Administration“ → „Masken“ → „Maske suchen“, sucht in dem Feld „Maske“ die gewünschte Maske aus und klickt dann auf „Abschicken“. Nun klickt man auf den Button Stylesheets neben der Maske, der das neue Stylesheet zugeordnet werden soll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem neuen Fenster wählt man das neu erstellte Stylesheet aus und speichert diese Einstellung ab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Bericht der Maske zugeordnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Normal wird im Servlet direkt vom Berichtsergebnis nach JasperReports übergeben, d.h. ohne den Zwischenweg XML. Wenn aber im Dateinamen *_xmlsource.jrxml steht, wird Datenquelle XML erzwungen (für Makroberichte, Unterberichte, Subdatasets oder spezielle XPATH-Selektionen wichtig).&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-des-upload-servlets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-238&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung des Upload Servlets ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keinen Schreibzugriff auf den Ordner &#039;&#039;WEB-INF/reports&#039;&#039; haben, können Sie auch Templates über das [http://www.superx-projekt.de/doku/kern_modul/admin/f_Anpassungderwebxml.htm Upload Servlet ]direkt im Browser hochladen. Dazu müssen Sie in der web.xml die Dateiendungen .jrxml und (sofern benötigt) .jasper erlauben, siehe obiger Link.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie die Report Templates hochladen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload1.png]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Upload können Sie das Template zunächst registrieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload2.png]]&lt;br /&gt;
&lt;br /&gt;
und dann der jew. Maske zuordnen. &amp;lt;span id=&amp;quot;anchor-239&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beachten Sie, dass der Pfadname relativ zum Ordner WEB-INF/reports angegeben wird, also in der Regel&lt;br /&gt;
&lt;br /&gt;
../../default/custom&lt;br /&gt;
&lt;br /&gt;
bzw. beim Mandantenbetrieb&lt;br /&gt;
&lt;br /&gt;
../../Mandant-ID/custom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;probleme-beim-deployment-im-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-240&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Probleme beim Deployment im Server ====&lt;br /&gt;
&lt;br /&gt;
Es kann u.U. beim Deployment eines Berichts im Server das Problem auftreten, daß ein Bericht im lokalen iReport mit der XML-Datenquelle funktioniert, aber im Server für einzelne Merkmale kein Ergebnis geliefert wird. Dies hat folgende Ursache:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;feldnamen-im-berichtsdesign-weichen-vom-datenbank-feldnamen-ab&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-241&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Feldnamen im Berichtsdesign weichen vom Datenbank-Feldnamen ab  =====&lt;br /&gt;
&lt;br /&gt;
Bei der lokalen Entwicklung in iReport werden die Berichte mit der Datenquelle XML erzeugt. In den Muster-JRXML-Dateien, die man über das Feld &amp;amp;quot;Bericht erzeugen&amp;amp;quot; generiert, sind die Felder über die folgende Notation deklariert:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;field name=&amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;fieldDescription&amp;amp;gt;&amp;amp;lt;![CDATA[col[@id=&amp;amp;quot;4&amp;amp;quot; and wert!=&amp;amp;quot;&amp;amp;quot;]/wert]]&amp;amp;gt;&amp;amp;lt;/fieldDescription&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/field&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-242&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dies bedeutet: Das Feld &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot; hat den Typ &amp;amp;quot;String&amp;amp;quot; und befindet sich im XML-Datenstrom in der vierten Spalte (col@id=4). Dabei befindet sich in Datenblattberichten im Spaltennamen immer ein &amp;amp;quot;\n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot;, um einen Zeilenumbruch im generischen Standardlayout zu erzeugen. Dieses &amp;amp;quot;\n&amp;amp;quot; wird dann für iReport und JasperReports automatisch durch ein Leerzeichen ersetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn die XML-Datenquelle nicht verändert wird, dann ist das Feld immer mit dem gleichen Inhalt gefüllt. &lt;br /&gt;
&lt;br /&gt;
Wenn man den Bericht dann auf den Server kopiert und einbindet, ohne im Dateinamen &amp;amp;quot;_xmlsource&amp;amp;quot; zu verwenden, dann wird das Feld nicht über die Spaltennummer identifiziert, sondern über den Feldnamen, hier z.B. &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot;. Das bedeutet, daß der Server genau diesen Feldnamen zurückliefern muss. Das kann u.U. abweichen:&lt;br /&gt;
&lt;br /&gt;
* Der Server bzw. die zugrunde liegende Maske wurde verändert, so daß der Feldname geringfügig anders ist. Das sollte eigentlich nicht passieren, kann aber vorkommen.&lt;br /&gt;
* Beim Betrieb in HISinOne gibt es in allen Versionen bis 3.02 noch eine kleine Veränderung, wenn das Modul des zugrunde liegenden Datenblattberichts bzw. der Maske direkt per Tomcat-Start installiert wurde, und nicht in dem Edustore-Installation/Upgrade-Menü. Wenn die Module beim Tomcat Start in eine leere Datenbank installiert werden, dann werden Zeichenketten mit dem Feldinhalt &amp;amp;quot;\n&amp;amp;quot; verfremdet nach &amp;amp;quot;n&amp;amp;quot; (also der &amp;amp;quot;\&amp;amp;quot; wird entfernt). Das führt dann dazu, daß das Feld ohne den &amp;amp;quot;\&amp;amp;quot; in der jrxml-Datei deklariert wird, also z.B.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;field name=&amp;amp;quot;Fakultät/Fachbereichn(Schlüssel)&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;fieldDescription&amp;amp;gt;&amp;amp;lt;![CDATA[col[@id=&amp;amp;quot;4&amp;amp;quot; and wert!=&amp;amp;quot;&amp;amp;quot;]/wert]]&amp;amp;gt;&amp;amp;lt;/fieldDescription&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/field&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-243&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wenn man danach dann einen Upgrade der jew. Komponente ausführt, dann wird die Spalte in der Maske umbenannt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039;\n&#039;&#039;&#039;(Schlüssel)&amp;amp;quot; und der Feldname korrekt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039; &#039;&#039;&#039;(Schlüssel)&amp;amp;quot; umgesetzt. Durch das &amp;amp;quot;n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot; paßt der Feldname in der jrxml-Datei nicht mehr zum Ergebnis aus der Datenbank, und das Feld ist leer. So kann es passieren, daß ein Bericht in iReport funktioniert, im Server aber nicht. Im folgenden die Lösung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;korrektur-der-feldnamen-im-berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-244&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Korrektur der Feldnamen im Berichtsdesign =====&lt;br /&gt;
&lt;br /&gt;
Um sicherzustellen, dass der Feldname der jrxml-Datei mit der jeweils aktuell benutzten Datenbank-Version übereinstimmt, geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
* Erzeugen Sie in Edustore eine HTML-Ausgabe der zugrunde liegenden Abfrage, bei Datenblatt-Berichten ist dies das &amp;amp;quot;generische Standardlayout&amp;amp;quot;.&lt;br /&gt;
* Klicken Sie dann oben im Berichtskopf auf den Button &amp;amp;quot;Bericht entwerfen&amp;amp;quot; -&amp;amp;gt; &amp;amp;quot;leerer Bericht&amp;amp;quot; &lt;br /&gt;
* Im Quellcode sehen Sie die Zeilen &amp;amp;lt;field name=&amp;amp;quot;Berichtsname&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt; ... Hier ist jedes einzelne Feld aus der Datenbank deklariert.&lt;br /&gt;
* Markieren Sie alle Zeilen bis zum letzten &amp;amp;quot;&amp;amp;lt;field...&amp;amp;gt;&amp;amp;quot;-Element, i.d.R. ist dies das Feld &amp;amp;lt;field name=&amp;amp;quot;user&amp;amp;quot;..., und kopieren Sie dies in die Zwischenablage&lt;br /&gt;
* Öffnen Sie die jrxml-Datei mit einem UTF-8-fähigen Editor, z.B. Jedit.&lt;br /&gt;
* Ersetzen Sie genau die &amp;amp;quot;&amp;amp;lt;field...&amp;amp;quot;-Passage aus der Zwischenablage.&lt;br /&gt;
* Speichern Sie den Bericht, und testen Sie die Vorschau in JasperReports. Wahrscheinlich kommt eine Fehlermeldung &amp;amp;quot;Field ... does not exist&amp;amp;quot; o.ä., dann müssen Sie das Feld mit Suchen-&amp;amp;gt;Ersetzen umbenennen.&lt;br /&gt;
* Das machen Sie so lange, bis die Vorschau funktioniert. Danach können Sie die jrxml-Datei wieder auf den Server kopieren. Die Felddeklaration passt dann zum Server. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zuordnung-von-default-feldbelegungen-zu-stylesheets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-245&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zuordnung von Default-Feldbelegungen zu Stylesheets ==&lt;br /&gt;
&lt;br /&gt;
Es können für Stylesheets Default-Feldbelegungen für Stylesheets hinterlegt werden. Hintergrund dieser Funktion ist, dass bei speziellen Stylesheets standardmäßig beliebig viele Spalten vorbelegt werden können. In Datenblattberichten gibt es z.B. das Feld &amp;amp;quot;Felder&amp;amp;quot;, in dem die auszugebenden Spalten angegeben werden. Aus Performancegründen sollten nur die Spalten ausgegeben werden, die auch benötigt werden. So kann dann z.B.für JasperReport Stylesheets hinterlegt werden können, welche Spalten auf jeden Fall benötigt werden. Der Anwender weiß nicht welche Spalten benötigt werden und würde im Normalfall alle Spalten ausgeben lassen um keine Fehlermeldung zu erhalten. Dadurch würde aber wiederum der Bericht unnötig lange dauern, da alle Spalten berechnet werden müssen, auch die, welche nicht benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Stylesheet erstellt haben und dieses in SuperX eingebunden haben gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie gehen in die Maske &amp;amp;quot;Administration -&amp;amp;gt; Tabelle suchen&amp;amp;quot;, geben dort bei Stichwort &amp;amp;quot;stylesheet_field&amp;amp;quot; ein und schicken die Maske ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_maske.png]]&lt;br /&gt;
&lt;br /&gt;
In der folgenden Ergebnistabelle klicken Sie bei &amp;amp;quot;stylesheet_field_list&amp;amp;quot; auf den &amp;amp;quot;Bearbeiten&amp;amp;quot; Button.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_tabelle.png]]&lt;br /&gt;
&lt;br /&gt;
In dem nun geöffneten Fenster sehen Sie alle Zuordnungen, welche bereits eingetragen sind. Hier wird aber lediglich das Stylesheet ausgegeben und nicht die Tabellen und Federzugehörigkeit. Dies hätte wegen der vielen Auswahlmöglichkeiten jeden Browser gekillt. Um Einzelheiten zu erfahren müssen Sie daher auf den Details-Button klicken. Auch wenn Sie eine neue Zuordnung erstellen möchten klicken Sie zunächst auf den Detail-Button eines beliebigen Stylesheets.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_list.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt können Sie die Zugehörigkeit des Stylesheets zu Tabelle und Feld ändern oder eine neue Zuordnung erstellen. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn ein Tabellenname ausgewählt und abgespeichert wurde, können nur Spalten dieser Tabelle ausgewählt werden. Wenn Sie die Tabelle ändern wollen, müssten Sie zunächst die Tabelle ändern, abspeichern und dieses Formular erneut aufrufen. Erst dann würden die Spalten der ausgewählten Tabelle in der Listbox Fieldname erscheinen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_edit.png]]&lt;br /&gt;
&lt;br /&gt;
Um eine neue Verknüpfung zu erstellen klicken Sie zuerst auf den + Button oben rechts. Danach erscheint das gleiche Formular nur ohne ausgefüllte Felder. Hier können Sie das Stylesheet und den Tabellennamen auswählen und die dazu passende Spalte der Tabelle die Sie zuvor ausgewählt haben. Achten Sie darauf die Tabelle zu nehmen, welche im Datenblatt verwendet wird. Danach nur noch über das Diskettensymbol oben rechts abspeichern und eine Spalten-Stylesheet-Verknüpfung ist fertig. Diesen Schritt wiederholen Sie für jede Spalte, die Sie in dem JasperReport Bericht benötigen.&lt;br /&gt;
&lt;br /&gt;
Ab Kernmodul 4.2 bzw. HISinOne 5.1 geht es noch komfortabler, Sie können hier auf einzelne Stylesheets filtern : Administration → Masken → Stylesheet suchen &lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst den Bericht aus, und klicken Sie dann rechts beim Bearbeiten-Button in der Spalte Felder-Vorbelegungen bearbeiten: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field.png]]&lt;br /&gt;
&lt;br /&gt;
In dem Bearbeitungsformular können Sie Datensätze erzeuge, löschen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kurzanleitung-direktaufruf-von-jasper-berichten-von-der-maske&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-246&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-247&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kurzanleitung Direktaufruf von Jasper-Berichten von der Maske ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Abschicken der Maske kann man auch direkt auf den entsprechenden Jasper-Bericht umgeleitet werden. Es muss dazu in der Maske ein Feld geben mit dem Namen&lt;br /&gt;
&lt;br /&gt;
tablestylesheet&lt;br /&gt;
&lt;br /&gt;
und der relation &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-248&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;amp;gt; select distinct filename,X.caption from sx_stylesheetsX,&amp;lt;br /&amp;gt;&lt;br /&gt;
sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=23880&lt;br /&gt;
&lt;br /&gt;
und zum Beispiel für Default der Maske 23880&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;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=23880 and S.ord=2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige des Feldes tablestylesheet im Browser wird eine Berschriftung caption hinterlegt, damit auf der Maske &amp;amp;quot;Bericht&amp;amp;quot; erscheint. Im neuen Kern-Modul passiert dies automatisch.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen manuellen Eintrag in die Tabelle &#039;&#039;sx_captions&#039;&#039; einzufügen (siehe Maske Administration -&amp;amp;gt; Maske -&amp;amp;gt; Beschriftung suchen).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| tid&lt;br /&gt;
| table_name&lt;br /&gt;
| field_name&lt;br /&gt;
| locale&lt;br /&gt;
| contents_short&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;&amp;amp;lt;wird automat. vergeben&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
| felderinfo&lt;br /&gt;
| tablestylesheet&lt;br /&gt;
| de&lt;br /&gt;
| Bericht&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Außerdem muss man die Maske um ein Feld Ausgabeformat ergänzen, das die Art=1 hat und folgende relation:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span id=&amp;quot;anchor-249&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and nature::smallint&amp;amp;lt;100 order by nature::smallint&lt;br /&gt;
&lt;br /&gt;
Beispiel für Default Excel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-250&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;amp;gt; select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and description=&#039;Excel&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Achtung: Hier kommen erst Ergebnisse, wenn Sie das Kernmodul 4.1 / HISinOne 3.0 oder höher installieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;spezielle-variablen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-251&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Spezielle Variablen ==&lt;br /&gt;
&lt;br /&gt;
Im Berichtsdesign können neben den Feldern der Ergebnistabelle auch z.B. der Berichtsname, Erleuterung, user und standdatum benutzt werden. Zu finden sind diese im &amp;amp;quot;Report Inspector&amp;amp;quot; unter Fields. Um auch Hochschulspezifische Informationen wie Hochschulname oder Hochschul-Webadresse in einen Bericht importieren zu können wurden unter anderem die sx_captions Variablen &amp;amp;quot;REPORT_HEADING_INSTITUTION&amp;amp;quot; und &amp;amp;quot;REPORT_HEADING_URL&amp;amp;quot; integriert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_sx_captions_markiert.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese können genau wie die anderen Fields in den Bericht per Drag&amp;amp;amp;Drop gezogen werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;makroberichte-als-datenquelle-für-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-252&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Makroberichte als Datenquelle für JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Sie können als Datenquelle für JR nicht nur einzelne Masken nehmen, sondern auch die Ausgabe von Makro-Masken. Dadurch können die verschiedenartigsten Informationen aus den normalen Masken für übergreifende Berichte genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt, wie im KLR-Bericht &amp;amp;quot;Berichtsblatt: Kennzahlen aus der Kostenrechnung&amp;amp;quot; Teile verwendet werden, um einen eigenen JR zu erzeugen, der wiederum Elemente des Makroberichts als Unterbericht nutzt. &lt;br /&gt;
&lt;br /&gt;
Zunächst rufen Sie den Makrobericht auf:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_html.png]]&lt;br /&gt;
&lt;br /&gt;
Das Bild zeigt die ersten drei Elemente des Makros, sie werden mit einer Ordnungsnummer durchnummeriert.&lt;br /&gt;
&lt;br /&gt;
Wir laden dazu die XML-Datenquelle herunter, die XML-Datenquelle binden wir wie [[#3.1.2.Datenquelle erzeugen|outline|gewohnt]] in JasperReports ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_datenquelle.png]]&lt;br /&gt;
&lt;br /&gt;
Dann klicken wir im Browser über den Tabellen den Button rechts von &amp;amp;quot;Bericht entwerfen&amp;amp;quot; → Leerer Bericht. Die JRXML-Datei speichern wir wie [[#3.1.3.Template erzeugen|outline|gewohnt]].&lt;br /&gt;
&lt;br /&gt;
Im Designer sehen wir nun bei den Feldern eine erweiterte Liste:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_jrxml.png]]&lt;br /&gt;
&lt;br /&gt;
Wir sehen also, daß die Ergebnisspalten mit einem Präfix für die Tabellennummer versehen sind, z.B. &amp;amp;quot;tab_0&amp;amp;quot;. Dadurch können wir die Tabellen und somit auch die jew. Spalten eindeutig identifizieren. Dies ist gleichzeitig der Hauptbericht. Das Detail-Band löschen wir (ist nicht nutzbar), stattdessen aktivieren wir ein Summary Band. &lt;br /&gt;
&lt;br /&gt;
Dann erzeugen wir den [[#2.5.Unterberichte |outline|Unterbericht]] für Studierenden-VZÄ. Dazu speichern wir die obige jrxml-Datei z.B. mit dem Namen makro_beispiel_ub_stud.jrxml und entfernen das Titel-Band und Seitenfuß-Band. Dann fügen wir im Designer einen Parameter &amp;amp;quot;ordnr&amp;amp;quot; hinzu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_param.png]]&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht bekommt dann in der Report Query folgende Änderung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_report_query.png]]&lt;br /&gt;
&lt;br /&gt;
Die Ordnungsnummer wird vom Hauptbericht übergeben und dient dazu, in der XML-Datenquelle auf die einzelne Tabelle zu filtern.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich geben wir noch einen weiteren Filter ein, damit die Summenzeilen aus der Originaltabelle nicht in die Kreuztabelle aufgenommen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_filter.png]]&lt;br /&gt;
&lt;br /&gt;
Damit der Unterbericht auch &amp;amp;quot;stand-alone&amp;amp;quot; ausführbar ist, können Sie dem Parameter &amp;amp;quot;ordnr&amp;amp;quot; auch einen Standardwert zuweisen, hier z.B. &amp;amp;quot;2&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_ordnr_default.png]]&lt;br /&gt;
&lt;br /&gt;
Nun können wir die [[#2.5.Unterberichte |outline|Kreuztabelle]] mit dem Assistenten erzeugen. Für unser Beispiel enthält die Kreuztabelle Studierenden-VZÄ nach Studiengang und Fachkennzeichen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_crosstab.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir speichern den Unterbericht und binden ihn in den Hauptbericht im Summary Band ein. Dabei vergeben wir wie gewohnt die Parameter XML_LOCALE und XML_NUMBER_PATTERN. Außerdem erzeugen wir den Parameter &amp;amp;quot;ordnr&amp;amp;quot;, und weisen diesem den Wert 2 zu, weil die Studierenden-Tabelle die Ordnungsnummer 2 hat (s.o.):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hauptbericht_ub_params.png]]&lt;br /&gt;
&lt;br /&gt;
Damit ist die Konfiguration beendet, der Bericht sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hb_erg.png]]&lt;br /&gt;
&lt;br /&gt;
Weitere Unterberichte lassen sich analog hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis zum Einbinden im Servlet: Unterberichte arbeiten nur mit der Datenquelle XML, daher müssen Sie die Datei des Hauptberichts mit dem Suffix &amp;amp;quot;_xmlsource&amp;amp;quot; versehen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kompatibilität-von-ireport-mit-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-253&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kompatibilität von iReport mit JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit iReport Berichte erzeugen, sollte wie gesagt die iReport-Versionsnr. mit der JasperReports-Version übereinstimmen, die der jew. Server nutzt. In Edustore ist dies derzeit die Version 5.1.0. Wenn die Versionsnummern nicht übereinstimmen, dürfen Sie keinesfalls die *.jasper-Dateien von dem lokalen Arbeitsplatz zum Tomcat Server kopieren.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus kann es auch weitere Abhängigkeiten geben, iReport bringt ein paar mehr Bibliotheken mit, als JasperReports. Wenn Sie dann eine jrxml-Datei auf den Server kopieren, könnte es eine Fehlermeldung geben in dem Stil&lt;br /&gt;
&lt;br /&gt;
java.lang.NoSuchMethodError:...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Das Vorgehen ist hier wie folgt:&lt;br /&gt;
&lt;br /&gt;
* Prüfen Sie zunächst, ob Sie die jeweilige Bibliothek wirklich brauchen. &lt;br /&gt;
* Wenn ja, dann ermitteln Sie aus dem Namen der fehlenden Klasse den Namen der *.jar-Datei. Meist reicht es, wenn Sie den Klassennamen in einer Suchmaschine eingeben, oder in einer speziellen Java-Suchmaschine wie http://www.jarfinder.com/&lt;br /&gt;
* Wenn Sie die jar-Datei identifiziert haben, können Sie diese von iReport-xxx/ireport/modules/ext/ in das webapps/superx/WEB-INF/lib Verzeichns kopieren. &lt;br /&gt;
* Danach müssen Sie Tomcat neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: gehen Sie beim Kopieren in den WEB-INF/lib Ordner möglichst &#039;&#039;&#039;sparsam&#039;&#039;&#039; um: manchmal gibt es zwischen einzelnen Bibliotheken unerwünschte und unvorhersehbare Querabhängigkeiten, z.B. nutzt eine iReport-Bibliothek xy.jar eine andere Bibliothek vz.jar, welche bereits im Tomcat Server vorhanden ist – aber mit einer anderen Versionsnummer. In diesem Falle kann es zu seltsamen Phänomenen kommen, die sehr schwer zu diagnostizieren sind, bis hin zu einer Instabilität des Servers. Man muss solche Kopiermaßnahmen auf jeden Fall gründlich testen!&amp;lt;br /&amp;gt;&lt;br /&gt;
Unter uns: Wir nennen Probleme, die dadurch entstehen können, die &amp;amp;quot;jar-Hölle&amp;amp;quot;...&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden sammeln wir ein paar Beispiele für gefahrlose Kopieraktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-grafiken-in-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-254&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Grafiken in JasperReports ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-255&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bitte vermeiden Sie, iReport-spezifische &amp;amp;quot;Themes&amp;amp;quot; zu benutzen (z.B. &amp;amp;quot;aegean&amp;amp;quot;), denn dafür würden weitere Bibliotheken benötigt. Wenn Sie z.B. die folgende Fehlermeldung bekommen, wurde ein Theme benutzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_theme_error.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann sollten Sie die Einstellung für das Objekt (hier das Theme der Grafik) wieder auf default setzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-bibliotheken-von-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-256&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Bibliotheken von iReport ====&lt;br /&gt;
&lt;br /&gt;
Bei der Meldung&lt;br /&gt;
&lt;br /&gt;
java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter&lt;br /&gt;
&lt;br /&gt;
sollten Sie die Bibliotheken &lt;br /&gt;
&lt;br /&gt;
iReport-xxx/ireport/modules/ext/asm.jar &lt;br /&gt;
&lt;br /&gt;
und zur Sicherheit auch&lt;br /&gt;
&lt;br /&gt;
asm-attrs.jar&lt;br /&gt;
&lt;br /&gt;
in den WEB-INF/lib-Ordner kopieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;troubleshooting&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-257&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;report-problem-class-not-set-for-bucket-variable&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-258&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Report Problem: Class not set for bucket: &amp;amp;lt;&amp;amp;lt;Variable&amp;amp;gt;&amp;amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Das Problem tritt in iReport 4.1.1 u.a. bei Kreuztabellen auf. Bei diesem Fehler fehlt in der jrxml-datei im Element &amp;amp;lt;bucketExpression&amp;amp;gt; Z.B.: class=&amp;amp;quot;java.lang.String&amp;amp;quot;. Diese einfach im Editor ergänzen und es funktioniert. Beispiel:&lt;br /&gt;
&lt;br /&gt;
Aus :&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;bucketExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;bucketExpression class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-jasper-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-259&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die jasper Datei ==&lt;br /&gt;
&lt;br /&gt;
Die jasper Datei ist die kompilierte jrxml. Wenn ein Bericht übertragen werden soll, z.B. von dem Entwickler auf den Server oder von dem Development System auch das Produktivsystem immer nur die jrxml Datei übertragen, da es bei Versionsunterschieden in JasperReport zu Fehlern kommt, wenn die Kompilierte Version zur Verfügung steht. Sobald der Bericht ausgeführt wird, erstellt (kompilliert) JasperReports automatisch die jasper Datei. &lt;br /&gt;
&lt;br /&gt;
Wenn die jasper Datei zur verfügung steht, wird auch nur noch diese von JasperReports verwendet und nicht mehr neu kompiliert. Falls Sie also einen Bericht weiter entwickelt haben oder eine neue Version einspielen, löschen Sie direkt die jasper Datei. Ansonsten werden die Änderungen nicht wirksam.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;im-excel-export-fehlen-felder&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-260&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im Excel Export fehlen Felder ==&lt;br /&gt;
&lt;br /&gt;
In Excel werden überlappende Elemente nicht angezeigt. Wenn also 2 Elemente übereinander liegen wird in Excel nur das oberste (welches im Vordergrund liegt) angezeigt. Hier ist besonders drauf zu achten, dass visuell 1px Abstand zwischen den Elementen Platz ist. Wenn von beiden Elementen jeweils eine Linie zu sehen ist, ist es korrekt. Wenn nicht, zählt das schon als Überlappung. Dafür im iReport Designer am besten ganz nah heran zoomen um diesen Abstand zu prüfen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel. Die beiden oberen Elemente überlappen, die unteren nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_excel.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hinweis-für-hisinone-7.0-kompatibilität&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-261&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hinweis für HisInOne 7.0 Kompatibilität ==&lt;br /&gt;
&lt;br /&gt;
Jrxml-Dateien, die unter iReport 4.1.3 entwickelt wurden und in HisInOne 7.1 funktionieren, können in 7.0. zur Fehlermeldung führen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
java.lang.NoClassDefFoundError: net/sf/jasperreports/compilers/GroovyEvaluator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jasperreports5.1.0 (hisinone 7.0) ist die Klasse GroovyEvaluator nicht enthalten, für 7.1 ist die jasperreports-6.1.0.jar enthalten, die enthält den GroovyEvaluator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Workaround:&lt;br /&gt;
&lt;br /&gt;
language=&amp;amp;quot;groovy&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ändern in &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
language=&amp;amp;quot;java&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;html-export-keinen-whitespace&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-262&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;HTML Export keinen whitespace ==&lt;br /&gt;
&lt;br /&gt;
Normal macht JR bei HTML-Exporten für den „Seitenumbruch“ eine Reihe von Leerzeilen. Um dies zu vermeiden, setzen Sie die Property IgnorePagination=true:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;jasperReport xmlns=&amp;amp;quot;http://jasperreports.sourceforge.net/jasperreports&amp;amp;quot; xmlns:xsi=&amp;amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;amp;quot; xsi:schemaLocation=&amp;amp;quot;http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd&amp;amp;quot; name=&amp;amp;quot;Kaufm. Quartalsbericht&amp;amp;quot; language=&amp;amp;quot;groovy&amp;amp;quot; pageWidth=&amp;amp;quot;2925&amp;amp;quot; pageHeight=&amp;amp;quot;565&amp;amp;quot; orientation=&amp;amp;quot;Landscape&amp;amp;quot; columnWidth=&amp;amp;quot;2925&amp;amp;quot; leftMargin=&amp;amp;quot;0&amp;amp;quot; rightMargin=&amp;amp;quot;0&amp;amp;quot; topMargin=&amp;amp;quot;0&amp;amp;quot; bottomMargin=&amp;amp;quot;0&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
isIgnorePagination=&amp;amp;quot;true&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;uuids&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-263&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;UUID&#039;s ==&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio wird an jedes Element eine lange UUID angehängt, in aktuellen Versionen von SuperX/ Edustore macht das keine Probleme. In älteren Versionen bzw. in iReport 4.* schon. Damit der JasperReport abwärtskompatibel ist, muss diese gelöscht werden. Bei großen Berichten taucht diese aber unter Umständen mehrere hundert Mal auf. Hier kann in JasperSoft Studio in dem &amp;amp;quot;Source&amp;amp;quot;-Reiter des Berichtsdesigners nach folgender Regular Expression gesucht werden und diese mit einem Leerzeichen ersetzt werden:&lt;br /&gt;
&lt;br /&gt;
uuid=&amp;amp;quot;[0-9a-z-]{36}&amp;amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-dokus&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-264&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Dokus =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ahammad, S. (2010). iReport 3.7.Learn how to use iReport to create, format, and export reports. Birmingham: Packt&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Haneke, U. et al. (2010). Open Source Business Intelligence. Möglichkeiten, Chancen und Risiken quelloffener BI-Lösungen. Wien: Hanser&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Toffoli, G. (2007). The definitive guide to iReport. Berkeley, CA: Apress&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch mehr Infos (nur Englisch) erhält man unter:&amp;lt;br /&amp;gt;&lt;br /&gt;
http://jasperforge.org/plugins/project/project_home.php?projectname=ireport&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;und natürlich unsere Website:&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;http://www.superx-projekt.de/doku/entwicklung/iReport-Handbuch/main.htm&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;span id=&amp;quot;anchor-265&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16340</id>
		<title>Berichtsdesign mit JasperReports</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16340"/>
		<updated>2026-07-06T07:51:38Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Unterschiede iReport und JasperSoft Studio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Berichtsdesign mit JasperReports &lt;br /&gt;
&lt;br /&gt;
von Daniel Quathamer &amp;amp;amp; Andre Knieschewski&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-installieren-und-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports installieren und konfigurieren =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;voraussetzungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* Jasperreports ist eine Laufzeitumgebung fürs Reporting, die in java-basierte Reporting Software integriert werden kann. Der Download ist hier: https://sourceforge.net/projects/jasperreports/. Dieses Paket enthält kommandozeilenbasierte Demos und die benötigten Libraries. Die Demos sind sehr nützlich und als Referenz gut nutzbar. &lt;br /&gt;
* Die Entwicklungsumgebung für JasperReports heißt &amp;amp;quot;Jaspersoft Studio&amp;amp;quot; und kann bezogen werden von https://community.jaspersoft.com/project/jaspersoft-studio. Es enthält auch obige Laufzeitumgebung.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da es ein Eclipse Plugin ist, können Sie es auch direkt in Ihrem Eclipse installieren (Menü Help → Eclipse Marketplace → Suchwort &amp;amp;quot;Jaspersoft&amp;amp;quot;. Dort können Sie aber nur die jeweils aktuelle Version installieren.&lt;br /&gt;
&lt;br /&gt;
Da der Download bei Jaspersoft nun nur für registrierte Nutzer zur Verfügung steht, hier noch ein Link für den Download: https://sourceforge.net/projects/jasperstudio/files/&lt;br /&gt;
&lt;br /&gt;
* Für altere Projekte wurde auch iReport verwendet. Da es ein paar Bugs in den verschiedenen Versionen gibt, empfehlen wir zu der Erstellung von JasperReport Berichten die iReport Version 4.1.3, auch wenn in Edustore die Version 5.1.0 verwendet wird. Download der passenden Version von iReport von http://sourceforge.net/projects/ireport (dort auf &amp;amp;quot;files&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;iReport&amp;amp;quot; klicken, dann erhalten Sie Links auf die jeweilige Version. &lt;br /&gt;
* Für Demos &amp;amp;amp; Deployment auch Apache ANT http://ant.apache.org/&lt;br /&gt;
* Java 1.8 JRE oder höher&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports und Jaspersoft Studio  ==&lt;br /&gt;
&lt;br /&gt;
JasperReports ist das Programm, das fertige Berichte erzeugen kann. Es besitzt (außer einer Vorschauansicht der Berichte) keine graphische Oberfläche. Für das Entwerfen von Berichten ist &#039;&#039;&#039;&#039;&#039;&#039;Jaspersoft Studio&#039;&#039;&#039;&#039;&#039;&#039; geeignet. Um es noch ein wenig zu veranschaulichen könnte man sagen, dass wenn ein JasperReport das Worddokument wäre, dann wäre Jaspersoft Studio z.B. Microsoft Word.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Download benötigen Sie Java 1.8 oder höher zum Ausführen. Nach dem Entpacken können Sie die Anwendung direkt starten. &lt;br /&gt;
&lt;br /&gt;
Bei JasperSoft Studio wird als Grundlage Eclipse verwendet. Wenn man JasperSoft Studio herunter lädt, erhält man automatisch Eclipse mit dabei. JasperSoft Studio kann [http://community.jaspersoft.com/project/jaspersoft-studio hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn lieber ein bereits vorhandenes Eclipse verwendet werden soll und Jaspersoft Studio dort als Plugin installiert werden soll, gibt es 2 Wege:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Unter Help → Eclipse Marketplace kann nach „Jaspersoft“ gesucht werden und das Plugin installiert werden&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:JasperReports-Handbuch_jaspersoftstudio_plugin_install1.png]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Man kann auch über die Marketplace Webseite von Eclipse das Plugin Jaspersoft Studio suchen und das Icon per Drag&amp;amp;amp;Drop nach Eclipse ziehen. Dann wird das Plugin automatisch installiert. [https://marketplace.eclipse.org/content/jaspersoft-studio Hier] die Webseite. (Bei mir hat das Drag&amp;amp;amp;Drop leider nicht funktioniert. Das kann an Linux liegen. Unter Windows wird es sicherlich funktionieren.)&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-4&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Unter Windows - &amp;amp;gt; Preferences → Jaspersoft Studio können Sie verschiedene Einstellungen vornehmen. Wichtig in der Menüpunkt &amp;amp;quot;Compatibility&amp;amp;quot;: wählen Sie dort die JR-Version, die auch Ihre Ziel-Platform enthält. &lt;br /&gt;
&lt;br /&gt;
Im Dateimanager von JasperSoft Studio gibt es Eclipse-typisch ein &amp;amp;quot;virtuelles&amp;amp;quot; Dateisystem mit dem Standardnamen &amp;amp;quot;MyReports&amp;amp;quot;, zumindest beim Speichern von Dateien. Dieses Dateisystem liegt physisch im Ordner &amp;amp;lt;&amp;amp;lt;Home-Verzeichnis&amp;amp;gt;&amp;amp;gt;/JaspersoftWorkspace/MyReports.&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen von Dateien können Sie direkt mit &amp;amp;quot;Open File&amp;amp;quot; aufs normale Dateisystem zugreifen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-5&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht des Entwurfsbereichs, in rot finden Sie Erläuterungen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_designer.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Die Unterfenster können Sie Eclipse-typisch beliebig anordnen. Oben ein Beispiel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-sortierung-und-filterung-der-datenquelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-6&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Sortierung und Filterung der Datenquelle =====&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenquelle definiert ist, kann /sollte der Bericht die Sortierung und Filterung der Daten festlegen. Dies ist etwas versteckt im Designer mittig oberhalb des Entwurfsbereichs:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie die Reiter &amp;amp;quot;Sorting&amp;amp;quot; und &amp;amp;quot;Filter Expression&amp;amp;quot;. Dort pflegen Sie beides.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsdesign-und-vorschau&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-7&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsdesign und Vorschau =====&lt;br /&gt;
&lt;br /&gt;
Im Designmodus können Sie den Bericht entwerfen, oder den XML-Quellcode. Beim Klick auf den Reiter &amp;amp;quot;Preview&amp;amp;quot; bekommen Sie eine Vorschau des Berichts:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_preview.png]]&lt;br /&gt;
&lt;br /&gt;
Oberhalb der Vorschau können Sie die Datenquelle (d.h. den &amp;amp;quot;Data Adapter&amp;amp;quot; angeben, und rechts daneben die Anwendung, die den Bericht zur Anzeige bringt (&amp;amp;quot;Viewer&amp;amp;quot;). Voreingestellt ist hier der Java-interne Viewer von JasperReports, Sie können den aber umstellen z.B: auf PDF oder Excel.&lt;br /&gt;
&lt;br /&gt;
Mit Klick auf das grüne Dreieck führen Sie den Bericht aus und erhalten die Vorschau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Es ist aufgefallen, dass beispielsweise Fettdruck in der PDF-Vorschau nicht angezeigt wird. Im Java-Preview und aus der Weboberfläche geladen, ist der Fettdruck ersichtlich. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsstruktur&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-8&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsstruktur =====&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Outline View&amp;amp;quot; sehen Sie die Struktur des Berichts, d.h. aktive &amp;amp;quot;Bänder&amp;amp;quot; und Metadaten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_outline.png]]&lt;br /&gt;
&lt;br /&gt;
Die Elemente unter &amp;amp;quot;Fields&amp;amp;quot; werden bei Nutzung in [[#3.1.3.Template erzeugen|outline|Edustore]] automatisch gefüllt. Alles weitere definieren Sie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-elemente-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-9&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Elemente bearbeiten =====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie im Design Modus ein Element markieren, wird es automatisch im Outline und in dem Reiter &amp;amp;quot;Properties&amp;amp;quot; selektiert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_properties.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Outline zeigt es lediglich, wo es sich befindet, und im Reiter &amp;amp;quot;Properties&amp;amp;quot; können Sie Formatierung, Anzeige etc. bearbeiten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-10&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport ===&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_welcome.png]] Das Paket enthält bereits die Laufzeitumgebung JasperReports, diese muss also nicht separat installiert werden. Nichtsdestotrotz empfiehlt sich der Download, denn in dem JasperReports-Paket befinden sich viele lehrreiche Demo-Berichte.&lt;br /&gt;
&lt;br /&gt;
Die Windows-Version beinhaltet auch einen Installer. Um diesen zu nutzen sind Admin-Rechte erforderlich. &lt;br /&gt;
&lt;br /&gt;
Alternativ bzw. unter Linux ist iReport ohne Installation direkt nach dem Entpacken lauffähig. Wenn Sie auch Scriptlets erstellen wollen, müssen Sie nicht nur eine Java-Laufzeitumgebung (JRE) installieren, sondern ein JDK, und die Datei $JAVA_HOME/lib/tools.jar nach iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/ireport/libs kopieren. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start unter Windows: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport.exe&lt;br /&gt;
&lt;br /&gt;
Start unter Linux: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-11&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Als erstes sollten Sie die Anwendungen einstellen, mit denen iReport generierte Berichte anzeigen soll:&lt;br /&gt;
&lt;br /&gt;
Im Menü Extras-&amp;amp;gt; Optionen wählen Sie im Reiter &amp;amp;quot;iReport&amp;amp;quot;-&amp;amp;quot;Viewers&amp;amp;quot; die entsprechenden Anwendungen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_viewers.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-12&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Der Entwurfsbereich bzw. &amp;amp;quot;Designer&amp;amp;quot; hat einen recht komplexen Aufbau. Sie können die Fenster und Seitenbereiche zwar recht flexibel anpassen, aber hier ist die Auslieferung:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_ueberblick.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Bereiche sind hervorgehoben:&lt;br /&gt;
&lt;br /&gt;
* Berichtsstruktur: Welche Seitenbereiche gibt es?&lt;br /&gt;
* Datenquelle: Welche Datenbank wird genutzt?&lt;br /&gt;
* Abfrage: Was ist die konkrete Abfrage für den Bericht?&lt;br /&gt;
* Elemente: Welche Elemente kann ich einfügen, und welche Eigenschaften haben sie?&lt;br /&gt;
* Vorschau: wie sieht der Bericht &amp;amp;quot;gedruckt&amp;amp;quot; aus?&lt;br /&gt;
* Fehlerausgabe: Jeder Bericht wird &amp;amp;quot;kompiliert&amp;amp;quot;, dazu gibt es eine Fehlerausgabe&lt;br /&gt;
&lt;br /&gt;
Im Reiter &amp;amp;quot;Preview&amp;amp;quot; kann man sich eine Vorschau des Ausdrucks anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterschiede-ireport-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-13&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterschiede iReport und JasperSoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Mit der Version 5.5 wurde die Entwicklung von iReport eingestellt, die Firma JasperSoft empfiehlt seit dem die Benutzung von JasperSoft Studio. Nach unseren Erfahrungen ist die Arbeit mit iReport 4.1.3 (die letzte stabile Version) hier und da &amp;amp;quot;leichtgewichtiger&amp;amp;quot; und einfacher, ganz zu schweigen vom Overhead, den JasperSoft Studio mit Eclipse einbringt. Besonders nervig empfanden wir es, dass JasperSoft Studio anders als iReport verschiedene Objekteigenschaften in Reitern organisiert, und bei jedem Wechsel der Markierung eines Berichtselements muss man in JasperSoft Studio wieder zum richtigen Reiter wechseln. &lt;br /&gt;
&lt;br /&gt;
Andererseits ist JasperSoft Studio kompatibel mit neueren JR-Möglichkeiten. Insbesondere bei dem Umgang mit Diagrammen gibt es in JasperSoft Studio erheblich mehr Möglichkeiten, z.B. Chart Customization. Außerdem ist es vorteilhaft, wenn Sie ohnehin Eclipse nutzen. Sie sollten für Ihre Arbeit also abwägen ob Sie die neueren Möglichkeiten im jeweiligen Bericht überhaupt brauchen, ggf. sind Sie mit iReport besser bedient. Aber das ist Geschmackssache.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Beachten Sie aber bitte: sobald Sie einen Bericht mit JasperSoft bearbeitet und gespeichert haben, ist er mit iReport 4.1.3 nicht mehr bearbeitbar, bzw. nur wenn Sie die [[Berichtsdesign_mit_JasperReports#UUID&#039;s|UUIDs]] entfernt haben.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beide Produkte befinden sich noch im Einsatz, daher hier nur ein paar Kapitel zur Handhabung der jew. Software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;handhabung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-14&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Handhabung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;preview&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-15&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Preview =====&lt;br /&gt;
&lt;br /&gt;
Bei iReport waren die Buttons für Designer und Preview immer oben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
Bei Jaspersoft Studio liegen die Buttons unten:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;palette&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-16&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Palette =====&lt;br /&gt;
&lt;br /&gt;
Die Palette ist bei iReport und Jaspersoft Studio an gleicher Position zu finden.&lt;br /&gt;
&lt;br /&gt;
Ireport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette1.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;objekt-eigenschaften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-17&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Objekt-Eigenschaften =====&lt;br /&gt;
&lt;br /&gt;
Die Objekt-Eigenschaften liegen auch an der gleichen Stelle, jedoch sind bei Jaspersoft Studio die Gruppierungen der Eigenschaften in Karteireiter unterteilt. Bei iReport ist es einfach eine lange Liste mit Unterteilungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iReport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-als-kommandozeilen-tool&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-18&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports als Kommandozeilen-Tool ==&lt;br /&gt;
&lt;br /&gt;
In der JasperReports-Distribution befindet sich ein ANT-Script, das mehrere Berichte erzeugen kann.&lt;br /&gt;
&lt;br /&gt;
 cd demo/samples&lt;br /&gt;
&lt;br /&gt;
Beispiel xmldatasource:&lt;br /&gt;
&lt;br /&gt;
cd xmldatasource&lt;br /&gt;
&lt;br /&gt;
 ant -p&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe ist:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ant_xmldatasource.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden, je nach Auswahl pdf-, Excel- oder andere Berichte erzeugt. Mit dem Target &amp;amp;quot;test&amp;amp;quot; werden alle Targets durchlaufen.&lt;br /&gt;
&lt;br /&gt;
ant test&lt;br /&gt;
&lt;br /&gt;
Achtung: manche Demos brauchen eine laufende HSQLDB (siehe demo/hsqldb).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-19&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquellen =&lt;br /&gt;
&lt;br /&gt;
Allgemein unterstützt JasperReports verschiedene Datenquellen, z.B. relationale Datenbanken, Excel, CSV oder XML. Auch Webservices sind möglich. Speziell für SuperX/ HISinOne-BI gibt es spezielle Datenquellen-Vorgaben, damit Sie die Daten auch im Server-Betrieb nutzen können. Hier also nur die allgemeinen, also SupeRX/BI-unabhängigen Quellen, wenn Sie JasperReports am lokalen Arbeitsplatz nutzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-datenbank&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-20&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Eine relationale Datenbank ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Oben links befindet sich der Dialog zum Erzeugen (1) des Data Adapter, und dann darunter die Zeile &amp;amp;quot;Database Jdbc Connection&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_data_adapter1.png]]&lt;br /&gt;
&lt;br /&gt;
Dort geben Sie dann die jdbc-spezifischen Daten an (Datenbanktyp, Name etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: die Nutzung setzt eine direkte Datenbankverbindung zum DB-Server voraus, an vielen Unternehmenanwendungen wird dies nicht mehr erlaubt. Ggf. fragen Sie bei Ihren Systemadministrator/innen nach. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-excel-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-21&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Excel-Datei ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-22&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Eine Excel Datei ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Excel Datei hat vier Spalten und eine führende Zeile mit den Spaltenüberschriften. Achten Sie darauf, dass die Datentypen der Spalten in Excel dem Inhalt entsprechen. Hier die Spalten:&lt;br /&gt;
&lt;br /&gt;
* Frage Nr. &lt;br /&gt;
* Text &lt;br /&gt;
* Mit_ohne_schule &lt;br /&gt;
* Summe&lt;br /&gt;
&lt;br /&gt;
Aus der Excel-Datei erzeugen Sie einen &amp;amp;quot;Data Adapter&amp;amp;quot;. Der Data Adapter vom Typ &amp;amp;quot;Excel File&amp;amp;quot; hat ein paar Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können Sie in einem Berichtsdesign die Datenquelle definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie wählen dort oben links zunächst den &amp;amp;quot;Data Adapter&amp;amp;quot; aus (1), und klicken dann rechts auf &amp;amp;quot;Read Fields&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_3.png]]&lt;br /&gt;
&lt;br /&gt;
Aus der Datenquelle werden dann die Datenfelder (3) und Inhalte (Reiter &amp;amp;quot;Data preview&amp;amp;quot;) automatisch übernommen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-23&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsdesign =&lt;br /&gt;
&lt;br /&gt;
Das Erstellen eines Berichtes erleichtert JasperReports wesentlich. Dennoch wird man sich damit etwas beschäftigen müssen, um ein vernünftiges Ergebnis zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Zuerst muss man den Bericht öffnen. Das geschieht über „Datei“ → „Open“ → Bericht auswählen → auf „Öffnen“ klicken. Nun noch oben links die für diesen Bericht erstellte Datenquelle auswählen und man kann loslegen.&lt;br /&gt;
&lt;br /&gt;
JasperReports bezeichnet die Ausgabebereiche als Bänder. Ein Band ähnelt einer Zeile. Es reicht über die komplette Seitenbreite. Die Höhe kann dabei selbst bestimmt werden und wird dem Informationsgehalt angepasst. Das Band „Detail 1“ ist so etwas wie das Hauptband, in dem dann die Informationen zeilenweise ausgegeben werden. Es wird also eine Schleife über die Daten (Tabelle) ausgeführt und für jeden Datensatz ein mal das Detail Band ausgegeben. Die linke Spalte könnte z.B so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-iReport_Leiste_Neu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, das das Band „Detail 1“ aktiv ist und die anderen wie „Title“ noch nicht. In den Gruppen „Fields“ und „Variablen“ befinden sich die Felder (Spalten) aus der Ergebnistabelle und interessante Variablen wie Seitenzahl, die man nun einfach in das bestehende Band „Detail 1“ per „Drag and Drop“ ziehen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Feld_Name.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man z.B. in der Gruppe Fields das Feld „Name“ hat und dies in das Band „Detail 1“ zieht,befindet sich ein Platzhalter im Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie dann auf „Preview“ klicken, wird eine Vorschau des Berichts angezeigt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Designer_Preview.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden alle Namen aufgelistet, die in der Datenquelle vorhanden sind:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können das Layout der Ausgabe (Schriftart, Größe) über die Eigenschaften des Feldes variieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-24&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um wieder zurück in den Entwicklermodus zu kommen klickt man einfach wieder auf den Reiter &amp;amp;quot;Designer&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Bänder „Title“, „Page“ usw. kann man mit einem Rechtsklick und dann „Add Band“ hinzufügen und auch wieder mit einem rechtsklick und dann „Delete Band“ wieder entfernen. Diese Bänder haben bestimmte Eigenschaften. Z.B. Band „Titel“ wird nur einmal auf der ersten Seite abgebildet, Band „Page Header/Footer“ auf jeder Seite am Anfang/Ende.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-und-filtern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-25&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung und Filtern ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise verarbeitet JasperReports die Datensätze zeilenweise in der Reihenfolge, in der sie bereitgestellt werden. Sie können im Entwurfsmodus die Sortierung bzw. Filterung der Datensätze anpassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort1.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf das Icon mit der Tonne und Sie gelangen in die Einstellungen für die Datenquelle. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort2.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button Sortieren können Sie nach allen Feldern des Berichts aufsteigend bzw. absteigend sortieren.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button &amp;amp;quot;Filter expression&amp;amp;quot; können Sie eine Formel definieren, um die Gültigkeit von Datensätzen zu definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Z.B. die Expression &amp;amp;quot;.contains(&amp;amp;quot;12&amp;amp;quot;) würde auf alle Datensätze filtern, die im Feld die Zeichenkette &amp;amp;quot;12&amp;amp;quot; enthalten. Weitere Infos im Kapitel zum [[#2.9.Expression Editor|outline|Expression Editor]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;listen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-26&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Listen ==&lt;br /&gt;
&lt;br /&gt;
Listen lassen sich einfach erstellen, indem man die jeweiligen Felder ins Detail-Band zieht. Manchmal kann es vorkommen, dass Textfelder &amp;amp;quot;überlaufen&amp;amp;quot;, d.h. die rechteckige Box, die das Feld markiert, ist zu klein für den Feldinhalt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_listen_stretch.png]]&lt;br /&gt;
&lt;br /&gt;
In diesem Falle muss man das Attribut des jew. Felder (hier &amp;amp;quot;Fächergruppe&amp;amp;quot;) &amp;amp;quot;Text Field properties &amp;amp;gt; Stretch with overflow&amp;amp;quot; ankreuzen.&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn das Feld Teil einer tabellarischen Auflistung ist, muss man die anderen Element mit der Eigenschaft &amp;amp;quot;Stretch type → Relative to tallest object&amp;amp;quot; versehen, hier z.B. die Felder &amp;amp;quot;Studienfeld&amp;amp;quot; und &amp;amp;quot;Studienbereich&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 Bei vielen Zeilen ist es übersichtlicher, jede zweite Zeile farbig zu hinterlegen. Dieser Trick ist im Abschnitt Tabellengestaltung [[#2.4.3.Zeilen alternierend einfärben|outline|erläutert]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-27&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ==&lt;br /&gt;
&lt;br /&gt;
Wichtige Vorbemerkung zum Gruppieren: JasperReports setzt bei der Gruppierung voraus, dass die Datensätze der Datenquelle nach den Gruppierungsmerkmalen sortiert sind. Alle Merkmale, nach denen Sie gruppieren, sollten also entweder direkt in der Datenquelle sortiert sein, oder in JasperReports im [[#2.1.Sortierung und Filtern|outline|Berichtsentwurf]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppen-definieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-28&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppen definieren ===&lt;br /&gt;
&lt;br /&gt;
Zu den Standardbändern kann man nun auch noch selbst definierte Gruppen hinzufügen. Mit einem Rechtsklick auf den obersten Knoten → „Add Report Group“ öffnet sich ein Fenster in dem man der Gruppe einen Namen geben kann und das Objekt wählt für das die Gruppe erstellt wird.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie mehrere Gruppierungsebenen benötigen, dann sollte die Reihenfolge des Hinzufügens der Gruppen &amp;amp;quot;top-down&amp;amp;quot; verlaufen, d.h. zuerst die oberste Gruppierung hinzufügen, dann die Gruppe darunter usw.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
In dem folgenden Beispiel wird die Gruppe „Monat“ gewählt und in dem nächsten Schritt mit Header und Footer hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
Man zieht das Feld „Namen“ in das Band „Detail“ und &amp;lt;span id=&amp;quot;anchor-29&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Monat“ in das erstellte Band „Monat Group Header 1“. Aus der Palette rechts oben (wenn nicht vorhanden bekommt man es über „Fenster“ → „Palette“) zieht man einen „Static Text“ in das Band „Monat Group Header 1“ vor der Ausgabe des Monats, benennt das Feld „Monat:“ und noch eine Linie darunter. Zusammen sollte es so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man nun auf „Preview“ klickt erhält man als Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-30&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Damit eine Gruppe nicht durch einen Seitenumbruch auseinandergerissen wird, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;lt;span id=&amp;quot;anchor-31&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
Sie können auch angeben daß vor jedem Gruppierungswechsel ein Seitenumbruch ausgeführt wird:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_new_page.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit &amp;amp;quot;Start on a new page&amp;amp;quot; wird eine neue Seite bei jedem Gruppenwechsel begonnen. Speziell beim Export nach Excel kann dies in Tandem mit Arbeitsblättern nutzen, siehe [[#2.19.2.Excel-Export in einzelne Tabellenblätter|outline|unten]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppensummen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-32&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppensummen ===&lt;br /&gt;
&lt;br /&gt;
Gruppensummen kann man im Kopf oder Fuß einer Gruppe anlegen. Sie aktivieren z.B. den Gruppenfuß im Report Inspector, und ziehen dann das Feld Summe in den Entwurfsbereich. Beim &amp;amp;quot;Fallenlassen&amp;amp;quot; werden Sie gefragt, ob Sie den jew. Wert oder eine Aggregatfunktion nutzen wollen. Für Zwischensummen wählen Sie &amp;amp;quot;Sum&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_designer_add_group_foot1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich setzen Sie noch ein Label bzw. &amp;amp;quot;Static Text&amp;amp;quot;-Element rechtsbündig davor, und setzen beide Elemente fett:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_foot2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-ohne-eigenes-band&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-33&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ohne eigenes Band ===&lt;br /&gt;
&lt;br /&gt;
Bei der Gruppierung in JasperReports wird in der Regel ein horizontales Band für die Gruppierungsebene angelegt. Das führt dazu, daß man zeilenorientiert gruppiert. In manchen Fällen kann es gewünscht sein, in den Spalten einer Tabelle zu gruppieren. Hier ein Beispiel für das Ziel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten1_vorlage.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird in den Zeilen nach dem Merkmal &#039;&#039;&#039;Fach&#039;&#039;&#039; gruppiert. Zusätzlich wird noch in den Spalten nach Fachsemestern gruppiert. Um dieses Layout zu realisieren, muss man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie ein Column Header Band, und ein Group Footer-Band für die Gruppierungsebene Fach. Warum Group Footer? Weil innerhalb des Fachs nochmal gruppiert werden soll, und daher erst nach dem Gruppieren nach Fach nach Fachsemestern gruppiert wird. Ein Detail-Band gibt es hier nicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten3_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie eine neue Variable z.B. mit dem Namen &amp;amp;quot;fs1&amp;amp;quot; für erstes Fachsemester, und geben Sie der Variable folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten2_variable_1fs.png]]&lt;br /&gt;
&lt;br /&gt;
 Zur Erläuterung: Die Variable filtert die Datensätze gemäß dem Ausdruck in Variable Expression, und tut dies auf der Gruppierungsebene &amp;amp;quot;fach&amp;amp;quot;. Die Variable Expression ist eine für unsere Zwecke sehr nützliche Java-Kurzfassung einer IF-THEN-Bedingung, und meint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn der Inhalt des Feldes &amp;amp;quot;Anzahl Fachsemester&amp;amp;quot; gleich 1 ist, dann gib die Summe der jew. Studierenden aus, wenn nicht, dann gib 0 aus.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Analog kann man noch die Variable &amp;amp;quot;fsgr13&amp;amp;quot; für &amp;amp;quot;Fachsemester &amp;amp;gt; 13&amp;amp;quot; anlegen. &lt;br /&gt;
&lt;br /&gt;
Danach kann man die Variablen &amp;amp;quot;fs1&amp;amp;quot; und &amp;amp;quot;fsgr13&amp;amp;quot; in das Band &amp;amp;quot;Fach Group Footer 1&amp;amp;quot; ziehen, und noch das Feld &amp;amp;quot;Summe&amp;amp;quot; für die Gesamtsumme. Dann tragen wir im Column Header Band noch die Spaltenüberschriften ein. Insgesamt sieht Berichtsentwurf dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten4_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten5_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fertig. Man könnte nun noch weitere Fachsemester-Intervalle einfügen, oder z.B. eine Summe der Studierenden in der Regelstudienzeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-34&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nach Feldern gruppieren wollen, die es in Ihrer Datenquelle gar nicht gibt (z.B. nach Aggregationen von Mekrmalskombinationen), dann können Sie auch Variablen mit speziellen Formeln anlegen, und diese dann in die Gruppierung aufnehmen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wichtig: Wenn die Gruppierungsvariable nicht im Summary Band genutzt wird, muss der resettype der Variable auf „None“ gesetzt werden. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Abschnitt zu [[#2.5.4.Kreuztabellen mit virtuellen Dimensionen|outline|Kreuztabellen]] wird z.B. gezeigt, wie die Fächer Mathe, Physik und Biologie in einen neuen Wert &amp;amp;quot;Naturwissenschaften&amp;amp;quot; transformiert werden.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variablen-und-gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-35&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Variablen und Gruppierung ===&lt;br /&gt;
&lt;br /&gt;
Beim Anlegen von Gruppen-Bändern und beim Ziehen von Feldern in das jew. Gruppenband legt JR automatisch eine Variable an, mit der jew. Aggregationsfunktion. Diese Variable hat folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Expression: das Feld, aus dem die Variable gespeist wird&lt;br /&gt;
&lt;br /&gt;
Calculation: Die Aggregatfunktion, z.B. &amp;amp;quot;sum&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reset Type: Die Gruppierungsebene&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Variable in Textfeldern des Gruppenbandes nutzen, gibt sie jeweils den richtigen Wert an, egal ob Gruppenkopf oder Fuß.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie aber mit &amp;amp;quot;Print-when-Expressions&amp;amp;quot; im Gruppenband arbeiten und auf die Variablen zugreifen, funktionieren diese standardmäßig nur im Gruppenfuß, weil erst am Ende der Gruppe der Wert bekannt ist. In diesem Fall müssen Sie der Variable auch eine &amp;amp;quot;Initial Value Expression&amp;amp;quot; mit dem jew. Feld geben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen-auf-gruppenebene&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-36&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen auf Gruppenebene ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf der Gruppenebene Berechnungen, z.B. Mittelwerte, durchführen wollen, gibt es einige Fallstricke: &lt;br /&gt;
&lt;br /&gt;
* Die in JR eingebauten Funktionen wie &amp;amp;quot;avg&amp;amp;quot; arbeiten auf Gruppenebene nicht immer exakt.&lt;br /&gt;
* Komplexere Formeln auf Gruppenebene in Variablen abzubilden und diese dann das Quelle für Textfelder zu nehmen hat bei uns nicht geklappt. &lt;br /&gt;
&lt;br /&gt;
Hier unser Vorgehen:&lt;br /&gt;
&lt;br /&gt;
* Definieren Sie auf der Ebene der jew. Gruppe eine Variable mit der Gesamtsumme, und eine mit der Summe der zu mittelnden Werte. Diese Variablen haben als &amp;amp;quot;reset Type&amp;amp;quot; die jew. Gruppierungsebene.&lt;br /&gt;
* Im Textfeld, das Sie ausgeben, verwenden Sie dann die Berechnungsformel, z.B. einen Quotienten. Verwenden Sie für die Berechnung nicht eine neue Variable, sondern fügen Sie die Formel direkt in das Textfeld ein.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel: Wir haben eine Absolventenliste pro Studiengang und Semester, darin werden dann Mittelwerte von Abschlussnoten gebildet. Die Datenquelle hat summierte Zeilen pro Note:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_daten.png]]&lt;br /&gt;
&lt;br /&gt;
Im obigen Beispiel haben wir in der Zeile 5 eine Absolventin mit der Note 1,1. In der letzten Zeile haben wir zwei Absolventinnen mit der Note 1,2.&lt;br /&gt;
&lt;br /&gt;
Würden wir den Notenschnitt manuell berechnen, müßten wir die Notensumme (Spalte H*K) ermitteln, hier wäre der Wert 32,3. Die Summe der Absolventen in Spalte K wäre 16, d.h. der Notenschnitt wäre 32,3/16 = 2,02.&lt;br /&gt;
&lt;br /&gt;
In JasperReports wäre der Entwurf wie folgt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir haben eine Variable &amp;amp;quot;Summe_1&amp;amp;quot; auf der Ebene des Semester-Bandes, die im obigen Excel der Summe der Spalte &amp;amp;quot;Summe&amp;amp;quot; entspricht. &lt;br /&gt;
&lt;br /&gt;
Außerdem haben wir eine Variable &amp;amp;quot;Notensumme&amp;amp;quot; mit der Formel $F{Note}*$F{Summe}, auf der Ebene der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Achten Sie drauf, dass Sie als Typ &amp;amp;quot;java.lang.Double&amp;amp;quot; nehmen, damit Sie keine Rundungsfehler bekommen.&lt;br /&gt;
&lt;br /&gt;
Der Quotient wird dann im Textfeld gebildet, das den Notenschnitt auf Semesterebene enthält, und auf zwei Nachkommastellen gerundet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld selbst muss bei &amp;amp;quot;Evaluation time&amp;amp;quot; den Wert &amp;amp;quot;Group&amp;amp;quot; haben, und bei &amp;amp;quot;Evaluation group&amp;amp;quot; dann den Wert der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Und hier das Ergebnis in der Vorschau:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_vorschau.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert 2,02 stimmt mit unserer manuellen Berechnung überein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;tabellengestaltung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-37&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Tabellengestaltung ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;summen-seitenzahlen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-38&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Summen, Seitenzahlen ===&lt;br /&gt;
&lt;br /&gt;
Um es noch ein wenig interessanter zu gestalten fügt man noch das Gehalt hinzu, summiert es für die Monate und gesamt. Dazu noch die Seitenanzahl und einen Seitenzähler und eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
Das Gehalt bekommt man, indem man das Gehalt aus den Feldern neben den Namen zieht. Das selbe macht man auch nochmal in das Band „Monat Group Footer 1“ und wählt hier die Aggregation „Sum“ aus, um die Summe zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Um einen Seitenzähler zu erhalten fügt man zunächst das Band „Page Footer“ hinzu und legt dort die Variable „PAGE_NUMBER“ ab. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Page_Number.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Eigenschaften“ → „Text field properties“ → „Evaluation Time“ wählt man hier „Now“ um die aktuelle Seitenanzahl zu bekommen und „Report“ um die gesamte Seitenanzahl zu erhalten. In dem Beispiel ist die Ausgabe z.B.: „Seite 2 von 6“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-steuern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-39&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche steuern ===&lt;br /&gt;
&lt;br /&gt;
Damit die drei Personen im Monat 2 nicht durch einen Seitenumbruch auseinandergerissen werden, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen (hier „Monat“) und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel im Designermodus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_1_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_2_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilen-alternierend-einfärben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-41&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilen alternierend einfärben ===&lt;br /&gt;
&lt;br /&gt;
Um nun bei mehreren Datensätzen auch noch den Überblick in den Zeilen zu behalten kann man jetzt auch noch den Hintergrund der Zeile abwechselnd farbig gestalten. Dazu Zieht man aus den „Reports Elements“ das „Rectangle“ in das „Detail 1“ Band&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und passt es der Größe des Bandes an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Hintergrundfarbe kann man nun in den Eigenschaften in „Backcolor“ ändern. Damit dies nun nicht in jeder Zeile erscheint, sondern abwechselnd, fügt man noch in den Eigenschaften in „Print When Expression“ den Wert &amp;lt;span id=&amp;quot;anchor-42&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-43&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Boolean.valueOf( $V{PAGE_COUNT}.intValue() % 2 == 0 ) ein. &lt;br /&gt;
&lt;br /&gt;
Zur erläuterung:&lt;br /&gt;
&lt;br /&gt;
Die Variable „PAGE_COUNT“ zählt die Anzahl der Datensätze hoch. Mit „% 2“ wird diese Variable durch 2 geteilt und nur der Restwert ausgegeben. Als Ergebnis erhält man also in jeder ungeraden Zeile eine 1. Dieses Ergebnis wird nun mit der „0“ verglichen. Wenn dieser Ausdruck/Vergleich (expression) wahr ist, wird das Objekt, in diesem Fall der Hintergrund, angezeigt. Bei diesem Ausdruck erhält also jede gerade Zeile den Hintergrund. Möchte man lieber die ungeraden Zeilen hervorheben, schreibt man einfach eine 1 anstelle der 0 hinter „==“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis bei einer ungeraden Hervorhebung sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel welches bereits in der Uni Mannheim benutzt wird ist die Ausgabe einer Rechnungslegungsliste. Das Beispiel zeigt nicht nur ein aufwändigeres Layout, sondern auch, wie man gruppierte Tabellen anlegt: Dabei sind die Zeilen der Tabelle im Detail 1 Band, und die Zwischensummen in den Gruppierungs-Bändern. Die Spaltenüberschriften der Tabelle befinden sich im untersten Group-Header-Band. Im Designermodus sieht das ganze folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rahmenlinien-vorausschauend-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-44&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rahmenlinien &#039;&#039;&#039;vorausschauend setzen&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Sowohl bei Text- als auch bei Static-Fields findet sich ein eigener Reiter zum setzen von Rahmeneigenschaften. Dort wird der Abstand des Inhaltes zum Rahmen des jeweiligen Feldes definiert, sowie Rahmenlinien gesetzt.&lt;br /&gt;
&lt;br /&gt;
Beim Setzen von Rahmenlinien wird empfohlen, dass bei nebeneinanderliegenden Feldern, welche durch eine Rahmenlinie getrennt werden, jeweils in beiden Feldern Rahmenlinien gesetzt werden und nicht nur in einem der beiden Felder. Denn beim Export in das PDF-Format ist ersichtlich ob nur eines der Felder oder beide Felder Rahmenlinien besitzen. Falls dies also nicht einheitlich umgesetzt wird, erscheinen Rahmenlinien an entsprechenden Stellen dünner beziehungsweise dicker (bei Excel-Dokumenten tritt dieser Effekt nicht auf):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_borders2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-45&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterberichte  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: In Edustore funktionieren Unterberichte nur, wenn der Dateiname der jrxml-Datei mit &amp;amp;quot;_xmlsource.jrxml&amp;amp;quot; endet. Dadurch wird dem Servlet mitgeteilt, dass die Datenquelle für den Bericht ein XML-Datenstrom ist. Dabei ist mit Performanceeinbußen zu rechnen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem muss beim Berichtsdesign die gleiche JasperReports Version genutzt werden wie im Server. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden eine Anleitung zur Erstellung eines Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-46&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Hauptberichts ===&lt;br /&gt;
&lt;br /&gt;
 Erzeugen Sie für den Unterbericht mit Hilfe des [[#2.1.3.Template erzeugen|outline|Template]][[#2.1.3.Template erzeugen|outline|-Generators]] in Edustore einen leeren Bericht, und speichern Sie diesen am besten im gleichen Verzeichnis wie den Hauptbericht. &lt;br /&gt;
&lt;br /&gt;
 Ziehen Sie dann das Subreport-Werkzeug in den Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
Ggf.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport0_tool.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es startet der Subreport-Assistent. Hier geben Sie zunächst den Dateinamen oben an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt geben Sie eine Datenbank-Verbindung an. Hier wählen Sie &amp;amp;quot;Don&#039;t use any connection...&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden Parameter angezeigt, zu diesem Zeitpunkt gibt es aber noch keine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einfach auf &amp;amp;quot;Weiter&amp;amp;quot;. Sie werden dann aufgefordert, einen Dateipfad für den Unterbericht zu vergeben. IReport legt diesen standardmäßig in das gleiche Verzeichnis wie den Hauptbericht. Für Edustore sollten Sie dies auch tun.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass Sie beim Unterbericht nicht die *.jrxml-Datei verlinken, sondern die *.jasper-Datei, d.h. den kompilierten Report.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach sehen Sie einen Platzhalter für den Unterbericht im Entwurfsbereich. Beachten Sie bitte daß die Größe des Platzhalters unwichtig ist: die Ausdehnung des Unterberichts wird im Unterbericht definiert. Der Platzhalter ist lediglich wichtig, um die linke obere Ecke des Unterberichts festzulegen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Rechts neben dem Platzhalter sehen Sie die Eigenschaften des Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_none.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Unterbericht arbeitet meist mit Übergabe von Parametern, z.B. will man vom Hauptbericht den Inhalts des Feldes &amp;amp;quot;Kostenstelle&amp;amp;quot; an den Unterbericht übergeben. Dies müssen wir in den Eigenschaften des Unterberichts &amp;amp;quot;deklarieren&amp;amp;quot;. In der Zeile &amp;amp;quot;Parameters&amp;amp;quot; steht nach Bedienung des Assistenten noch kein Wert. Für die Datenquelle XML gibt es außerdem einen Parameter &amp;lt;span id=&amp;quot;anchor-47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_DATA_DOCUMENT, der immer übergeben werden muss: Die XML-Datenquelle des Hauptberichts. Hier eine Übersicht, welche Parameter übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport10_parameters.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Zeilen mit Großschreibung sind die vorgegebenen Werte, der Parameter &amp;amp;quot;Kst&amp;amp;quot; speist sich aus dem JR-Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;. Das Beispiel zeigt, daß der Name für den Parameter beliebig ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis für Unterberichte mit Dezimalzahlen&#039;&#039;&#039;: Wenn der Unterbericht mit Zahlen mit Nachkommastellen arbeitet, und Sie in JasperReports testen, dann müssen Sie noch die [[#3.1.2.Datenquelle erzeugen|outline|Parameter]] &amp;lt;span id=&amp;quot;anchor-48&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_LOCALE und &amp;lt;span id=&amp;quot;anchor-49&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_NUMBER_PATTERN wie folgt übergeben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_number.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterbericht-mit-header-und-footer-vom-hauptbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-50&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterbericht mit Header und Footer vom Hauptbericht ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Unterbericht in einem normalen Gruppen- oder Detail-Band liegt, wird der Header und Footer vom Hauptbericht automatisch mitbenutzt. In vielen Fällen möchte man aber den Unterbericht nur ein mal ausgeben und legt ihn daher in das Summery-Band. Hier wird Standardmäßig der Header und Footer nicht ausgegeben oder wiederholt. Möchte man aber z.B. die Seitenzahl die im Footer liegt weiterhin angezeigt bekommen, gibt es eine Eigenschaft vom Hauptbericht, die man nur aktivieren braucht. Diese Eingenschaft nennt sich: Summary with Page Header and Footer.&lt;br /&gt;
&lt;br /&gt;
Also einfach auf den Hauptbericht auswählen und in Eigenschaften diesen Punkt aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport_header_footer.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-unterberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-51&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Unterberichts ===&lt;br /&gt;
&lt;br /&gt;
Nun können wir den Unterbericht öffnen, indem wir über dem Platzhalter die rechte Maustaste betätigen und &amp;amp;quot;Open Subreport&amp;amp;quot; wählen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport3_open.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es erscheint ein neues Fenster mit einem leeren Entwurfsbereich. Sie könnten nun loslegen und im Detailbereich verschiedene Elemente gestaltet. Aber man muss bedenken daß ein Unterbericht für jeden Datensatz im Hauptbericht ausgeführt und eingebettet wird. Daher wird man vermutlich in den meisten Fällen im Unterbericht auf einen Filter zurückgreifen. Hier kommt dann wieder der oben genannte Parameter, z.B. &amp;amp;quot;Kst&amp;amp;quot; ins Spiel: Als ersten deklarieren wir den Parameter im Unterbericht, indem wir Links bei den Parametern die rechte Maustaste drücken, und &amp;amp;quot;Hinzufügen...&amp;amp;quot; wählen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nennt IReport den Parameter &amp;amp;quot;parameter1&amp;amp;quot;. Rechts können wir in den Eigenschaften des Parameters den Namen ändern, und &amp;amp;quot;Use as a prompt&amp;amp;quot; abwählen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Änderungen sind nicht notwendig.&lt;br /&gt;
&lt;br /&gt;
Wir ergänzen nun die &amp;amp;quot;Report Query&amp;amp;quot; [[Datei:JasperReports-Handbuch_report_query.png]] des Unterberichts von&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/ergebnisse/ergebnis/ergebniselement/sqlerg/row&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
um einen Filter, der mit der Abfragesprache XPATH formuliert wird. Im obigen Beispiel würden wir jetzt nur die Zeilen der Datenquelle auswählen, wo die Nummer der Kostenstelle mit der des Hauptberichts übereinstimmt. Wir erinnern uns: letztere steht im Parameter &amp;amp;quot;Kst&amp;amp;quot;. Anhand der vorhandenen Report Query können wir sehen, dass die Kostenstelle in den Spalten (&amp;amp;quot;col&amp;amp;quot;) mit der id=5 steht. Der Ausdruck wird also um den Filter &amp;amp;quot;&#039;&#039;[col[@id=&amp;amp;quot;5&amp;amp;quot;]/wert=&#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-52&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;$P{Kst}&#039;]&#039;&#039;&amp;amp;quot; ergänzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Nun ändern wir im Entwurfsbereich des Unterberichts das Layout: für das aktuelle Beispiel wollen wir im Unterbericht eine Summe der Beträge für jede Kostenstelle ausgeben. Dazu müssen wir zunächst eine Gruppierung nach Kostenstelle hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Gruppierungsassistenten wählen wir das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot; als Gruppierungsmerkmal, und im nächsten Schritt sagen wir, daß ein Gruppenkopf hinzugefügt werden soll:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist die Gruppierung als Band verfügbar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In die Gruppierung ziehen wir dann das Feld &amp;amp;quot;Summe&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim &amp;amp;quot;Loslassen&amp;amp;quot; des Feldes werden wir gefragt, ob wir eine Aggregatfunktion nutzen wollen; wir wählen hier die Summierung:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist das Feld verfügbar. Wir setzen noch das Label &amp;amp;quot;Summe:&amp;amp;quot; davor. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Den Detailbereich brauchen wir eigentlich nicht, wir können den ganz schmal machen. Danach speichern wir den Unterbericht, und gehen wieder zum Hauptbericht. Hier setzen wir den Unterbericht direkt unter das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport15_align.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Bericht mit der jew. Datenquelle ausführen. Das Ergebnis läßt je nach Datenmenge ein bisschen auf sich warten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport20_erg.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einhängen-des-berichts-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-53&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einhängen des Berichts in Edustore ===&lt;br /&gt;
&lt;br /&gt;
Damit der Bericht auch im Server nutzbar ist, muss noch folgendes eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
* Der Server sollte ausreichend RAM haben (Variable CATALINA_OPTS), weil hier XML als Datenquelle verarbeitet wird.&lt;br /&gt;
* Im Hauptbericht gibt es einen neuen Parameter SUBREPORT_DIR. Setzen Sie hier den Defaultwert (&amp;amp;quot;Default value Expression&amp;amp;quot; auf den Pfad, in dem die Dateien liegen (z.B. &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-54&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-55&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/home/superx/webserver/tomcat/webapps/superx/WEB-INF/reports/&amp;amp;quot;).&lt;br /&gt;
* Kopieren Sie die .jasper Datei des Unterberichts in dieses Verzeichnis. &lt;br /&gt;
* Bei Nutzung von Versionskontrollsystemen haben Sie die *.jasper-Dateien vermutlich ignoriert (gitignore / svnignore). Sie müssen die Dateien daher mit &amp;amp;quot;-f&amp;amp;quot; adden / committen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorsicht beim Einsatz von JasperSoft Studio: Die Anwendung erzeugt bei der Einzelbearbeitung eines Unterberichts nicht automatisch eine entsprechende .jasper-Datei beim Previewen des Hauptberichts (iReport machte das). Man muss also in Jaspersoft Studio im Bearbeitungsfenster oben immer &amp;amp;quot;Compile Report&amp;amp;quot; anklicken, um eine neue .jasper Datei zu erzeugen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-56&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedienung-des-assistenten-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-57&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedienung des Assistenten für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Für die Erstellung von Kreuztabellen gibt es einen eigenen Assistenten. Vorab sollte man aber zunächst ein &amp;amp;quot;Summary&amp;amp;quot;-Band erzeugen. Im folgenden Beispiel haben wir alle anderen Gruppierungen und Detail-Bands entfernt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir das Crosstab-Element in den Summary Band. Es erscheint der Assistent. Als Datenquelle nutzen wir die Abfrage des Berichts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als nächsten definieren wir die Zeilendimension des Berichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen z.B. die Abschlüsse. Danach definieren wir die Spalten-Dimension:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;. Danach definieren wir das Merkmal, das in den Zellen ausgegeben werden soll. Dies ist die Summe der Studierenden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluß kann man ein Layout festlegen, und Zeilen- und Spaltensummen erzeugen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich erscheint ein neues Fenster mit der Kreuztabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können wir nun Spaltenbreiten und Überschriften ändern:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab9.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab8.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nachbearbeitung-des-kreuztabellen-assistenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-58&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nachbearbeitung des Kreuztabellen-Assistenten ===&lt;br /&gt;
&lt;br /&gt;
Der Assistent liefert nur einfache Kreuztabellen, ggf. wollen Sie diese im Nachhinein anpassen. Sie können z.B. mehr als zweistufige Hierarchien in Kreuztabellen einrichten, indem Sie im Report Inspector manuell neue Merkmale anlegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_new_row.png]]&lt;br /&gt;
&lt;br /&gt;
Auch bei &amp;amp;quot;Measures&amp;amp;quot; können Sie neue &amp;amp;quot;abhängige Variablen&amp;amp;quot; anlegen, z.B. wenn Sie in einer Tabelle mit den Zeilen &amp;amp;quot;Ausgaben&amp;amp;quot; und &amp;amp;quot;Einnahmen&amp;amp;quot; die Ausgaben mit negativem Vorzeichen versehen wollen und dann saldieren wollen: Sie würden ein neues &amp;amp;quot;Measure&amp;amp;quot; anlegen, mit der Calculation=&amp;amp;quot;Sum&amp;amp;quot;, Typ &amp;amp;quot;java.lang.Float&amp;amp;quot;, und der folgenden Expression bekommen alle Ausgaben ein negat. Vorzeichen:&lt;br /&gt;
&lt;br /&gt;
($F{Kostenart}==&amp;amp;quot;Ausgaben&amp;amp;quot;)?-$F{Betrag}:$F{Betrag}&lt;br /&gt;
&lt;br /&gt;
Das neue Measure können Sie dann in die Zeilen- oder Spaltensummen ziehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-im-gruppenfuß&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-59&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen im Gruppenfuß ===&lt;br /&gt;
&lt;br /&gt;
Kreuztabellen lassen sich nicht nur im Summary Band nutzen, sondern auch in Gruppenfuß/Gruppenkopf-Bändern. Wenn Sie die Kreuztabelle z.B. in einen Groupfooter legen, müssen Sie den &amp;amp;quot;Reset type“ der Gruppe anpassen. Das machen Sie indem Sie ein rechts klick auf die Kreuztabelle machen und dann auf &amp;amp;quot;Crosstab data&amp;amp;quot; klicken. Dort stellen Sie den &amp;amp;quot;Reset type&amp;amp;quot; auf &amp;amp;quot;Group&amp;amp;quot; und die &amp;amp;quot;Reset group&amp;amp;quot; auf die Gruppe in der die Kreuztabelle gelegt wurde. Wenn Sie das nicht machen funktioniert der Report nicht! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-60&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Sie können auch virtuelle Dimensionen in Kreuztabellen nutzen, indem Sie ähnlich wie bei der [[#2.2.4.Gruppierung ohne eigenes Band|outline|Gruppierung ohne eigenes Band]] mit Variablen arbeiten. &lt;br /&gt;
&lt;br /&gt;
Um z.B. alle Studienfächer im Feld &amp;amp;quot;1. Fach&amp;amp;quot; auszugeben, und nur die Fächer Mathematik, Physik und Biologie zu einem Fach &amp;amp;quot;Naturwissenschaften&amp;amp;quot; zusammenzufassen, legen Sie eine neue Variable &amp;amp;quot;fachgruppe&amp;amp;quot; an, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell.png]]&lt;br /&gt;
&lt;br /&gt;
In der Kreuztabelle können Sie nun z.B. in den Zeilen die Variable &amp;amp;quot;fachgruppe&amp;amp;quot; auswählen, und erhalten eine Tabelle mit der &amp;amp;quot;künstlichen&amp;amp;quot; Zeile &amp;amp;quot;Naturwissenschaften&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-in-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-61&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung in Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Zeilen- oder Spaltendimensionen werden in Kreuztabellen immer alphabetisch sortiert, egal wie die Sortierung in der Datenquelle ist. Das ist in der Regel kein Problem, aber wenn z.B. eine Zeilendimension anders sortiert werden soll, geht das nicht ohne weiteres. Hier ein Problembeispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_falsch.png]]&lt;br /&gt;
&lt;br /&gt;
Das Balkendiagramm übernimmt die Sortierung nach dem Schlüssel der Gehaltsgruppe aus der Datenquelle. In der Kreuztabelle wird die Zeilendimension &amp;amp;quot;Bezeichnung der Gehaltsgruppe&amp;amp;quot; angezeigt, und diese sortiert alphabetisch, was an dieser Stelle aber unsinnig ist: Der Eintrag &amp;amp;quot;Kein Einkommen&amp;amp;quot; sollte ganz oben stehen.&lt;br /&gt;
&lt;br /&gt;
Wir schauen uns zunächst die Definition der Kreuztabelle an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Zeilendimension sortiert aufsteigend nach Bezeichnungstext. Man kann auch keine alternative Expression als Sortierkriterium angeben. Wir müssen also einen Trick anwenden: wir nehmen den Sortierschlüssel mit in die &amp;amp;quot;Bucket Expression&amp;amp;quot; der Zeilendimension auf, und setzen ihn als Präfix davor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach ist die Sortierung richtig:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig3.png]]&lt;br /&gt;
&lt;br /&gt;
Aber optisch ist das natürlich unschön, der Sortierschlüssel sollte am besten gar nicht angezeigt werden. Wir lösen das, indem wir den Anzeigetext wiederum so abwandeln, dass der erste Buchstabe nicht sichtbar ist. Java bietet dazu die Funktion &amp;amp;quot;substring()&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig4.png]]&lt;br /&gt;
&lt;br /&gt;
Und siehe da: die Sortierung und Anzeige ist perfekt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig5.png]]&lt;br /&gt;
&lt;br /&gt;
Dies ist nur ein Beispiel, wie man mit Hilfe von Java Expressions die Anzeige von Kreuztabellen variieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;parameter-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-62&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Parameter für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
In Kreuztabellen hat man keinen direkten Zugriff auf die Variablen und Felder des Hauptberichts. Man kann die Werte aber als Parameter übergeben. Dazu gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie machen den Parameter im Crosstab-Element bekannt, hier z.B. der Parameter &amp;amp;quot;RSZ&amp;amp;quot; für Regelstudienzeit):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach übergeben Sie den Parameter im Hauptbericht. Mit Rechtsklick auf das Cosstab Element können Sie eine Parameters-Map Expression hinterlegen, das ist einfach eine Zuweisung von einer oder mehreren Variablen zu jeweils einem Wert in der Groovy-Syntax mit &amp;amp;quot;[Variable:Wert,...]&amp;amp;quot;. In dem Beispiel unten weisen wir dem Parameter &amp;amp;quot;RSZ&amp;amp;quot; den Wert des Feldes &amp;amp;quot;RSZ&amp;amp;quot; zu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Parameter in der Kreuztabelle nutzen, z.B. um in einer Spaltenüberschrift nur dann eine Zahl mit Soll-Kreditpunkten anzuzeigen, wenn die Fachsemester innerhalb der Regelstudienzeit liegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param3.png]]&lt;br /&gt;
&lt;br /&gt;
Und hier das Ergebnis für einen Studiengang mit 6 Semestern Regelstudienzeit:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;manuelle-kreuztabelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-63&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Manuelle Kreuztabelle ===&lt;br /&gt;
&lt;br /&gt;
Wenn die gewünschte Konfiguration/Einstellungen in der Kreuztabelle nicht möglich ist, kann eine Kreuztabelle mit Einschränkungen auch selber erstellt werden. Im Beispiel mit Semestern, muss vorher abgeschätzt werden wie viele Semester vorraussichtlich in den Spalten vorkommen werden. Für jedes Semester (z.B. für 10 Semester) wird dann eine Variable angelegt. Die erste bekommt das höchste Semester (wie im Screenshot zu sehen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das zweite Semester wir dann das höchste welches aber unterhalb von dem ersten liegen soll, usw.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Semester können nun als Spalten verwendet werden mit der Option „blank when null“.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;layout-von-kreuztabellen-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-64&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Layout von Kreuztabellen bearbeiten  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt befasst sich mit Themen zur Layoutanpassung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;total-einer-row-group-entfernen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-65&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Total einer ‚Row Group‘ entfernen ====&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue ‚Row Group‘ angelegt wird, wird automatisch ein dazugehöriges Total-Feld erzeugt und mit eingefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_001.png|642x367px]]&lt;br /&gt;
&lt;br /&gt;
Das ist in diesem Falle nicht erwünscht. Um dieses Feld zu entfernen, wird in den &amp;lt;span id=&amp;quot;anchor-66&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-67&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Properties der &amp;lt;span id=&amp;quot;anchor-68&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Row Group‘ die ‚Total Position‘ = ‚none’ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_002.png|642x263px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;header-von-row-groups-für-jede-zeile-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-69&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Header von ‚Row Groups‘ für jede Zeile wiederholen ====&lt;br /&gt;
&lt;br /&gt;
Im folgenden Screenshot ist eine Kreuztabelle dargestellt, bei welcher die Header der ‚Row Groups‘ nur einmal dargestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_003.png|434x315px]]&lt;br /&gt;
&lt;br /&gt;
Zwar ließe sich das Feld noch, so dass es bis zum nächsten ‚Row Header‘ reicht, aber in diesem Beispiel ist erwünscht, dass sich der Header für jede Zeile wiederholt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_004.png|530x420px]]&lt;br /&gt;
&lt;br /&gt;
Dazu wird die Funktion ‚Merge Header Cells‘ in den Properties der ‚Row Group‘ deaktiviert. Es kann sein, dass die Funktion einmal aktiviert und dann wieder deaktiviert werden muss, damit sie als deaktiviert erkannt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_005.png|642x275px]]&lt;br /&gt;
&lt;br /&gt;
Damit der Text in der ersten Spalte nicht abgeschnitten wird, wurde ‚Stretch with Overflow‘ in den Text-Field-Properties ausgewählt. Dadurch ist eine Lücke bei den anderen Spalten entstanden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_006.png|509x404px]]&lt;br /&gt;
&lt;br /&gt;
Um diese Lücke zu schließen wird der ‚Stretch Type‘ in allen folgend eingerahmten Textfeldern auf ‚Relative To Band Height (deprecated)‘ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_007.png|642x322px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;static-field-und-text-field-frei-gestaltenbewegen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-70&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Static Field‘ &amp;lt;span id=&amp;quot;anchor-71&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;und ‚Text Field‘ frei gestalten/bewegen ====&lt;br /&gt;
&lt;br /&gt;
Im Default sind ‚Static Field‘ und ‚Text Field‘ in einer Kreuztabelle nicht frei positionierbar/gestaltbar. Um das zu ändern, wird im jeweiligen Bereich das Layout auf ‚Free Layout‘ eingestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_008.png|642x279px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reihenfolge-der-row-groups-ändern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-72&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reihenfolge der ‚Row Groups‘ ändern ====&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der ‚Row Groups‘ muss nachträglich im ‚Outline‘-Bereich geändert werden. Dies erfolgt per Drag and Drop im rot markierten Bereich:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_009.png|642x437px]]&lt;br /&gt;
&lt;br /&gt;
Die Textfelder im Design-Bereich zu verschieben, reicht nicht aus, denn die ‚Row Group‘ selbst bleibt wo sie ist und dann würde nur das Textfeld in eine andere Row Group verschoben. Im folgenden Negativbeispiel wurden nachträglich im Design-Bereich die Textfelder Intervall und Datenherkunft vertauscht. Dadurch sind sie in der jeweils falschen ‚Row Group‘ gelandet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_010.png|642x387px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-73&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme ==&lt;br /&gt;
&lt;br /&gt;
Um einen Bericht ansprechend zu gestalten dürfen Diagramme wie Torten- oder Balkendiagramme nicht fehlen. Diese in einen Bericht einzubringen ist auch nicht schwer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorab sei aber darauf hingewiesen: Grafiken in JasperReports arbeiten nicht analog zu Kreuztabellen, in denen Daten nach Zeilen- oder Spaltenmerkmalen automatisch gruppiert und summiert werden. Für Grafiken sollten Sie gewährleisten, dass die Datenbasis für die Grafik &#039;&#039;&#039;bereits gruppiert und summiert&#039;&#039;&#039; sind, Sie können also keine Einzeldaten für Grafiken verwenden. Bei Datenblatt-Berichten in Edustore ist dies gewährleistet, wenn Sie im Feld &amp;amp;quot;Felder&amp;amp;quot; nur die Felder selektieren, nach denen in der Grafik gruppiert werden soll. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-74&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme ===&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben eine Tabelle, die die Studierendenzahl mehrerer Semester nach Geschlecht aufführt. Hier ein Screenshot der Datengrundlage:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Tabelle enthält die Merkmale Geschlecht, Semester und Summe. Daraus erzeugen wir in Jaspersoft Studio (und weiter unten in iReport) ein Balkendiagramm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-75&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Zunächst definieren wir die Sortierung der Daten. Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie den Reiter &amp;amp;quot;Sorting&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query2.png]]&lt;br /&gt;
&lt;br /&gt;
Damit die Grafik richtig funktioniert müssen wir nach beiden Merkmalen (Semester und Geschlecht) sortieren. Das Semester sollte nicht alphabetisch nach Namen sortiert sein, sondern nach dem Zahlenschlüssel. Sonst ständen alle Wintersemester untereinander, und davor alle Sommersemester.&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir aus der Palette das Chart Element in das Summary Band. Es startet automatisch ein &amp;amp;quot;Chart Wizward&amp;amp;quot;. Hier wählen wir &amp;amp;quot;Stacked Bar&amp;amp;quot; als Grafiktypen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun müssen wir ihm sagen welches Feld die Y-Achse darstellt (hier &amp;amp;quot;Summe&amp;amp;quot;), und welches die X-Achse (hier &amp;amp;quot;Semester der Belegung&amp;amp;quot;). Das Merkmal zur Unterscheidung der Balkenfarben (&amp;amp;quot;Series&amp;amp;quot;) ist das Geschlecht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach klicken wir auf &amp;amp;quot;Finish&amp;amp;quot;, und die Grafik wird als Platzhalter im Summary Band eingefügt. Dort definieren wir noch die Breite der Grafik:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Entwurf fertiggestellt. So sieht die Grafik aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
Es ist etwas ungünstig dass die Labels der X-Achse nicht ganz lesbar sind. Wir lösen dies mit Rotation der Labels um 45 Grad:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht es besser aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard5.png]]&lt;br /&gt;
&lt;br /&gt;
Das Beispiel lädt zur weiteren Verfeinerung an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-76&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in iReport ====&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht in iReports &amp;amp;quot;Refresh Preview Data&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Spalten der Tabelle sind selbsterklärend. Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Wir wählen hier das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart3.png]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der X-Achse (in JasperReports heißt das &amp;amp;quot;Category Axis&amp;amp;quot;) nehmen wie das Merkmal Semester, und bei der &amp;amp;quot;Value expression&amp;amp;quot; die Summe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist die Definition beendet. Wir können dann in den Eigenschaften der Grafik noch eine &amp;amp;quot;Title Expression&amp;amp;quot; festlegen, z.B. &amp;amp;quot;Studierende nach Semester und Geschlecht&amp;amp;quot;. In der Vorschau sieht die Grafik so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Wintersemester werden noch nicht abgedruckt, dazu ändern wie die &amp;amp;quot;Label rotation&amp;amp;quot; auf 30°. Dies lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wichtig für die Grafik war die Sortierung in der Datenquelle nach &amp;amp;quot;dim_semester.quell_id&amp;amp;quot;. Mit &amp;amp;quot;Series Colors&amp;amp;quot; kann man die Farbe der Balken ändern etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn sie jeden Balken bzw. Teil des Balkens zusätzlich mit den Werten ausgeben wollen, müssen sie in den Chart-Eigenschaften unter den &amp;amp;quot;Bar*Properties&amp;amp;quot; das Ankreuzfeld &amp;amp;quot;Show labels&amp;amp;quot; ankreuzen. Wenn es bereits angekreuzt ist, sollten Sie das Kreuz einmal entfernen und wieder setzen (Bug in iReport seit Version 4.x)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-nach-tabelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-77&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme nach Tabelle ausgeben ===&lt;br /&gt;
&lt;br /&gt;
Üblicherweise ähnelt ein Diagramm in JasperReports einer Kreuztabelle. Wenn nun ein Diagramm nach Vorgabe einer Tabelle ausgegeben werden soll, muss ein wenig getrickst werden. &lt;br /&gt;
&lt;br /&gt;
Erläuterung:&lt;br /&gt;
&lt;br /&gt;
In der Series expression werden die Zeilen angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Category expression werden die Spalten angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Value expression wird der Wert angegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um ein Diagramm nun zu erstellen muss pro Series + Category eine Categorie series angelegt werden und das entsprechende Feld angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-mit-berechneten-werten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-78&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme mit berechneten Werten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die einem Diagramm zugrunde liegende Tabelle noch Berechnungen erfordert, muss man mit Variablen arbeiten. Als Beispiel wird hier die Maske &amp;amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;amp;quot; benutzt. Das Ergebnis wird eine Tabelle mit Balkendiagramm der &amp;amp;quot;Studierende und Studienanfänger im 1. Fachsemester (Zeitreihe)&amp;amp;quot; sein.&lt;br /&gt;
&lt;br /&gt;
Ein bereits fertiges Datenblatt könnte folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_datenblatt_ohne_grafik.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier fehlt jetzt die Grafik, die in dem noch leeren Band &amp;amp;quot;Summary&amp;amp;quot; eingefügt werden soll. Wenn das Band noch nicht eingefügt wurde, einfach mit Rechtsklick auf Summary (im &amp;amp;quot;Report Inspector&amp;amp;quot;) und dann auf &amp;amp;quot;Add Band&amp;amp;quot; um es anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_how_to_add_summary.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Da es in diesem Beispiel dafür keine Variable gibt, wird später noch per Hand eine Weitere hinzugefügt. Wenn es bei Ihnen möglich ist, klicken Sie rechts neben dem Feld auf den Button und fügen dort eine Variable ein. In diesem Beispiel wird als fester String &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-79&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Frauen im 1. FS&amp;amp;quot; eingegeben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_series_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und dann wieder auf &amp;amp;quot;Weiter&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Auf der X-Achse soll in diesem Beispiel die Semester erscheinen und auf der Y-Achse die Anzahl der Weiblichen Studierenden im 1. Fachsemester. Um dies zu erhalten wählt man als &amp;amp;quot;category expression&amp;amp;quot; die Variable &amp;amp;quot;Semester&amp;amp;quot; aus. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies geschieht, indem man auf den Button rechts neben dem Feld klickt, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dann doppelt auf das Feld &amp;amp;quot;Semester&amp;amp;quot; klickt und dann auf &amp;amp;quot;Apply&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In den meisten Fällen werden hier Felder benutzt. Wenn Sie jedoch z.B. eine Variable benutzen wollen, müssen Sie nach dem Klick rechts auf den Button in dem neuen Fenster links unten z.B. auf &amp;amp;quot;Variables&amp;amp;quot; oder &amp;amp;quot;Parameter&amp;amp;quot; klicken. Dabei ändert sich der Inhalt von dem mittleren Feld. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können Sie nun auch eine andere Auswahl treffen.&lt;br /&gt;
&lt;br /&gt;
Das selbe gilt auch für &amp;amp;quot;value expression&amp;amp;quot;. Der Unterschied ist hierbei, die &amp;amp;quot;category expression&amp;amp;quot; ist die Bezeichnung und in &amp;amp;quot;value expression&amp;amp;quot; dürfen nur Zahlen vorkommen, welche von JasperReports addiert werden können. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wählen wir nun z.B. das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun noch abschließend auf Beenden drücken und wir erhalten das erste Ergebnis. Über &amp;amp;quot;Preview&amp;amp;quot; wird nun das Diagramm mit den Frauen aus dem 1. Fachsemester über die Semester angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_erstes_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um nun die männlichen Studenten aus dem 1. FS noch hinzuzufügen oder Änderungen an der gerade getroffenen Auswahl vorzunehmen klickt man mit der rechten Maustaste auf die Chart und dann auf &amp;amp;quot;Chart Data&amp;amp;quot;. In dem Reiter &amp;amp;quot;Details&amp;amp;quot; kann man nun die eben angelegte Category bearbeiten/entfernen oder auch eine neue anlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_details.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wollen wir jetzt noch die männlichen Studierende aus dem 1. FS noch Hinzufügen. Also klickt man auf &amp;amp;quot;Hinzufügen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Eingabe funktioniert hier genau wie in dem Assistenten bei der Erstellung einer neuen Chart. Nur taucht jetzt das Problem auf, dass es kein Feld mit den Männlichen Studierenden gibt, sondern nur gesamt. Die Lösung ist aber ganz einfach. Zunächst geht man wieder in den &amp;amp;quot;Expression editor&amp;amp;quot; der &amp;amp;quot;Value expression&amp;amp;quot; und wählt das Feld &amp;amp;quot;1. FS gesamt&amp;amp;quot; aus, setzt dahinter ein Minuszeichen und danach wählt man noch das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus. Jasper berechnet dann jeweils das Ergebnis und benutzt dieses als Value. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun erhalten wir als Ergebnis folgende Tabelle:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt noch viele Änderungsmöglichkeiten unter Einstellungen wie z.B. &amp;amp;quot;Label rotation&amp;amp;quot; lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind und &amp;amp;quot;Series Colors&amp;amp;quot; um die Farbe der Balken zu ändern. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;chart-customizer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-80&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Chart Customizer ===&lt;br /&gt;
&lt;br /&gt;
Mit JasperSoft Studio können die über sog. &amp;amp;quot;Chart Customizer&amp;amp;quot; Details bzgl. des Layouts vor Diagrammen steuern. Im folgenden ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
Wir haben ein einfaches Balkendiagramm, in dem wir eine (automatisch) ermittelte Y-Achse mit Werten von 0-15 haben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir den Bereich auf 12 (in 2er-Schritten ändern). Man könnte dies ganz leicht über die Eigenschaften ändern:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man aber nicht die Schrittweite ändern. Wir legen dazu einen Chart Customizer vom Typ &amp;amp;quot;Value Axis Range and Tick&amp;amp;quot; an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und damit sieht das Diagramm so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Y-Achse zählt nun in 2er Schritten von 0 bis 12.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch ein Hinweis: Bei Y-Achsen mit kleinen Wertebereichen kann es vorkommen, dass JR die Y-Achse automatisch mit Intervallen mit Nachkommastellen versieht, also z.B. 1 - &amp;lt;span id=&amp;quot;anchor-81&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;1,5 - 2 - 2,5 etc. Bei manchen Maßen macht die Nachkommastelle keinen Sinn (z.B. wenn Studierende gezählt werden). Um das zu ändern gehen Sie in der Eigenschaften der Y-Achse (Chart → Value axis) und setzen bei der Eigenschaft &amp;amp;quot;Value axis tick label mask&amp;amp;quot; den Wert &amp;amp;quot;#&amp;amp;quot; (Pattern für ganzzahlig) ein. Damit wird nur noch ganzahlig hochgezählt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;balken-labels&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-82&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Balken Labels ===&lt;br /&gt;
&lt;br /&gt;
In Balkendiagrammen können die exakten Zahlen nicht genau ermittelt werden. Aus diesem Grund wird oft gewünscht, die Zahlen noch mal schriftlich darzustellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_balken_labels_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Zahlen anzeigen zu lassen muss einfach in den Chart Properties unter Advanced „Common Chart Properties → Plot → Show Labels“ auf true gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-83&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklets ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-84&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ab JR 6.2 oder höher (d.h. SuperX-Kernmodul 4.8 oder HISinOne-BI 2018.12) gibt es die Möglichkeit, Berichts-&amp;amp;quot;Bücher&amp;amp;quot; mit Deckblatt, Inhaltsverzeichnis und Schlußseite zu erstellen. Die Erstellung ist übersichtlicher als eine Kombination aus Haupt- und Unterbericht, und bietet beim Seitenlayout mehr Optionen, z.B. kann man in einem Booklet Hoch- und Querformat kombinieren.&lt;br /&gt;
&lt;br /&gt;
Englische Anleitungen siehe &lt;br /&gt;
&lt;br /&gt;
https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/report-books&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wg. der Version ist diese Möglichkeit in iReport nicht mehr verfügbar, Sie müssen JasperSoft Studio nutzen. Wenn Sie dort mit File -&amp;amp;gt; New einen neuen Report erzeugen, können Sie bei Report type den Wert &amp;amp;quot;Book report&amp;amp;quot; wählen. Der Assistent fragt Sie dann, ob Sie Deckblatt, Inhaltsverzeichnis und die Schlußseite benötigen, kreuzen Sie die jew. Position an. Sie erhalten danach ein Entwurfsfenster mit dem Hauptbericht, der drei Abschnitte enthält: Das &amp;lt;span id=&amp;quot;anchor-85&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Deckblatt und Inhaltsverzeichnis (&amp;amp;quot;Cover and table of contents&amp;amp;quot;), den Buchinhalt (&amp;amp;quot;Content&amp;amp;quot;) und die Schlußseite (&amp;amp;quot;Backcover&amp;amp;quot;):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Datei speichern, werden die jew. Unter-Dateien automatisch mit angelegt, mit dem Zusatz &amp;lt;span id=&amp;quot;anchor-86&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;*_cover.jrxml&amp;amp;quot;, &amp;amp;quot;*_toc.jrxml&amp;amp;quot; und &amp;amp;quot;*_backcover.jrxml&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hauptbericht-im-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-87&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hauptbericht im Booklet ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;aufbau-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-88&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Aufbau des Hauptberichts ====&lt;br /&gt;
&lt;br /&gt;
Startpunkt beim Booklet ist der Hauptbericht. Dieser hat keine &amp;amp;quot;Bänder&amp;amp;quot; im Sinne einer Ergebnisausgabe, insbesondere gibt es kein Detailband. Trotzdem arbeitet der Hauptbericht mit einer Datenquelle im Sinne eines Detailbandes, hier heißt das Band &amp;amp;quot;Content&amp;amp;quot;. Für Makroberichte in SuperX-/BI müssen wir für alle Unterberichte dieselbe XML-Quelle verwenden, d.h. wir müssen im Hauptbericht genau eine Zeile der XML-Quelle filtern. Wir machen das mit XPATH mit dem Ausdruck&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/ergebnisse/ergebnis[@ordnr=&#039;0&#039;]/ergebniselement/sqlerg/row[@no=&#039;0&#039;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies liefert die erste Zeile der ersten Tabelle des Makroberichts im Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie also oben auf die Datenquelle des Hauptberichts, und fügen Sie den Filter ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Funktion „Read Fields“ funktioniert in diesem Fall nicht. Die Felder für den Hauptbericht werden manuell in den Sourcecode eingefügt. Dazu erstellen Sie zunächst, wie in [[#4.5.Makroberichte als Datenquelle für JasperReports|outline|Abschnitt 4.5]] beschrieben, ein JR-Template für den Makrobericht. Aus diesem Template kopieren Sie aus dem Sourcecode die Felder und fügen diese im Booklet ein. Fügen Sie alle Felder sowohl im Haupt- als auch in den Unterberichten des Booklets ein.&lt;br /&gt;
&lt;br /&gt;
Im Content Band können Sie dann mit der rechten Maustaste die jew. Unterberichte verlinken. Die Technik ist identisch mit den normalen Haupt/-Unterberichten, nur dass das Seitenlayout nicht vom Hauptbericht zum Unterbericht vererbt wird. &lt;br /&gt;
&lt;br /&gt;
Im Beispiel haben wir einen Unterbericht verlinkt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;amp;quot;Component Expression&amp;amp;quot; geben Sie den Unterbericht an. Im Feld &amp;amp;quot;Tab name expression&amp;amp;quot; können Sie den Namen des TABs in Excel definieren. Standardmäßig wird bei einem Booklet beim Export nach Excel also ein Arbeitsblatt mit mehreren Sheets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht wird mit den gleichen Parametern aufgerufen wie bei klassischen [[#2.5.1.Konfiguration des Hauptberichts|outline|Unterberichten]]. Der erste Unterbericht bekommt die ordnr 0, der zweite Unterbericht die ordnr 1 usw.:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main4.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;übergabe-von-layouts-vom-hauptbericht-an-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-89&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Übergabe von Layouts vom Hauptbericht an Unterberichte ===&lt;br /&gt;
&lt;br /&gt;
Generell werden im Booklet keine Layoutvorgaben vom Hauptbericht an den jew. Unterbericht übergeben. Ausnahme: Die Property &amp;amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;amp;quot;, die beim Excel Export als Zahl formatierte Zellen auch in Excel als Zahl ausgibt, wird im Hauptbericht gesetzt und dann an die Unterberichte übergeben.&lt;br /&gt;
&lt;br /&gt;
Achtung: Je nach JasperSoft Studio Version kann man diese Property nicht in der graphischen Entwcklungsumgebung setzen, sondern nur im *.jrxml-Quellcode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-deckblatt&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-90&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Deckblatt ===&lt;br /&gt;
&lt;br /&gt;
Das Deckblatt ist ein normaler JasperReport mit Elementen im Titel-Band. Beachten Sie dass im Unterbericht auch Seitenränder und Seitenformate definiert sein müssen. Sie können auch vom Hauptbericht Parameter übergeben, hier z.B. das Semester:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover1.png]]&lt;br /&gt;
&lt;br /&gt;
 Im Hauptbericht wiederum wird dieser Parameter dann übergeben, hier z.B. aus der Legende der Maske:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-inhaltsverzeichnis&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-91&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Inhaltsverzeichnis ===&lt;br /&gt;
&lt;br /&gt;
Das Inhaltsverzeichnis ist ein Bericht ohne Datenquelle, und bekommt über die Evaluation Time=&amp;amp;quot;Report&amp;amp;quot; die Anweisung, die Inhaltsdokumente nach Lesezeichen (HTML-Anchors) zu durchsuchen. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist leer, und über die Property &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
net.sf.jasperreports.bookmarks.data.source.parameter=REPORT_DATA_SOURCE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wird als Datenquelle der Content angegeben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Berichtsdesign ist vom Assistenten vorgegeben und relativ einfach. Sie können bis zu drei Ebenen für das Inhaltsverzeichnis angeben, jede Ebene benötigt ein eigenes Detailband.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc2.png]]&lt;br /&gt;
&lt;br /&gt;
 Die Feldnamen im Bericht sollten nicht geändert werden. Sie können aber das Layout anpassen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-erster-detailbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-92&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet erster Detailbericht ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Detailbericht ist ein normaler Unterbericht, d.h. er hat den Parameter &amp;amp;quot;ordnr&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;amp;quot;ordnr&amp;amp;quot; wird dann bei der Datenquelle des Unterberichts ausgewertet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht soll sicherlich auch Seitenzahlen anzeigen, dazu fügen Sie noch ein &amp;amp;quot;Page footer&amp;amp;quot; Band hinzu, und erzeugen dort ein Textfeld mit dem Inhalt z.B. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Seite &amp;amp;quot;+$V{MASTER_CURRENT_PAGE}&lt;br /&gt;
&lt;br /&gt;
Das Textfeld muss bei Evaluation time den Wert &amp;amp;quot;Master&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content3.png]]&lt;br /&gt;
&lt;br /&gt;
Danach wird die Seitenzahl jedes Unterberichts an den Hauptbericht angepaßt.&lt;br /&gt;
&lt;br /&gt;
Für das Inhaltsverzeichnis müssen Sie im jew. Detailbericht Lesezeichen (HTML-Anchors) und jeweils eine Ebene angeben. Wir können z.B. für das Textfeld der Überschrift einen Anker der Ebene 1 festlegen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach legen wir für das Gruppenband für das Textfeld mit dem Label der Gruppe (Fakultätsname) einen Anker der Ebene 2:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-fertige-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-93&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das fertige Booklet ===&lt;br /&gt;
&lt;br /&gt;
So sieht das Booklet im Preview im JasperSoft Studio aus: Zuerst das Deckblatt...&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
... und dann auf Seite 2 das Inhaltsverzeichnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und dann auf Seite 3 der erste Unterbericht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-94&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemeines-zu-schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-95&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemeines zu Schriften ===&lt;br /&gt;
&lt;br /&gt;
Für den Entwurf von Berichten ist es wichtig, daß die jew. Schriftart auch beim Server-System und beim Client verfügbar sind. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ein häufiger Fallstrick ist hier: unter Windows wird mit JasperReports entworfen, und dort z.B. die Schriftart &amp;amp;quot;Arial&amp;amp;quot; gewählt. Der Report soll auf dem Server unter Linux laufen, dort gibt es die Schriftart nicht. Resultat: der Bericht ist nicht kompilierbar. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Bei PDF-Dateien lassen sich Fonts ggf. auch in die Datei einbetten, bei Exportformaten wie OpenOffice oder Word ist dies nicht möglich. Sie sollten daher Schriftarten wählen, die auch beim Client mit größter Wahrscheinlichkeit installiert sind. Die sicherste Wahl ist es, Font-Familien anzugeben, z.B. &amp;amp;quot;Serif&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Im Zweifelsfall installieren Sie die Schriftart auf allen beteiligten Systemen. TrueType Fonts lassen sich in JasperReports importieren und nutzen, sie können sogar in PDF-Dateien standardmäßig eingebettet werden. Im folgenden wird die Schriftart &amp;amp;quot;Liberation Sans&amp;amp;quot; installiert, die man auf [https://fedorahosted.org/liberation-fonts/ https://fe][https://fedorahosted.org/liberation-fonts/ dorahosted.org/liberation-fonts/] herunterladen kann. Entpacken Sie das Download Paket in einem beliebigen Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-ireport-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-96&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-97&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in iReport einbinden ===&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn Sie iReport unter Windows nutzen, müssen Sie für die folgenden Schritte iReport als Admin starten:&lt;br /&gt;
&lt;br /&gt;
Im Menü &amp;amp;quot;Extras&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;Optionen&amp;amp;quot; können Sie den Font importieren:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wählen Sie aus der Dateiliste zunächst den &amp;amp;quot;Regular&amp;amp;quot;-Font aus, z.B. die Sans-Serif-Variante. &amp;lt;span id=&amp;quot;anchor-98&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im nächsten Schritt geben Sie dem Font einen Namen, und Sie wählen die zugehörigen Dateien für Fettdruck etc:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-99&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht, wenn Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des Formulars können Sie noch PDF-Exportoptionen wählen, z.B. ob die Schriftart in PDF-Dateien eingebunden werden soll. &amp;lt;span id=&amp;quot;anchor-100&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Achtung: beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-jaspersoft-studio-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-101&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in &#039;&#039;&#039;JasperSoft Studio&#039;&#039;&#039; einbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Window“ → „Preferences“ können Sie Fonts einbinden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach einem Klick auf „Add“ öffnet sich ein neues Fenster. Dort geben Sie dem Font einen Namen und wählen die zugehörige Datei für den normale Ausführung des Fonts. Es gibt weitere Reiter für Bold, Italic und Bold Italic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import5.png]]&lt;br /&gt;
&lt;br /&gt;
Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import6.png]]&lt;br /&gt;
&lt;br /&gt;
Achtung: Beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-schriftart-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-102&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default-Schriftart in iReport ===&lt;br /&gt;
&lt;br /&gt;
Sie können die Default Schriftart in iReport einstellen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_default_font.png]]&lt;br /&gt;
&lt;br /&gt;
Stellen Sie den Default-Font auf &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-103&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Liberation Sans&amp;amp;quot;. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fonts-auf-dem-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-104&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fonts auf dem Server  ===&lt;br /&gt;
&lt;br /&gt;
Um Schriftarten auf einen Tomcat-Server zu installieren, müssen die vier ttf-Dateien (normal, fett, kursiv, fett-kursiv) in den Ordner $JRE_HOME/lib/fonts kopiert werden. Für alle Java Anwendungen wie den Tomcat und JasperReports stehen dann die in dem verwendetem Java zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beispiel Arial unter Ubuntu 18.04:&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie mit dem Kommando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-105&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;ps fax | grep tomc&lt;br /&gt;
&lt;br /&gt;
welcher Tomcat läuft. Sie bekommen eine Ausgabe z.B. &lt;br /&gt;
&lt;br /&gt;
47769 ?       Sl   36:25 &amp;lt;span id=&amp;quot;anchor-106&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xmx3500M -XX:MaxPermSize=400m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -DSuperX-DB-PROPERTIES-SET=true -Djava.endorsed.dirs=/var/lib/tomcat8/endorsed -classpath /var/lib/tomcat8/bin/bootstrap.jar:/var/lib/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/var/lib/tomcat8 -Djava.io.tmpdir=/var/lib/tomcat8/temp org.apache.catalina.startup.Bootstrap start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Befehl zeigt den Pfad zu JRE_HOME, also &amp;lt;span id=&amp;quot;anchor-107&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64. Sie kopieren also die Dateien z.B. &lt;br /&gt;
&lt;br /&gt;
arial.ttf&lt;br /&gt;
&lt;br /&gt;
arialbd.ttf&lt;br /&gt;
&lt;br /&gt;
arialbi.ttf&lt;br /&gt;
&lt;br /&gt;
ariali.ttf&lt;br /&gt;
&lt;br /&gt;
von&lt;br /&gt;
&lt;br /&gt;
 C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-arial_31bf3856ad364e35_6.1.7601.17514_none_d0a9759ec3fa9e2d\*.ttf&lt;br /&gt;
&lt;br /&gt;
nach &lt;br /&gt;
&lt;br /&gt;
/usr/lib/jvm/java-8-openjdk-amd64/lib/fonts&lt;br /&gt;
&lt;br /&gt;
und starten dann Tomcat neu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Sorgen Sie dafür dass Sie eine Lizenz für die jew. Fonts haben, weil diese bei PDF in die ausgelieferten Dateien eingebettet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;font-extension&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-108&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Font Extension ===&lt;br /&gt;
&lt;br /&gt;
Eine Alternative zu dem Einbinden der Schriftart über das Java Verzeichnise Font Extension. Diese hat aber nicht immer funktioniert. Um auf diesem Wege die Fonts auf einem Ziel-Server einzubinden, kann man die Schriftart als Font Extension exportieren, die dann wiederum in den CLASSPATH des Servers (bei Webanwendungen WEB-INF/lib) kopiert werden müssen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nutzen Sie dazu den obigen Button &amp;amp;quot;Export as extension&amp;amp;quot;, und wählen Sie einen Dateinamen mit der Endung &amp;amp;quot;.jar&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: Die Einbettung einer Font Extension in einer JasperReports-Laufzeitumgebung klappt erst mit JasperReports 3.7.2 oder höher. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Wenn Sie in iReport auch PDF als Vorschau wählen, erzeugt iReport im Verzeichnis der jrxml-Datei auch eine entsprechende PDF-Datei. Damit diese die Fonts enthält, müssen Sie auch in iReport im CLASSPATH die Font-Extension einbinden. In diesem Falle ist es vorteilhaft, die Endung &amp;amp;quot;.jar&amp;amp;quot; (nicht &amp;amp;quot;.zip&amp;amp;quot;) zu wählen, weil iReport hier nur jar-Dateien einbindet.&lt;br /&gt;
&lt;br /&gt;
Noch ein Hinweis zu den Attributen &amp;amp;quot;PDF Font name&amp;amp;quot; und &amp;amp;quot;PDF Encoding&amp;amp;quot;: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Attribute werden nicht mehr ausgewertet, wenn Sie mit Font Extensions arbeiten. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfield-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-109&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;TextField-Formatierung ==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt werden verschiedene Einstellungen und Möglichkeiten der Formatierung in TextFields vorgestellt und erläutert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ausgabe-von-null-als-string-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-110&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ausgabe von &#039;&#039;&#039;NULL&#039;&#039;&#039; als &#039;&#039;&#039;String&#039;&#039;&#039; verhindern ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls NULL in einem TextField als String ausgeschrieben wird, kann dies verhindert werden, indem die Einstellung „Blank When NULL“ aktiviert wird. Das Feld bleibt dann leer:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_text_field_formatting.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-wörter-unterstreichen-oder-fett-drucken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-111&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Wörter unterstreichen oder fett drucken ===&lt;br /&gt;
&lt;br /&gt;
Wenn in einem TextField einzelne Wörter unterstrichen oder fett gedruckt werden sollen, einfach in den „Text properties“ unter „Markup“ „styled“ auswählen. In dem Textfield dann einfach um das zu unterstreichende Wort „&amp;amp;lt;u&amp;amp;gt; … &amp;amp;lt;/u&amp;amp;gt;“ schreiben oder „&amp;amp;lt;b&amp;amp;gt; … &amp;amp;lt;/b&amp;amp;gt;“ um es fett gedruckt auszugeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Bitte beachten, dass die PDF-Preview aus Jaspersoft Studio heraus keinen Fettdruck darstellt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;zahlen--und-datumsformat&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-112&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zahlen- und Datumsformat ===&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_textfield_pattern1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld bekommt das Pattern &amp;amp;quot;0&amp;amp;quot;, d.h. es wird eine Ganzzahl inkl. 0 angezeigt. Der Platzhalter &amp;amp;quot;#&amp;amp;quot; steht für Zahlenbestandteile, hier wird eine 0 allerdings nicht angezeigt. Weitere Zahlen- und Datumsformate sind im Assistenten (linker Teil des Screenshots) sicher selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-113&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ===&lt;br /&gt;
&lt;br /&gt;
Hat man pro Spalte / Zelle unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;#0;#0&amp;amp;quot; : &amp;amp;quot;###0.00;###0,00&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;effiziente-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-114&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Effiziente Formatierung ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keine Lust haben, jedes Textelement eines Berichts einzeln zu formatieren, empfehlen wir als ersten Schritt, Formatierungen zu kopieren. &lt;br /&gt;
&lt;br /&gt;
Im Kontextmenü jedes Elements gibt es die Menüpunkte &amp;amp;quot;Copy Format&amp;amp;quot; und &amp;amp;quot;Paste Format&amp;amp;quot;, die jeweils Formate kopieren und einfügen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_copy_format.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Hochschulen ist ein einheitliches Layout der Berichte wichtig, und so bietet es sich an, zentrale Layouts zu definieren und dann wiederzuverwenden. In JasperReports heißen Layouts auch &amp;amp;quot;Styles&amp;amp;quot; bzw. Formatvorlagen. Ähnlich wie in OpenOffice Writer oder MS Word lassen sich Formatvorlagen definieren und zuweisen. Bei Änderungen der Formatvorlage werden diese Änderungen auf alle Elemente automatisch übertragen - auch nachträglich. &lt;br /&gt;
&lt;br /&gt;
In der &amp;amp;quot;Styles Library&amp;amp;quot; werden z.B. einige häufig verwandte Layoutvorlagen angeboten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles_library.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Formate anwenden, indem Sie einfach die jew. Vorlage von der &amp;amp;quot;Styles Library&amp;amp;quot; per Drag and Drop auf das Ziel-Textfeld im Report Design ziehen und somit anwenden.&lt;br /&gt;
&lt;br /&gt;
 Sie können auch eigene Formatvorlagen zentral definieren. Im Menü Datei-&amp;amp;gt;New-&amp;amp;gt;Style geht es los: Wir erzeugen z.B. eine neue Style-Datei mit dem Namen &amp;amp;quot;meinLayout.jrtx&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_style_def_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jrtx-Datei definieren sie einen oder mehrere Formatvorlagen. Wir definieren z.B. die Formatvorlage &amp;amp;quot;Textelemente&amp;amp;quot;, und geben ihr die Eingenschaft &amp;amp;quot;SansSerif, Schriftgröße 12&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Danach können sie die Datei in der jrxml-Datei im Report Inspector unter &amp;amp;quot;Styles&amp;amp;quot; einbinden. Damit sind die Formatvorlagen in dieser Datei verfügbar, und können bei den Elementeigenschaften im Attribut &amp;amp;quot;Style&amp;amp;quot; zugewiesen werden: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styleref_design_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 JasperReports nimmt standardmäßig den absoluten Pfad der jrtx-Datei, in der XML-Quelle sollten Sie diesen Pfad auf relativ umstellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-styles-bedingte-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-115&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Conditional styles – &#039;&#039;&#039;Bedingte Formatierung&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man in einzelne Textfelder &amp;amp;quot;bedingte Formatierung&amp;amp;quot; nutzen will (z.B. farbiger Hintergrund, Fettdruck), hat man früher mehrere Textfelder einzeln angelegt, mit dem gleichen Inhalt und einer jeweiligen &amp;amp;quot;Print-when expression&amp;amp;quot;. Das geht seit JR 3.x eleganter mit den sog. &amp;amp;quot;Conditional styles&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Hierfür wird ein Style angelegt und diesem diverse „Conditional Styles“ untergeordnet. Die „Conditional Styles“ enthalten Bedingungen und Formatierungseinstellungen. Der Style kann beispielweise einem Textfeld übergeben werden. Sobald die Bedingung eines &amp;lt;span id=&amp;quot;anchor-116&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Conditional Styles“ erfüllt wird, werden die im „Conditional Style“ festgelegten Formatierungseinstellungen auf das Textfeld angewandt. Die Einstellungen im Textfeld selbst werden allerdings höher priorisiert. Eine detaillierte Erläuterung der Priorisierung anhand eines Beispiels findet sich in Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-jaspersoft-studio-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-117&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in JasperSoft Studio – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst legen Sie die Formatierungen an, indem Sie unter Styles die rechte Maustaste drücken und über „Create Style“ einen Style erstellen, beispielsweise &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch Rechtsklick auf &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039; wird über „Create Conditional Style“ ein neuer Conditional Style hinzugefügt. Es erscheint ein neuer Unterknoten &amp;amp;lt;No condition set&amp;amp;gt;. Über die Properties können anschließend die zu erfüllende Bedingung als Expression, beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-118&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;$F{Name}.equals(&amp;amp;quot;Summe Aktiva&amp;amp;quot;)||$F{Name}.equals(&amp;amp;quot;Summe Passiva&amp;amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
festgelegt und die Formatierungseinstellungen vorgenommen werden. In diesem Falle ist Fettschrift (bold) gewählt : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style4.png]]&lt;br /&gt;
&lt;br /&gt;
Um den Style inklusive seiner Conditional Styles auf beispielsweise ein Textfeld anzuwenden, werden die Properties des entsprechenden Feldes geöffnet. Im Reiter Appearance wird der gewünscht Style, in diesem Falle &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;,&#039;&#039;&#039; &#039;&#039;&#039;dem Textfeld zugeordnet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Die Reihenfolge wird direkt im XML oder per Drag&amp;amp;amp;Drop geändert.&lt;br /&gt;
&lt;br /&gt;
Es kam in der Vergangenheit bereits zu dem Phänomen, dass im Conditional Style Fettschrift gewählt war, aber nicht ins Textfeld übernommen wurde, während beispielsweise Kursivschrift problemlos und wie erwartet funktionierte. Eine genauere Beschreibung und Lösung findet sich im Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-ireport-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in iReport – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
Um z.B. einzelne Zeil&amp;lt;span id=&amp;quot;anchor-120&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;en nach einer Bedingung f&amp;lt;span id=&amp;quot;anchor-121&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;ett zu machen oder nicht kann man so vorgehen: &amp;lt;span id=&amp;quot;anchor-122&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zunächst legen Sie die Formatierungen an, indem Sie im Report Inspector unter Styles die rechte Maustaste drücken und ein Style hinzufügen, z.B. &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; für einen Style der Fett sein soll, wenn im Feld &#039;&#039;&#039;zw&#039;&#039;&#039; bestimmte Werte stehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-123&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Danach erzeugen Sie mit Rechtsklick auf &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; eine neue Bedingung mit „Hinzufügen von Conditional Style“. Bei dem neuen Unterknoten &amp;lt;span id=&amp;quot;anchor-124&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;No condition set&amp;amp;gt; klicken Sie auf die rechte Maustaste, dann Edit Condition. Hier können Sie wie gewohnt eine Bedingung in Form einer Expression eingeben, z.B. &lt;br /&gt;
&lt;br /&gt;
$F{Zweckbestimmung}.equals(&amp;lt;span id=&amp;quot;anchor-125&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Gesamtausgaben&amp;amp;quot;)||$F{Zweckbestimmung}.equals(&amp;lt;span id=&amp;quot;anchor-126&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Gesamteinnahmen&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Dann müssen Sie den neuen Conditional Style anklicken &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style.png]]&lt;br /&gt;
&lt;br /&gt;
und in den Eigenschaften bold auf true setzen.&lt;br /&gt;
&lt;br /&gt;
Dann wählt man im Report designer die Felder aus, die ggfs. fett dargestellt werden sollen, und bei den Eigenschaften als Style &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style2.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn man mit Padding arbeiten will, kann man für den Style padding angeben, muss aber anscheinend manuell im jrxml leftpadding entfernen&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;box topPadding=&amp;amp;quot;0&amp;amp;quot; &amp;lt;s&amp;gt;leftPadding=&amp;amp;quot;0&amp;amp;quot;&amp;lt;/s&amp;gt; bottomPadding=&amp;amp;quot;0&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-127&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Es gibt zwar einen Menüpunkt „Reihenfolge ändern“ bei rechtem Mausklick, der ist jedoch deaktiviert, man kann die Reihenfolge aber direkt im XML ändern oder per Drag&amp;amp;amp;Drop.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-128&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Leider kann man nicht einen conditionalstyle auf ein leere Zelle anwenden (z.B. Unterstrich), wenn man Excelexport macht, wird daraus einfach eine leere Zelle ohne Formatierung selbst wenn man Leerzeichen in der Text Expression hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden Variablen im conditional style verwendet, muss die evaluation time aktiviert werden über die property:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-129&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.style.evaluation.time.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
Siehe https://community.jaspersoft.com/blog/tip-data-set-variable-usage-conditional-style-table-component-jasper-reports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Style kann auch mit einem anderen Style verknüpft werden, indem in dem entsprechenden Style unter dem Reiter „Style“ in dem Feld „Style“ das entsprechende Style ausgewählt wird. Somit können bestimmte Wiederholungen gespart werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfeld-vs.-conditional-style-priorisierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-130&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-131&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Textfeld vs. Conditional Style – Priorisierung&amp;lt;span id=&amp;quot;anchor-132&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt wird anhand eines Beispiels aufgezeigt, dass Textfelder höher priorisiert sind als Conditional Styles und welche Fallstricke dadurch entstehen können. Das Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einem Textfeld wird ein Style zugeordnet, der einen Conditional Style enthält, welcher bei erfüllter Bedingung den Text fett und kursiv darstellen soll: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style6.png]]&lt;br /&gt;
&lt;br /&gt;
Im Textfeld selbst sind beide Einstellungen deaktiviert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style7.png]]&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist, dass im Bericht der Text dieses Feldes zwar kursiv, aber nicht fett dargestellt wird. Zum Testen werden weitere Formatierungseinstellungen im Conditional Style hinzugefügt, beispielsweise Unter- und Durchstreichen und auch dies wird umgesetzt. Die Bedingung des Conditional Styles ist also erfüllt. &lt;br /&gt;
&lt;br /&gt;
Der Grund für dieses Verhalten ist nur mit Blick auf den Source-Code ersichtlich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style8.png]]&lt;br /&gt;
&lt;br /&gt;
Dort findet sich in den Einstellungen des Textfeldes &#039;&#039;isBold=“false“&#039;&#039;. Dieses Fragment ist dadurch entstanden, dass in der Designoberfläche von JasperSoft Studio für das Textfeld die Einstellung bold einmal aktiviert und dann wieder deaktiviert wurde. Im Source-Code wird nach dem ersten Aktivieren &#039;&#039;isBold=“true“&#039;&#039; hinzugefügt und beim Deaktiveren nicht wieder komplett entfernt, sondern auf false gesetzt. Da die Einstellungen im Textfeld selbst höher priorisiert werden, als jene der Conditional Styles, wird der Fettdruck des Conditional Styles nicht umgesetzt. Löscht man im Source-Code das Fragment &#039;&#039;isBold=“false“&#039;&#039;, dann wird der im Conditional Style definierte Fettdruck umgesetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-style&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-133&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default Style ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen Style als Default Style zu verwenden. Hierfür wird beim Style, nicht beim Conditional Style, die entsprechende Einstellung gesetzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style9.png]]&lt;br /&gt;
&lt;br /&gt;
Dieser Style wird nun auf jedes Feld angewandt, dem kein anderer Style zugeordnet ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;expression-editor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-134&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Expression Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Expression Editor werden die für die Ausgabe bestimmten Werte angegeben. Zahlen werden ohne Zusatz eingetragen. Feste String Werte werden zwischen Anführungszeichen gesetzt. Felder und Variablen können über ein Doppelklick auf den jeweiligen Namen unterhalb des Eingabefeldes eingefügt werden. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Zu den Feldern und Variablen gibt es auch noch Funktionen in dem 3. unterem Kästchen. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für Textausgabe:&lt;br /&gt;
&lt;br /&gt;
Es soll ausgegeben werden „Auswertungszeitraum 1.1.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt; bis 31.12.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt;“.&lt;br /&gt;
&lt;br /&gt;
Anstatt zwei statische Textfelder und zwei dynamische zu machen, legt man eine Expression an:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Auswertungszeitraum: 1.1.&amp;amp;quot;+$F{legende_Jahr_value}+&amp;amp;quot; bis 31.12.&amp;amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Der Clou an JasperReports ist: da das Programm auf der Programmiersprache Java beruht, kann man in Expressions echten Java Code einfügen bzw. um eigenen Java Code erweitern. Wenn Sie z.B. wissen dass das benutzte Feld &amp;amp;quot;$F{Lehr- und Forschungsbereich}&amp;amp;quot; vom Typ String ist, können Sie alle in Java eingebauten String Funktionen benutzen, z. B. Substring, contains, indexOf, toLowerCase etc. Analog auch für andere Datentypen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedingungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-135&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedingungen ===&lt;br /&gt;
&lt;br /&gt;
Bedingungen sind in dem Expression Editor auch möglich. Wenn z.B. eine Variable nur Ausgegeben werden soll, wenn der Wert größer, kleiner oder gleich einem anderem vorgegebenen Wert oder Variable sein soll, wird folgende Syntax verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;Bedingung&amp;amp;gt;&amp;amp;gt; ? &amp;amp;lt;&amp;amp;lt;&amp;lt;span id=&amp;quot;anchor-136&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ausgabe wenn Bedingung wahr&amp;amp;gt;&amp;amp;gt; : &amp;amp;lt;&amp;amp;lt;Ausgabe wenn Bedingung falsch&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bedingungen:&lt;br /&gt;
&lt;br /&gt;
String1 == String2&lt;br /&gt;
&lt;br /&gt;
String1 != String2&lt;br /&gt;
&lt;br /&gt;
Nummer1 &amp;amp;gt; Nummer2&lt;br /&gt;
&lt;br /&gt;
String1.contains( String2 )&lt;br /&gt;
&lt;br /&gt;
String1 == null&lt;br /&gt;
&lt;br /&gt;
usw.&lt;br /&gt;
&lt;br /&gt;
Wie oben angegeben: Wenn die Bedingung wahr ist, wird der Wert nach dem Fragezeichen genommen. Wenn die Bedingung falsch ist, wird der Wert nach dem Doppelpunkt genommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-zeichenketten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-137&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Zeichenketten ===&lt;br /&gt;
&lt;br /&gt;
Häufig werden für Berichtsausgaben Zeichenketten manipuliert. Dadurch, daß JasperReports innerhalb der Java-Runtime läuft, stehen uns mächtige Methodenaufrufe zur Verfügung, die in Java schon eingebaut sind. &lt;br /&gt;
&lt;br /&gt;
Für Zeichenketten hier eine Übersicht:&lt;br /&gt;
&lt;br /&gt;
 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-datumsfeldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-138&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Datumsfeldern ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datumswerte-aggregieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-139&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datumswerte aggregieren ====&lt;br /&gt;
&lt;br /&gt;
Fürs Berichtsdesign auf aggregierter Ebene ist es oft praktisch, Datumswerte auf &amp;amp;quot;grobere&amp;amp;quot; Kategorien zu aggregieren, z.B. Monate, Quartale, oder Jahre. Um solche Werte auszugeben bzw. danach zu gruppieren können Sie eigene Variablen anlegen, die dann im Expression Editor mit Hilfe von Java berechnet werden. Hier ein Beispiel für eine Transformation vom Datum zur Einheit &amp;amp;quot;Jahr-Monat&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
(($F{Datum}.getYear()+1900)*100)+($F{Datum}.getMonth()+1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn wir annehmen, dass im Feld &amp;amp;quot;Datum&amp;amp;quot; ein Datums- oder Zeitstempel-Wert steht, dann wird über die o.g. Expression daraus ein Zahlenwert nach dem Muster Jahr (vierstellig) + Monat (zweistellig), z.B. für den 13.5.2013 würde daraus der Wert 201305. Nach diesem ganzzahligen Wert kann man dann sortieren und gruppieren. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Anmerkung: die o.g. Methoden getYear() und getMonth() sind seit einigen Jahren in Java &amp;amp;quot;deprecated&amp;amp;quot;, d.h. sie könnten in zukünftigen Java Versionen entfallen. Aber da dies in den letzten 7 Jahren nicht passiert ist, können wir damit noch arbeiten und optimistisch sein. Falls die Methoden wirklich entfernt werden, muss man eigene statische Methoden mit dem in Java eingebauten Calender-Objekt erstellen, Codebeispiele dazu gibt es viele im WWW.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wenn man Text &amp;amp;quot;Erzeugungsdatum&amp;amp;quot; und das Datum in einem Feld haben will geht so:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-140&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Erzeugungsdatum:&amp;amp;quot;+new SimpleDateFormat(&amp;amp;quot;dd.MM.YYYY&amp;amp;quot;, Locale.GERMAN).format(new java.util.Date()) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeichenketten-zum-datumstyp-konvertieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-141&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeichenketten zum Datumstyp konvertieren ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Datum als String-Feld geliefert bekommen, können Sie es mit Groovy zum Typen &amp;amp;quot;java.util.Date&amp;amp;quot; konvertieren, z.B. um danach zu sortieren. Wenn z.B. das Feld „Beginn“ den Typ String hat und gefüllt ist mit dem Wert &amp;amp;quot;18.11.2020 18:05:00&amp;amp;quot;, dann können Sie eine Variable vom Typ java.util.Date erzeugen, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
Date.parse(&amp;amp;quot;dd.MM.yyyy hh:mm:ss&amp;amp;quot;, $F{Beginn})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-workarounds&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-142&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Besonderheiten / Workarounds ===&lt;br /&gt;
&lt;br /&gt;
* Bei Feldern mit Länge 1 klappte einfaches equals nicht, mit einer substring Anweisung geht es dann:&lt;br /&gt;
&lt;br /&gt;
$F{legende_Art des Berichts_value}.substring(0,1).equals(&amp;amp;quot;B&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;anchor-143&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Folgejahr berechnen: Selbst es das Feld Jahr gibt und es als Integer definiert ist in der Felderinfo, klappt der Bericht nur in JasperReports nicht in SuperX nicht wenn man schreibt:&amp;lt;br /&amp;gt;&lt;br /&gt;
$F{legende_Jahr_value}.intValue()+1&amp;lt;br /&amp;gt;&lt;br /&gt;
geht nicht, statt dessen:&amp;lt;br /&amp;gt;&lt;br /&gt;
new Integer($F{legende_Jahr_value}).intValue()+1&lt;br /&gt;
* Statt das Element table zu nutzen kann man auch manuell eine Tabelle erzeugen, in dem man per Rechtsklick auf ein Element Padding und Borders bearbeitet. Siehe http://www.youtube.com/watch?v=LbU6qTj3zQM&lt;br /&gt;
* Achten muss man dann darauf, dass Felder die Null sein können nicht „remove when blank“ haben und als TextFieldExpression besser nehmen: $F{Betrag}==null?&amp;amp;quot; &amp;amp;quot;:$F{Betrag}&lt;br /&gt;
* außerdem, wenn die erste Spalte einen stretch with overflow hat auch bei „stretch type“ „relative to tallest object“ einstellen &lt;br /&gt;
* Zeilenumbruch in Feld&amp;lt;br /&amp;gt;&lt;br /&gt;
Markup auf html setzen und dann z.B. &amp;amp;quot;Plan&#039;&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;br&amp;amp;gt;&#039;&#039;&#039;&#039;&#039;&#039;&amp;amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;häufig-benötigte-transformationen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-144&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Häufig benötigte Transformationen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-tid-in-namen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-145&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester-tid in Namen ====&lt;br /&gt;
&lt;br /&gt;
$V{Semester (Schlüssel)}.toString().endsWith(&amp;amp;quot;1&amp;amp;quot;)?(&amp;amp;quot;SS &amp;amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)):(&amp;amp;quot;WS &amp;amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)+&amp;amp;quot;/&amp;amp;quot;+(new Integer($V{Semester (Schlüssel)}.toString().substring(0,4))+1).toString())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-in-akad.-jahr&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-146&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester in akad. Jahr ====&lt;br /&gt;
&lt;br /&gt;
Die folgende Formel formt die Semesterzahl aus dem Studierenden-Datenblatt in ein akad. Jahr um nach der Formel &amp;amp;quot;Akad. Jahr=WS + darauf folgendes SS&amp;amp;quot;, z.B. WS 2009/2010 und SS 2010 werden zum akad. Jahr 2009:&lt;br /&gt;
&lt;br /&gt;
$F{Semester der Belegung (Schlüssel)}.toString().endsWith(&amp;amp;quot;2&amp;amp;quot;) ? $F{Semester der Belegung (Schlüssel)}.toString().substring(0,4):(new Integer($F{Semester der Belegung (Schlüssel)}.toString().substring(0,4))-1).toString() &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formel nimmt beim WS die ersten vier Stellen des Semester-Schlüssels, und beim SS werden die ersten vier Stellen als Ganzzahl codiert, und dann wird 1 subtrahiert.&lt;br /&gt;
&lt;br /&gt;
Da es diverse Definitionen von Akad. Jahr / Studienjahr / Prüfungsjahr gibt, kann man das obige Beispiel leicht für eigene Bedürfnisse abwandeln.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-147&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-148&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ==&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hat man allerdings unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;#0;#0&amp;amp;quot; : &amp;amp;quot;###0.00;###0,00&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fortgeschrittene-techniken-bei-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-149&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fortgeschrittene Techniken bei Feldern ==&lt;br /&gt;
&lt;br /&gt;
Textfelder enthalten standardmäßig nur den Feldnamen, aber die zugrunde liegenden [[#2.9.Expression Editor|outline|Ausdrücke]] lassen sich erweitern. Dabei kann auch alle Java Klassen zugegriffen werden, die sich im CLASSPATH befinden, z.B. [[#2.9.2.Umgang mit Zeichenketten|outline|java.lang.String]]. &lt;br /&gt;
&lt;br /&gt;
Hier ist ein Beispiel, in dem die Klasse &amp;amp;quot;StringBuilder&amp;amp;quot; (wird mit Java ausgeliefert , java.lang.StringBuilder) genutzt wird, um einen Text auszugeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Beispiel verdeutlicht: Man könnte da auch de.meineKlasse.erzeugeText(&amp;amp;quot;mein Text&amp;amp;quot;) schreiben, und diese Klasse dann in den CLASSPATH bei Jasper Start legen, und voila! Durch diese Funktionalität lassen sich also beliebige Java Klassen einbinden. Das gleiche geht übrigens auch mit Groovy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einrücken-von-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-150&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einrücken von Feldern ==&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Feldern macht man am besten, in dem man mehrere Textfelder definiert und jeweils eine printWhenExpression auf die Ebene einbaut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativer Versuch war folgendes:&lt;br /&gt;
&lt;br /&gt;
Wobei Nachteil bei sehr langen Texten, bei denen strech with overflows zur Geltung kommt, dann die zweite Zeile nicht eingerückt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Felder kann man für Textfelder (Strings) machen, indem der SuperX-Bericht eine Spalte einruecken definiert, der je nach gewünschter Einrückung eine Anzahl von x enthält, also z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| Betrag&lt;br /&gt;
| Einrücken&lt;br /&gt;
|-&lt;br /&gt;
| 1. Überschrift&lt;br /&gt;
| 30000&lt;br /&gt;
| X (mindestens 1 x nötig)&lt;br /&gt;
|-&lt;br /&gt;
| 1.1 Unterüberschrift&lt;br /&gt;
| 15000&lt;br /&gt;
| Xxxxx&lt;br /&gt;
|-&lt;br /&gt;
| 1.3. UnterUnterübersichrift&lt;br /&gt;
| 3000&lt;br /&gt;
| xxxxxxxxx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann kann man ein Textfeld erzeugen und bei TextFieldExpression einfach eintragen:&lt;br /&gt;
&lt;br /&gt;
$F{Einruecken}.replace(&#039;x&#039;,&#039; &#039;)+$F{Name}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Zahlfelder (z.B. Double) geht das so nicht so gut, weil dann das Pattern der Darstellung ###0,00 nicht mehr greift.&lt;br /&gt;
&lt;br /&gt;
Man definiert drei Felder nebeneinander, Beispiel:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| $F{Name}&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;gt;=6&lt;br /&gt;
&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;lt;6&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bei Ebene 1-5 wird ganz rechts ausgegeben, bei Ebene &amp;amp;gt;=6 wird mittig ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-151&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen ==&lt;br /&gt;
&lt;br /&gt;
Bei Berechnungen muss immer auch auf (ich nenne es mal) die Gültigkeit der Variable geachtet werden. Wenn eine Variable eine Summe bildet kann diese für z.B. „jetzt“ oder für eine Gruppe oder den ganzen Report gelten. Je nach Gültigkeit gilt z.B. die Summe nur für die aktuelle Gruppe (bei Gruppenbändern). &lt;br /&gt;
&lt;br /&gt;
Achtung: Es gibt nicht nur eine Gültigkeit bei der Variable selber (Reset type) sondern auch bei dem Element in dem Bericht. Wenn eine Variable in den Bericht gezogen wird, besitzt das entstandene Element eigene Eigenschaften, bei dem dann die „Evulation Time“ eingestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;prozentrechnung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-152&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Prozentrechnung ===&lt;br /&gt;
&lt;br /&gt;
Für die Prozentrechnung musst zuerst eine Variable z.B. mit dem Namen &amp;amp;quot;Gesamt&amp;amp;quot; anlegen mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Calculation = Sum&lt;br /&gt;
&lt;br /&gt;
Reset type = Report&lt;br /&gt;
&lt;br /&gt;
Dannach kann ein Textfeld mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
$F{Summe} / $V{Gesamt}&lt;br /&gt;
&lt;br /&gt;
erstellt werden mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Expression Class = Double&lt;br /&gt;
&lt;br /&gt;
Pattern = #.##0.00 % (kannst du unter Prozent auswählen)&lt;br /&gt;
&lt;br /&gt;
Evaluation Time = Auto &lt;br /&gt;
&lt;br /&gt;
In der Variable „Gesamt“ wird die Summe aus allen Werten des Feldes Summe gezogen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Prozentberechnungen in Grafiken muss in manchen Fällen der Wert auf 0 überprüft werden. Das kann man z.B. mit folgendem Code machen:&lt;br /&gt;
&lt;br /&gt;
( $V{zahl1} == 0 || $V{zahl2} == 0 ? 0 : ( $V{zahl1} / $V{zahl1} * 100) )&lt;br /&gt;
&lt;br /&gt;
Damit ist dann sichergestellt, dass es keine Probleme bei der Berechnung gibt, auch wenn die Zahlen mal leer sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rundung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-153&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rundung ===&lt;br /&gt;
&lt;br /&gt;
Wenn man runden möchte den Datentyp am besten auf BigDecimal stellen. Ansonsten wird schon mal aus 2,45 gerundet 2,4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hyperlinks&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-154&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hyperlinks ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;externe-links&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-155&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Externe Links ===&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld kann auch als Hyperlink befüllt und ausgegeben werden. Vorab bemerkt: Hyperlinks funktionieren in internen Viewer von JasperSoft Studio sowie beim Export nach Excel nicht bzw. nur eingeschränkt, zumindestens wenn man POI als Excel Engine nutzt. Selbst wenn Hyperlinks ausgegeben werden, ist in den Sicherheitseinstellungen von Excel oder OpenOffice eine Änderung vorzunehmen, damit Hyperlinks auch aktiv sind. Da es hier komplexte Unterschiede bei MS Excel-/OpenOffice-Versionen gibt, haben wir das Thema nicht weiter verfolgt und raten davon ab.&lt;br /&gt;
&lt;br /&gt;
In den anderen üblichen Ausgabeformaten (PDF, HTML) funktionieren die Hyperlinks.&lt;br /&gt;
&lt;br /&gt;
Dabei gibt es zwei Varianten:&lt;br /&gt;
&lt;br /&gt;
Das Textfeld hat als Markup Typ den Wert &amp;amp;quot;html&amp;amp;quot;, und die Hyperlinks werden in HTML-Notation eingefügt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier der Quellcode der textField-Expression zum Kopieren:&lt;br /&gt;
&lt;br /&gt;
$V{Gross_Forsch_Proj_Sprech}.replaceAll( &amp;amp;quot;\n&amp;amp;quot;,&amp;amp;quot;&amp;amp;lt;br /&amp;amp;gt;&amp;amp;quot; )+&amp;amp;quot;&amp;amp;lt;a href=\&amp;amp;quot;http://www.meinserver.de/url/\&amp;amp;quot;&amp;amp;gt;Siehe Details&amp;amp;lt;/a&amp;amp;gt;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Variante 2 erhält ein ReportElement im Quellcode die entsprechende Eigenschaft. In der von uns genutzten Version von JasperSoft Studio (6.5.1 final) war das noch nicht im GUI bearbeitbar, daher kann man das nur im Quelltext machen. Immerhin &amp;amp;quot;zerstört&amp;amp;quot; JasperSoft Studio dies beim Speichern nicht. &lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft des textField heißt hyperlinkType=&amp;amp;quot;Reference&amp;amp;quot; und wird wie folgt belegt:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;textField pattern=&amp;amp;quot;&amp;amp;quot; isBlankWhenNull=&amp;amp;quot;true&amp;amp;quot; &#039;&#039;&#039;hyperlinkType=&amp;amp;quot;Reference&amp;amp;quot;&#039;&#039;&#039;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;reportElement mode=&amp;amp;quot;Opaque&amp;amp;quot; x=&amp;amp;quot;363&amp;amp;quot; y=&amp;amp;quot;22&amp;amp;quot; width=&amp;amp;quot;259&amp;amp;quot; height=&amp;amp;quot;22&amp;amp;quot; forecolor=&amp;amp;quot;#000000&amp;amp;quot; backcolor=&amp;amp;quot;#FFFFFF&amp;amp;quot; uuid=&amp;amp;quot;48c8e2df-f231-4433-8836-309668e0a859&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;printWhenExpression&amp;amp;gt;&amp;amp;lt;![CDATA[$V{Gross_Forsch_Proj_Sprech}.length() &amp;amp;gt;100]]&amp;amp;gt;&amp;amp;lt;/printWhenExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/reportElement&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;box&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;pen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;topPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;leftPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;bottomPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;rightPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/box&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;textElement textAlignment=&amp;amp;quot;Left&amp;amp;quot; verticalAlignment=&amp;amp;quot;Middle&amp;amp;quot; rotation=&amp;amp;quot;None&amp;amp;quot; markup=&amp;amp;quot;html&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;font fontName=&amp;amp;quot;SansSerif&amp;amp;quot; size=&amp;amp;quot;6&amp;amp;quot; isBold=&amp;amp;quot;false&amp;amp;quot; isItalic=&amp;amp;quot;false&amp;amp;quot; isUnderline=&amp;amp;quot;false&amp;amp;quot; isStrikeThrough=&amp;amp;quot;false&amp;amp;quot; pdfEncoding=&amp;amp;quot;Cp1252&amp;amp;quot; isPdfEmbedded=&amp;amp;quot;false&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;paragraph lineSpacing=&amp;amp;quot;Single&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/textElement&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;textFieldExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;amp;quot;Siehe Details&amp;amp;quot;]]&amp;amp;gt;&amp;amp;lt;/textFieldExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;&amp;amp;lt;hyperlinkReferenceExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;amp;quot;http://meinserver/url&amp;amp;quot;]]&amp;amp;gt;&amp;amp;lt;/hyperlinkReferenceExpression&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;/textField&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des textField wird dann im Element hyperlinkReferenceExpression das Ziel des Hyperlinks definiert. Da dies eine Expression ist, kann man die Hyperlinks auch dynamisch aufbauen. In der Ausgabe dies das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pdf.png]]&lt;br /&gt;
&lt;br /&gt;
Je nach PDF Viewer muss man auch hier in den Sicherheitseinstellungen Hyperlinks aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;interne-linksanker&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-156&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Interne Links/Anker ===&lt;br /&gt;
&lt;br /&gt;
Auf einem Text Field kann ein Link eingetragen werden. Dafür muss man einfach mit der rechten Maustaste auf das Textfeld klicken und dann auf Hyperlink klicken. &lt;br /&gt;
&lt;br /&gt;
Das erste Feld oben &amp;lt;span id=&amp;quot;anchor-157&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Anchor Name Expression“ kann einen Text enthalten, auf den von einer anderen Stelle verwiesen werden kann. Es ist also eine Markierung. &lt;br /&gt;
&lt;br /&gt;
Wenn ich einen Hyperlink Type wähle, kann ich auch Verweise in den generierten Bericht erzeugen. Z.B. kann ich hier den Type „LocalAnchor“ wählen.&lt;br /&gt;
&lt;br /&gt;
Um z.B. ein Inhaltsverzeichnis zu erzeigen, welches im PDF bei klick auf ein Element dort hin springen soll, gehe ich zunächst zu der Stelle an der die Sprungmarke gesetzt werden soll und erzeuge dort ein Text Field mit der „Anchor Name Expression“ z.B. „Überschrift1“. Das Inhaltsverzeichnis muss dann auch aus Text Fields erzeugt werden und dort wähle ich dann bei Hyperlink type „LocalAnchor“. Nun habe ich unter der Auswahl von dem Hyperlink type ein neues Eingabefeld „Hyperlink Anchor Expression“. Dort trage ich jetzt exakt den gleichen Text „Überschrift1“ ein und im generierten PDF kann ich dort drauf klicken um an die Markierte Stelle zu kommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichts-properties-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-158&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichts-Properties setzen ==&lt;br /&gt;
&lt;br /&gt;
Es gibt auf Berichtsebene die Möglichkeit, die Ausgabe der Berichte über sog. &amp;amp;quot;Properties&amp;amp;quot; zu steuern, teilweise auch formatspezifisch. So können Sie z.B. steuern, daß bei der Ausgabe nach Excel Zahlenfelder als Zahlenfelder ausgegeben werden, nicht als Textfelder. &lt;br /&gt;
&lt;br /&gt;
Um die Berichts-Properties zu setzen, können Sie dies entweder für einzelne Berichte, order auch Server-weit einstellen.&lt;br /&gt;
&lt;br /&gt;
Bei einzelnen Berichten gehen Sie im Report Inspector auf das oberste Element, und dort auf &amp;amp;quot;Eigenschaften&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
Sie erhalten dann eine Liste der Eigenschaften: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Dort können Sie Zeilen hinzufügen, bearbeiten und löschen. Eine Erläuterung der jew. Property erhalten Sie in dem jew. Dialog.&lt;br /&gt;
&lt;br /&gt;
Um eine Property systemweit zu speichern, legen Sie eine Textdatei mit dem Namen &amp;amp;quot;jasperreports.properties&amp;amp;quot; an, und legen diese in den CLASSPATH. Im Kontext von Tomcat ist dies das Verzeichnis webapps/superx/WEB-INF/classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenlayout&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-159&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenlayout ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-160&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Typen von Seitenumbrüchen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wenn der gesamte Bericht paginiert ist (Report-Eigenschaft &amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;false&amp;amp;quot;), berechnet JR aufgrund des Seitenformats die Seitenumbrüche automatisch, und fügt auch, sofern vorhanden, die Bänder &amp;amp;quot;page header&amp;amp;quot; und &amp;amp;quot;page footer&amp;amp;quot; hinzu.&lt;br /&gt;
* Bei eingeschalteten Eigenschaften des jew. Bandes &amp;amp;quot;Start on a new page=true&amp;amp;quot; werden Seitenumbrüche ebenfalls aufgeführt&lt;br /&gt;
* Es gibt für manuelle Seitenumbrüche in der Palette das Element &amp;amp;quot;Break&amp;amp;quot;, das an beliebiger Stelle einen manuellen Seitenumbruch einfügt. Nun ist die Frage: wenn gesamte Bericht nicht paginiert ist (&amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot;), was dann bei einem Break passieren soll. In älteren JR Versionen (vor 4.8) wurde der Break trotzdem gesetzt. In Versionen ab 4.8 passiert das nicht mehr, man kann aber ab Version 5.1 über die Berichts-Property&amp;lt;br /&amp;gt;&lt;br /&gt;
net.sf.jasperreports.page.break.no.pagination=apply&amp;lt;br /&amp;gt;&lt;br /&gt;
das alte Verhalten nachbilden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 In JasperSoft Studio oder iReport kann man zusätzlich noch beim Rendern des Berichts über den Parameter JRParameter.&amp;lt;span id=&amp;quot;anchor-161&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;IS_IGNORE_PAGINATION steuern, ob Seitenumbrüche ausgeführt werden. Dies überlagert die Berichtseinstellung, wenn es angehakt ist. Das ist z.B. sinnvoll, wenn Sie im PDF Export Seitenumbrüche haben wollen, in Excel oder HTML aber nicht. &lt;br /&gt;
&lt;br /&gt;
Leider kann man diesen Parameter nicht im Servlet setzen. Wenn Sie Seitenkopf/Fuß bei PDF wünschen, bei Excel aber nicht, nutzen Sie die Anleitung [[#2.21.5.Seitenkopf und Seitenfuß bei Excel unterdrücken|outline|unten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten, wie sich das Detailband bei einem Seitenumbruch verhalten soll. Diese werden über den ‚Split Type‘ des Bandes gesteuert. Beispiel: &lt;br /&gt;
&lt;br /&gt;
Bei einem Seitenumbruch wird die aktuelle Zeile des Detailbandes aufgeteilt und geht auf der nächsten Seite weiter. Der ‚Split Type‘ steht auf Stretch.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_011.png|642x170px]]&lt;br /&gt;
&lt;br /&gt;
Falls erwünscht ist, dass jede Zeile ganz dargestellt wird, kann der ‚Split Type‘ auf Prevent gestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_012.png|300x281px]]Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_013.png|642x223px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-höhe-von-textfeldern-dynamisch-anpassen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-162&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-163&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die Höhe von Textfeldern dynamisch anpassen ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Textfelder besitzen die Eigenschaft „Stretch With Overflow“. Wird diese aktiviert, passt das Textfeld dynamisch seine Größe, falls der Inhalt nicht in das Feld passt. Der Text bricht um und die Höhe des Feldes wird vergrößert. Damit auch alle anderen Felder derselben Zeile ihre Größe entsprechend anpassen wird der „Stretch Type“ aller Felder dieser Zeile auf „Relative To Tallest Object (deprecated)“ gesetzt. Die Felder passen ihre Höhe dann dem höchsten Feld dieser Zeile an. Im Detailband genügt dies. Für Bänder mit festgelegter Zeilenanzahl, wie beispielsweise dem Titelband ist eine weitere Einstellung vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
Um im Titelband die Funktion „Stretch With Overflow“ nutzen zu können, ist es notwendig allen Feldern in darunterliegenden Zeilen den „Position Type“ „Float“ zuzuweisen. Die Position der Felder verändedrt sich dann entsprechend der Höhe darüberliegender Felder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bericht-ausgeben-ohne-dateninput&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-164&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bericht ausgeben, ohne Dateninput ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Bericht bzw. das Layout mit Titelband etc. ausgegeben werden soll, obwohl es keine Daten gibt, dann wird die Funktion ‚When No Data Type‘ auf ‚All Sections No Detail‘ gestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_014.png|336x374px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-beim-export-nach-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Besonderheiten beim Export nach Excel  ==&lt;br /&gt;
&lt;br /&gt;
Für jedes Exportformat gibt es auf Berichtsebene bzw. darunter spezielle Properties, die Feinheiten des Zielformates festlegen. Dies wird im folgenden anhand des Excel-Exports von Formeln und Namen von Arbeitsblättern (Sheet-Names) gezeigt.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass diese Hinweise für den &amp;amp;quot;alten&amp;amp;quot; Excel Export (&amp;amp;quot;xls&amp;amp;quot;) gelten. Für die Exportformate xlsx, JExcel-API oder OpenOffice-Spreadsheets funktionieren diese teilweise nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-165&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um leere Zeilen im Excelexport zu vermeiden, im jrxml-Kopf:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.collapse.row.span&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.remove.empty.space.between.columns&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-166&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-167&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-168&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.remove.empty.space.between.rows&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
wenn man Zahlenanpassung möchte&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
  → font wird ggfs. verkleinert&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.print.keep.full.text&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-formeln&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-169&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-170&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Formeln ===&lt;br /&gt;
&lt;br /&gt;
Es gibt auch die Möglichkeit Zahlen nicht nur vorab zu berechnen, sondern beim Export nach Excel als Excel-Formel zu übergeben. &lt;br /&gt;
&lt;br /&gt;
Um diese Funktion zu aktivieren muss im JRXML die Property mit folgender Zeile eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder über die Report Properties:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können in jedem Text Field in der Property expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type2.png]]&lt;br /&gt;
&lt;br /&gt;
folgende Einträge ergänzt werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type3.png]]&lt;br /&gt;
&lt;br /&gt;
Rechts neben &amp;lt;span id=&amp;quot;anchor-171&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-172&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.formula wird die Formel für Excel eingetragen, allerdings ohne = am Anfang. Außerdem werden nicht alle Excel-Formeln unterstützt, insbesondere nicht deren deutsche Lokalisierung (z.B. oben SUMME(D119...). Details finden Sie in der [https://poi.apache.org/spreadsheet/formula.html POI]-Dokumentation. Um zu erfahren wie die Felder lauten, welche berechnet werden sollen, am besten den Bericht einmal ausführen und in Excel anzeigen lassen. Achtung: Wenn der Bericht noch bearbeitet wird, können sich die Felder noch verändern.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;span id=&amp;quot;anchor-173&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-174&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-175&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-176&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.pattern können speziell für Excel Formatangaben gemacht werden. In dem obigen Beispiel &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-177&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-178&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;#,##0.00;-#,##0.00&amp;amp;quot; gibt es 2 Nachkommastellen und ein Tausender-Trennzeichen. Wenn z.B. Tausende von Euro angezeigt werden sollen, nimmt man als Pattern #. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Fallstrick: in der von uns getesteten Version (4.1.3) wurde die Property net.sf.jasperreports.export.xls.formula nur dann ausgewertet, wenn das das jew. Textfeld eine korrekte &amp;amp;quot;Text field expression&amp;amp;quot; hat, sie darf also nicht leer sein. Ob das ein Bug ist oder nicht ist uns derzeit unklar.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beispiel für eine komplexe Summenformel SUM(D7:D20,D28,D33,D40)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann die Formel auch als Expression formulieren, z.b. um eine Division durch 0 zu verhindern. Setzen Sie dazu das Häkchen bei &amp;amp;quot;Use an expression&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excelformula_expression.png]]&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel führt die Formel &amp;amp;quot;D91/D149&amp;amp;quot; nur aus, wenn die Variable $V{Haush_Professoren_1} (die Quelle für die Zelle D149) einen Wert größer 0 hat. Wenn nicht, wird keine Formel reingeschrieben, sondern der Wert 0. &lt;br /&gt;
&lt;br /&gt;
Diese Funktion bietet natürlich noch viel mehr Möglichkeiten, z.B. könnte man damit Excel-Zellennummern dynamisch berechnen etc. Beispiele dazu finden Sie in den JasperReport Demos in demo/samples/xlsformula/reports/XlsFormulaReport.jrxml. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilennummern-dynamisch-berechnen-ein-beispiel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-179&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilennummern dynamisch berechnen (Ein Beispiel) ====&lt;br /&gt;
&lt;br /&gt;
Will man dass in der gesamten Exceldatei immer Spalte F=D+E ist, braucht man nicht für jede Zeile feste Formeln eintragen.&lt;br /&gt;
&lt;br /&gt;
Als Erstes schaut man in welcher Zeile die eigentlichen Daten anfangen, also z.B. nach den zwei Headerzeilen ganz am Anfang der Tabelle und den 3 Spaltenüberschriften, die pro Seite wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel&lt;br /&gt;
&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||($F{Soll}==null&amp;amp;amp;&amp;amp;amp;$F{Reste}==null))?&amp;amp;quot;&amp;amp;quot;:&amp;lt;span id=&amp;quot;anchor-180&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;SUM(D&amp;amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+&amp;lt;span id=&amp;quot;anchor-181&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;$V{REPORT_COUNT}.intValue()+2)+&amp;amp;quot;,E&amp;amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+$V{REPORT_COUNT}.intValue()+2)+&amp;amp;quot;)&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Elegant geht es auch so&lt;br /&gt;
&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||&amp;lt;span id=&amp;quot;anchor-182&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;($F{Soll}==null&amp;amp;amp;&amp;amp;amp;$F{Reste}==null))?&amp;amp;quot;&amp;amp;quot;:&amp;lt;span id=&amp;quot;anchor-183&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-184&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-185&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;INDIRECT(\&amp;amp;quot;D\&amp;amp;quot; &amp;amp;amp; ROW())+INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das hat nur den Nachteil, dass die Formel in Excel nicht so schön ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;wenn-if-formel-ein-fallstrick&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-186&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;WENN-/IF-Formel – &#039;&#039;&#039;Ein&#039;&#039;&#039; Fallstrick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick, der uns einige Stunden Arbeitzeit gekostet hat: die IF-Formel wird in OpenOffice und MS Excel mit dem Trennzeichen &amp;amp;quot;;&amp;amp;quot; für die THEN- und ELSE-Bedingung formuliert. JasperReports nutzt als Trennzeichen aber &amp;amp;quot;,&amp;amp;quot;. Interessanterweise wird dann im fertigen Excel das &amp;amp;quot;,&amp;amp;quot; als &amp;amp;quot;;&amp;amp;quot; angezeigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sumif-summen-mit-bedingungen-bsp.-zwischensummen-ignorieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-187&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-188&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;SUMIF – Summen mit Bedingungen (Bsp.: Zwischensummen ignorieren) ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn die Summe über einen großen Bereich gezogen werden soll, in dem auch Zwischensummen vorkommen, gibt es die Folgende Formel:&lt;br /&gt;
&lt;br /&gt;
SUMIF(A&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:A&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;,\&amp;amp;quot;&amp;amp;lt;&amp;amp;gt;Summe*\&amp;amp;quot;,B&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:B&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Wenn die Zwischensummen mit addiert werden würden, wäre das Ergebnis doppelt so hoch wie es sein sollte. Die Funktion SUMIF beinhaltet 3 Bereiche. Zuerst wird der Bereich eingegeben, auf den die Bedingung angewendet wird:&lt;br /&gt;
&lt;br /&gt;
A&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:A&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von A1 bis A10. &lt;br /&gt;
&lt;br /&gt;
Danach kommt die Bedingung:&lt;br /&gt;
&lt;br /&gt;
\&amp;amp;quot;&amp;amp;lt;&amp;amp;gt;Summe*\&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, es werden alle Zeilen genommen, die &#039;&#039;&#039;&#039;&#039;NICHT&#039;&#039;&#039;&#039;&#039; mit „Summe“ anfangen.&lt;br /&gt;
&lt;br /&gt;
Als letztes kommt der Bereich, der summiert werden soll:&lt;br /&gt;
&lt;br /&gt;
B&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:B&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von B1 bis B10. &lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel werden alle Zahlen zwischen B1 und B10 aufsummiert, wenn in der entsprechenden Zeile in der Spalte A der Text nicht mit „Summe“ beginnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;statt-0-werten-eine-leere-zelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-189&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-190&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Statt 0-Werten eine leere Zelle ausgeben ====&lt;br /&gt;
&lt;br /&gt;
Im Standardfall wird eine 0 ausgegeben, falls eine Formel in Excel auf leere Zellen oder Zellen mit einer 0 verweist. Um stattdessen eine leere Zelle auszugeben wird die Property Property net.sf.jasperreports.export.xls.pattern genutzt. Das obige Beispiel wird erweitert:&lt;br /&gt;
&lt;br /&gt;
###0.00;-###0.00;;@&lt;br /&gt;
&lt;br /&gt;
Die jeweiligen Zellen weisen nun 2 Nachkommastellen aus und zudem werden 0-Werte nicht mehr angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;openoffice-vs-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-191&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;OpenOffice vs Excel&amp;lt;span id=&amp;quot;anchor-192&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
OpenOffice kommt mit folgender Berechnung klar&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())+INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW())-INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW())-INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW())&amp;amp;quot;:&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Excel macht hier Ärger, wenn eine der Zellen Null ist, wird als Gesamtergebnis #WERT angezeigt, entweder Sum-Formel benutzen, oder noch mal mit IF prüfen, ob Zelle gefüllt ist&lt;br /&gt;
&lt;br /&gt;
Struktur ist (IF(Zelle leer,0,sonst Zellenwert))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;IF(INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW()))+IF(INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW()))-IF(INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW()))-IF(INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW()))&amp;amp;quot;:&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;stretch-with-overflow-in-excel-korrekt-verarbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-193&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Stretch with Overflow‘ in Excel korrekt verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine Zelle haben mit besonders langem Text, z.B. „Unterstützungen auf Grund der Unterstützungsgrundsätze, Fürsorgemaßnahmen sowie Kosten nach dem Arbeitssicherheitsgesetz“, hilft es, nur bei der Zelle, Line Spacing auf double zu setzen, dann sieht es in Excel besser aus.&lt;br /&gt;
&lt;br /&gt;
Es wird das Stretch richtig verarbeitet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span id=&amp;quot;anchor-194&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ verkleinert fonts bei bedarf&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.print.keep.full.text&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pagination-in-excel-dokumenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-195&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pagination in Excel-Dokumenten ===&lt;br /&gt;
&lt;br /&gt;
In Excel-Dokumenten in die Seitengröße naturgemäß irrelevant. Trotzdem wird das im jrxml gesetzte Seitenformat beim Excel-Export beachtet. Das stellt sich so dar, dass im Excel-Dokument der „Rest der Seite“ durch einzelne breitere beziehungsweise höhere Zellen gefüllt wird. Das sieht beispielsweise folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter dem Tabellenschluss ist die Zeile 84 so hoch, dass die im jrxml eingestellte Seitenhöhe erreicht ist. Um das zu verhindern wird für den gesamten Bericht &amp;lt;span id=&amp;quot;anchor-196&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;isIgnorePagination=“true“ gesetzt. Die Einstellung wird im source-Code ganz oben im Tag &amp;amp;lt;jasperReport isIgnorePagination=“true“&amp;amp;gt; gesetzt oder über die grafische Oberfläche:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-export-in-einzelne-tabellenblätter&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-197&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Export in einzelne Tabellenblätter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normalerweise werden beim Export nach Excel die Berichtsinhalte in das erste Tabellenblatt geschrieben. Je nachdem wie Sie auf Berichtsebene die Property net.sf.jasperreports.export.xls.one.page.per.sheet setzen, wird der Seitenumbruch gesteuert. Setzen Sie den Wert auf &amp;amp;quot;true&amp;amp;quot;, dann führt jeder Seitenumbruch zu einem neuen Sheet bzw. Arbeitsblatt in der Excel-Datei. Standardmäßig werden diese dann &amp;amp;quot;Page 1&amp;amp;quot;, Page 2&amp;amp;quot; etc. benannt. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Namen der Sheets explizit vergeben wollen, können Sie dies wie folgt machen: Wenn Sie z.B. die Berichtsproperty net.sf.jasperreports.export.xls.sheet.names.all auf den Wert &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Hauptseite/wichtige Seite/Unwichtige Seite&amp;amp;quot; setzen, bekommen Sie drei Sheets mit den jew. Namen, d.h. der &amp;amp;quot;/&amp;amp;quot; fungiert als Trennzeichen. Dementsprechend sollte im Namen des Sheets kein &amp;amp;quot;/&amp;amp;quot; auftauchen.&lt;br /&gt;
&lt;br /&gt;
Seit JR 4.1 gibt es auch die Möglichkeit, die Sheetnamen dynamisch zu vergeben. Auch hier werden Properties mit Expressions genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten Berichtsinhalte in verschiedene Excel-Tabellenblätter zu verteilen. Im Folgenden werden zunächst Möglichkeiten betrachtet, welche bei Einzelberichten in Frage kommen. Danach geht es um die klassische Haupt- und Unterberichtsstruktur und zuletzt um Booklets, welche die in den meisten Fällen wohl elegantere Alternative zu klassichen Haupt- und Unterberichten darstellen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-berichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-198&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Berichte ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben einen Bericht mit der Gruppierung auf die Spalte &amp;amp;quot;LFB&amp;amp;quot;, im Gruppenkopf befindet sich ein Text Field mit der Expression $F{LFB}.&lt;br /&gt;
&lt;br /&gt;
Sie können diesem Textfeld eine Property net.sf.jasperreports.export.xls.sheet.name geben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names.png]]&lt;br /&gt;
&lt;br /&gt;
Das Textfeld erhält somit beim Füllen des Berichts den jew. Wert, z.B. &amp;amp;quot;Anglistik, Amerikanistik&amp;amp;quot;, und diese Überschrift steht auch im Gruppenkopf. Wenn der Gruppenkopf das Attribut &amp;amp;quot;Start on a new page&amp;amp;quot; hat, dann beginnt der Gruppenkopf auf einer neuen Seite und, dank der Berichts-Property net.sf.jasperreports.export.xls.one.page.per.sheet , erzeugt Excel / OpenOffice dann ein neues Sheet mit dem Namen Anglistik, Amerikanistik. Beim Sheetnamen soll nur sichergestellt werden, dass kein &amp;amp;quot;/&amp;amp;quot; im Text vorkommt, daher der replace-Befehl zur Sicherheit. Hier ein Screenshot in OpenOffice:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann das gesamte Verhalten auch deaktivieren, indem man auf Berichtsebene das Attribut &amp;amp;quot;Ignore Pagination&amp;amp;quot; auf &amp;amp;quot;true&amp;amp;quot; setzen. In diesem Falle werden alle Seitenumbrüche ignoriert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis für SuperX/Edustore Nutzer: leider haben wir in älteren Kernmodul-Versionen dieses Attribut &amp;amp;quot; Ignore Pagination&amp;amp;quot; im Servlet fest auf &amp;amp;quot;true&amp;amp;quot; gesetzt, so dass Sie diese Funktion im Servlet erst ab Version SuperX 4.5 bzw. HISinOne-BI 7.0 nutzen können.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;haupt--und-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-199&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haupt- und Unterberichte ====&lt;br /&gt;
&lt;br /&gt;
Das vorherige Kapitel hat aufgezeigt, wie innerhalb eines einzelnen Einzelberichtes mit gezieltem setzen von Seitenumbrüchen ein solcher Berichte auf verschiedene Tabellenblätter eines Excel-Dokumentes augeteilt wird.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Einzelberichte in einem Excel-Dokument gesondert auf verschiedene Tabellenblätter aufzuteilen eignen sich klassiche Haupt- und Unterberichtsstrukturen (vgl. Kapitel 3.5). Die simpelste Methode wäre das Seitenlayout eines Berichtes so groß zu wählen, dass der gesamte Bericht auf eine Seite passt. &lt;br /&gt;
&lt;br /&gt;
Falls Haupt- und Unterberichte verwendet werden, darauf achten, dass der Hauptbericht direkt unter dem letzten Unterberichtselement endet. Ansonsten entsteht ein weiteres leeres Tabellenblatt. Der folgende Screenshot zeigt, wie es nicht sein sollte. Hier muss das Summary-Band verkleinert werden, sodass es mit dem Unterberichtselement endet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_main-_subreport.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;individuelle-gestaltung-bei-booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-200&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Individuelle Gestaltung&#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-201&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; bei Booklets ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Booklets bieten diverse Vorteile beim Gestalten der einzelnen Seiten beziehungsweise Sheets. Denn jeder Unterbericht kann hier individuell formatiert werden. Dies betrifft beispielsweise die Definition von Sheetnamen, da hierfür die Eigenschaft &amp;amp;quot;Tab name expression&amp;amp;quot; im &amp;amp;quot;Buch&amp;amp;quot;-[[#2.8.1.Hauptbericht im Booklet|outline|Bericht]] vorgesehen ist. Auch das Problem, dass ein Sheet in diesem Falle nicht mehrere Seite umfassen darf (und man somit die Seitengröße unrealistisch groß machen muss) ist damit behoben.&lt;br /&gt;
&lt;br /&gt;
Eine Ausnahme stellen jedoch die Properties dar. Diese werden im Hauptbericht gesetzt und gelten für alle Unterberichte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-drucklayout-in-excel-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-202&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das Drucklayout in Excel konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenränder-und-kopfzeile-im-drucklayout-formatieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-203&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Seitenränder und Kopfzeile im Drucklayout formatieren&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Anlegen eines Textes in der Kopfzeile gibt es die Properties&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-204&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.left&amp;amp;quot;&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je nach gewünschter Position wird der jeweiligen Property ein Wert übergeben. Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;![CDATA[&amp;lt;span id=&amp;quot;anchor-205&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-206&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;10&amp;lt;span id=&amp;quot;anchor-207&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Meldung der Ist-Besetzung]]&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;/property&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;![CDATA[&amp;lt;span id=&amp;quot;anchor-208&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;amp;amp;10&amp;lt;span id=&amp;quot;anchor-209&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Anlage 1 &amp;lt;span id=&amp;quot;anchor-210&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Regular&amp;amp;quot;&amp;amp;amp;10 (zu VwV HWiF 3.2.1)]]&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;/property&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird zentral der Text „&#039;&#039;&#039;Meldung der Ist-Besetzung&#039;&#039;&#039;“ übergeben. Der Text ist in der Schriftart Liberation Sans und fettgedruckt formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;), sowie in Schriftgröße 10 (&amp;amp;amp;10).&lt;br /&gt;
&lt;br /&gt;
Rechts wird der Text „&amp;lt;span id=&amp;quot;anchor-211&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Anlage 1 &#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-212&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;(zu VwV HwiF 3.2.1)“ verwandt. Der erste Teile „&#039;&#039;&#039;Anlage 1&#039;&#039;&#039;“ ist wie der zentrale Text formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;amp;amp;10). Für den zweiten Teil „(zu VwV HwiF 3.2.1)“ wird von Fett- auf Regulärdruck gewechselt (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Regular&amp;amp;quot;&amp;amp;amp;10). Weitere Möglichkeiten zur Formatierung finden sich auf https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/extensions/XSSFHeaderFooter.html.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit die Kopfzeile im Drucklayout sichtbar ist, ist es notwendig den Seitenrand groß genug zu gestalten. Dafür werden folgende Properties genutzt:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.left.margin&amp;amp;quot; value=&amp;amp;quot;20&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.right.margin&amp;amp;quot; value=&amp;amp;quot;20&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.top.margin&amp;amp;quot; value=&amp;amp;quot;40&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.bottom.margin&amp;amp;quot; value=&amp;amp;quot;10&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;vordefinierte-zeilen-im-drucklayout-auf-jeder-seite-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-213&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Vordefinierte Zeilen im Drucklayout auf jeder Seite wiederholen ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um im Drucklayout beispielsweise einen Tabellenkopf auf jeder Seite zu wiederholen, wird die Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-214&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-215&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sx_repeating.rows.range&amp;amp;quot; &amp;lt;span id=&amp;quot;anchor-216&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-217&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;value=&amp;amp;quot;3:7&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
genutzt (dafür eigene Klasse de.superx.servlet.SxJRXlsExporter geschaffen und de.superx.servlet.JasperCreator angepasst – aktuell in NHS-Pack für 7.1 enthalten). Der Wert gibt an, welche Zeilen des Excel-Dokumentes im Drucklayout auf jeder Seite wiederholt werden. Im Beispiel (&#039;&#039;value=&amp;amp;quot;3:7&amp;amp;quot;&#039;&#039;) sind die Zeilen 3 bis 7 betroffen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-im-drucklayout-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-218&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche im Drucklayout verhindern ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teilweise ist es wünschenswert Seitenumbrüche im Drucklayout zu verhindern, sowohl in der Breite als auch in der Höhe. Hierfür werden die Properties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.fit.width&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.fit.height&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
genutzt. Also value kommen hier 1 und 0 für entweder true oder false infrage. Setzt man der Wert true, dann wird nicht umgebrochen. Das bedeutet für dieses Beispiel, dass der gesamte Inhalt des Excel-Dokuments auf eine Seite gedruckt würde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-verbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-219&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellen verbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.export.xls.sx_cell_merge&amp;amp;quot; value=&amp;amp;quot;0,6,0,7|1,2,3,4&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
1,1,4,1 - will merge from B2 to E2. Remember it is zero based indexing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellschutz-aktivieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-220&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellschutz aktivieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.password&amp;amp;quot; value=&amp;amp;quot;gmmmyflb&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ Alle Zellen sind mit Passwort geschützt.&lt;br /&gt;
&lt;br /&gt;
Wenn bestimmte Spalten/Zeilen nicht geschützt sein sollen:&lt;br /&gt;
&lt;br /&gt;
Property net.sf.jasperreports.export.xls.cell.locked  false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies kann man auch über eine komplexe PropertyExpression steuern, z.B.&lt;br /&gt;
&lt;br /&gt;
(&lt;br /&gt;
&lt;br /&gt;
($F{Zeile}!=null&amp;amp;amp;&amp;amp;amp;(&lt;br /&gt;
&lt;br /&gt;
  $F{Zeile}.indexOf(&amp;amp;quot;A&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.indexOf(&amp;amp;quot;B&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.indexOf(&amp;amp;quot;C&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;I.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;II.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;III.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;IV.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;V.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VI.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VII.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VIII.&amp;amp;quot;)))||&lt;br /&gt;
&lt;br /&gt;
($F{Kontengruppe}!=null&amp;amp;amp;&amp;amp;amp;$F{Kontengruppe}.equals(&amp;amp;quot;53,54,58&amp;amp;quot;))||&lt;br /&gt;
&lt;br /&gt;
($F{Name}!=null&amp;amp;amp;&amp;amp;amp;(&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe der (ordentlichen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Ordentliche &amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;- ordentliche&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;+/- Finanz&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Investitionen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Finanzbedarf&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Deckung&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;5.1 E&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe sonstige betriebl&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Sonstige betriebliche&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;5.1.) Erträge aus Zuweisungen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Materialaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe Materialaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Personalaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe Personalaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Sonstige betriebliche Aufwendungen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe sonstige betriebliche Aufwendungen&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
))?&amp;amp;quot;true&amp;amp;quot;:&amp;amp;quot;false&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-fixieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Zellen fixieren ===&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio können Sie festlegen, dass beim Excel-Export bestimmte Zeilen und Spalten fixiert werden, indem Sie spezielle Eigenschaften für den Export konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Um Zeilen und Spalten in Excel zu fixieren, müssen Sie die Eigenschaften &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;net.sf.jasperreports.export.xls.freeze.row &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
und &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;net.sf.jasperreports.export.xls.freeze.column&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
konfigurieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie möchten, dass die erste Zeile und die erste Spalte fixiert werden:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;net.sf.jasperreports.export.xls.freeze.row = 2&#039;&#039;&lt;br /&gt;
* &#039;&#039;net.sf.jasperreports.export.xls.freeze.column = B&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nach dem Export werden in Excel die erste Zeile und die erste Spalte fixiert, und der Rest des Arbeitsblatts bleibt scrollbar.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.freeze.column&amp;amp;quot; value=&amp;amp;quot;B&amp;amp;quot;/&amp;amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.freeze.row&amp;amp;quot; value=&amp;amp;quot;2&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hintergrund--oder-textfarben-beim-excel-export&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-221&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-222&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hintergrund- oder Textfarben beim Excel-Export ===&lt;br /&gt;
&lt;br /&gt;
Beim Excel Export werden Zellen, die ein Rechteck mit einer Print-When-Expression zugewiesen bekommen haben, u.U. nicht richtig wiedergegeben, während es beim PDF Export klappt. Um dies zu beheben müssen Sie&lt;br /&gt;
&lt;br /&gt;
1. den Farbraum beim Excel Export erweitern: Excel unterstützt bei Hintergrund- oder Vordergrundfarben nur wenige [http://dmcritchie.mvps.org/excel/colors.htm Farbcodes]. Für spezielle Farben nach RGB-Wert muss die Berichts-property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-223&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.create.custom.palette&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
gesetzet werden (benötigt Bibliothek org-netbeans-core.jar im Classpath der Anwendung)&lt;br /&gt;
&lt;br /&gt;
2. Statt farbiger Textfelder oder Rechtecke mit &amp;amp;quot;Print-When-Expression&amp;amp;quot; müssen Sie [[#2.11.Conditional styles - Zeilen fett machen|outline|Conditional Styles]] nutzen.&lt;br /&gt;
&lt;br /&gt;
3. Wenn Sie mit Hintergrundfarben arbeiten, müssen die Textfelder und die jew. Styles die Eigenschaft &amp;amp;quot;Opaque&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
4. Beim Export nach Excel müssen Sie das JExcelApi nutzen. Dies ist bei SuperX seit Kernmodul 4.5 der Standard, bei HISinOne-BI seit Version 7.1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenkopf-und-seitenfuß-bei-excel-unterdrücken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-224&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenkopf und Seitenfuß bei Excel unterdrücken ===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr Bericht normalerweise ein Band &amp;amp;quot;Page Header&amp;amp;quot; bzw. &amp;amp;quot;Page Footer&amp;amp;quot; hat, können Sie dies beim Exportformat XLS unterdrücken (z.B. wenn Sie dort keine Seitenzahlen wünschen, bei PDF aber schon).&lt;br /&gt;
&lt;br /&gt;
Setzen Sie dazu die Berichts-Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-225&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-226&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.1&amp;amp;quot; value=&amp;amp;quot;pageHeader&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.2&amp;amp;quot; value=&amp;amp;quot;pageFooter&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Ausgabeformat XLSX heißen die Properties:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.1&amp;amp;quot; value=&amp;amp;quot;pageHeader&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.2&amp;amp;quot; value=&amp;amp;quot;pageFooter&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies klappt ab JR Version 4.5, sie können diese Properties aber lediglich im XML-Quellcode hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;dimension-tausend-euro&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-227&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dimension Tausend-Euro  ==&lt;br /&gt;
&lt;br /&gt;
In Excel als Dimension Tausend-Euro ausgeben, mit zwei Nachkommastellen&lt;br /&gt;
&lt;br /&gt;
In Deutschem Excel bei manueller Angabe benutzerdefiniertes Format #.##0,00.&lt;br /&gt;
&lt;br /&gt;
In Jasper muss Amerikanische Vorlage sein:&lt;br /&gt;
&lt;br /&gt;
-&amp;amp;gt; #,##0.00&lt;br /&gt;
&lt;br /&gt;
Bei Excel kann man als Property Expresion net.sf.jasperreports.export.xls.pattern z.B. nehmen&lt;br /&gt;
&lt;br /&gt;
#, → zeigt nur Tausender Werte an&lt;br /&gt;
&lt;br /&gt;
#,##0.00, → zeigt Tausernder Werte, mit zwei Nachkommastellen an&lt;br /&gt;
&lt;br /&gt;
der Werte selber ist einfach &amp;lt;span id=&amp;quot;anchor-228&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;$F{Soll}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei PDF/HTML muss man den Wert duch 1000 teilen $F{Soll}.doubleValue()/1000&lt;br /&gt;
&lt;br /&gt;
und dann als Pattern z.B. #,##0.00;-#,##0.00&lt;br /&gt;
&lt;br /&gt;
Die Rundung macht das Pattern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-229&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung in Edustore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsentwicklung-bei-grunddaten-und-basisberichten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-230&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsentwicklung bei Grunddaten und Basisberichten ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemein&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-231&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemein ===&lt;br /&gt;
&lt;br /&gt;
In den Grunddaten- und Basisberichten kann man beliebige Ergebnistabellen lokal als XML speichern, und dann als Datenquelle in JasperReports einbinden. Dann kann man den Bericht lokal gestalten, und, wenn er fertig ist, in die Weboberfläche einhängen. Die XML Datei wird nur für die Testausgabe bei JasperReports verwendet und dient als Ersatz der Datenbank. Wenn der Bericht in der Weboberfläche eingehängt ist, wird dieser direkt mit frischen Daten versorgt.&lt;br /&gt;
&lt;br /&gt;
Für die Folgenden 2 Punkte „Datenquelle erzeugen“ und „Template erzeugen“ gibt es [http://www.superx-projekt.de/doku/benutzerhandbuch/movies/jasper_erzeugen.viewlet/jasper_erzeugen_viewlet_swf.html hier] einen Kurzfilm.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_vergleich_jrxml_xml_zusammen.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-232&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Ergebnistabelle eines Berichtes vorliegt, erhält man über den XML Export von SuperX die Datenquelle für den Jasper Report. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man lokal ab: Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine xml-Datei abspeichern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls der Tomcat in ISO Kodierung läuft, muss für JasperReports in der ersten Zeile bei encoding ein UTF-8 eingetragen werden. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;ISO-8859-1&amp;amp;quot;?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird ersetzt mit:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot;?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In JasperReports sind dann folgende Schritte zu tun, um die neue Datenquelle einzubinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-233&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Die Datenquellen heißen hier &amp;amp;quot;Data Adapters&amp;amp;quot; und werden im Repository hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie JasperSoft in Ihrem vorhandenen Eclipse als Plugin installiert haben, sehen Sie den Reiter &amp;amp;quot;Repository&amp;amp;quot; nicht; in diesem Fall liegen die Data Adapter im jew. Projekt. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Assistenten geben Sie XML-Document als Datentyp an, und im nächsten Reiter spezifizieren Sie das Format:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Datumsformat ist bei Edustore das deutsche Schema &amp;amp;quot;dd.MM.yyyy&amp;amp;quot;, und das Zahlenformat ist eine Zahl mit 6 Nachkommastellen und &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner, also &amp;amp;quot;#0.######&amp;amp;quot;. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist auch das Ankreuzfeld &amp;amp;quot;Use the report Xpath expression&amp;amp;quot;, dies müssen Sie immer ankreuzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-234&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in iReport ====&lt;br /&gt;
&lt;br /&gt;
Klick auf „Report Datasources“. Es öffnet sich ein Fenster, in dem die vorhandenen Datenquellen angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Fenster Klickt man auf „New“ um eine neue Datenquelle anzulegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wählt man „XML file datasource“ aus und klickt auf „Weiter“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt wählt man einen Eindeutigen Namen aus, der auch später in dem Dropdown Menü erscheint, gibt den Dateipfad an und ändert die restlichen Einstellungen wie im Screenshot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formate für Datum und Nummer müssen angegeben werden, da sonst die amerikanischen angenommen werden. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: in JasperReports 3.7.1 werden trotz des korrekten Zahlenformats die Dezimalstellen von Beträgen immer mit &amp;amp;quot;,00&amp;amp;quot; wiedergegeben. Dies liegt an der &amp;amp;quot;Locale&amp;amp;quot;, man muss diese auf &amp;amp;quot;Englisch&amp;amp;quot; umstellen. Das Problem ist allerdings: sobald man das macht, kann man die XML-Datenquelle in der Datenquellenverwaltung nicht mehr ändern, d.h. man muss sie bei Änderungen löschen und neu einfügen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Nach dem Speichern erscheint die Datenquelle im dropdown Menü und kann ausgewählt werden. Damit man die Datenquelle nutzen kann, braucht man auch noch ein Template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-235&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Um ein leeres Template zu erzeugen, geht man wieder in die Ergebnistabelle der selben Maske, deren Datenquelle erstellt wurde, wählt im Dropdown Menü neben „Bericht entwerfen“ „Leerer Bericht“ aus und klickt auf das Icon daneben „Export als JasperReport-Template“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-leeren_Bericht_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man Lokal ab. Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine jrxml Datei abspeichern. JR in der Endung jrxml steht für JasperReports. Damit können die Datenquellen und die Templates unterschieden werden und sogar den selben Dateinamen tragen (nur unterschiedliche Dateiendung).&lt;br /&gt;
&lt;br /&gt;
Sie sollten es sich nicht zumuten und versuchen über JasperReports einen neuen Bericht zu entwerfen. Nehmen Sie immer den &amp;amp;quot;leeren&amp;amp;quot; Bericht aus der entsprechende Maske, da dort sehr viele Kleinigkeiten voreingestellt sind. Sie sparen sich damit immens viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-236&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template einbinden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reportdesign-verlinken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-237&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reportdesign verlinken ====&lt;br /&gt;
&lt;br /&gt;
Um das erstellte Template einzubinden, muss zunächst die jrxml Datei in das Verzeichnis webapps/superx/WEB-INF/reports kopiert werden. Danach muss das Stylesheet im System bekannt gegeben werden. In Grunddaten und Basisberichte geht man dazu in „Administration“ → „Masken“ → „Stylesheet suchen“ und schickt die Maske so ab. Danach klickt man bei einem beliebigen Stylesheet auf den „bearbeiten“ Button ganz rechts in der Tabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klickt dann auf „Neuen Datensatz erzeugen“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Dateiname kommt der Dateiname der jrxml Datei rein, welche sich in dem reports Ordner befindet. Beschriftung und Beschreibung sollte eindeutig dem Stylesheet zuzuordnen sein. Für JasperReport wählt man bei „Tabelle oder Maske“ „Stylesheet für eine Ergebnistabelle“ aus. Der Dateityp stellt das default Ausgabeformat fest.&lt;br /&gt;
&lt;br /&gt;
Um dieses Stylesheet nun einer Maske zuzuordnen, geht man in die Maske „Administration“ → „Masken“ → „Maske suchen“, sucht in dem Feld „Maske“ die gewünschte Maske aus und klickt dann auf „Abschicken“. Nun klickt man auf den Button Stylesheets neben der Maske, der das neue Stylesheet zugeordnet werden soll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem neuen Fenster wählt man das neu erstellte Stylesheet aus und speichert diese Einstellung ab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Bericht der Maske zugeordnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Normal wird im Servlet direkt vom Berichtsergebnis nach JasperReports übergeben, d.h. ohne den Zwischenweg XML. Wenn aber im Dateinamen *_xmlsource.jrxml steht, wird Datenquelle XML erzwungen (für Makroberichte, Unterberichte, Subdatasets oder spezielle XPATH-Selektionen wichtig).&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-des-upload-servlets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-238&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung des Upload Servlets ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keinen Schreibzugriff auf den Ordner &#039;&#039;WEB-INF/reports&#039;&#039; haben, können Sie auch Templates über das [http://www.superx-projekt.de/doku/kern_modul/admin/f_Anpassungderwebxml.htm Upload Servlet ]direkt im Browser hochladen. Dazu müssen Sie in der web.xml die Dateiendungen .jrxml und (sofern benötigt) .jasper erlauben, siehe obiger Link.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie die Report Templates hochladen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload1.png]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Upload können Sie das Template zunächst registrieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload2.png]]&lt;br /&gt;
&lt;br /&gt;
und dann der jew. Maske zuordnen. &amp;lt;span id=&amp;quot;anchor-239&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beachten Sie, dass der Pfadname relativ zum Ordner WEB-INF/reports angegeben wird, also in der Regel&lt;br /&gt;
&lt;br /&gt;
../../default/custom&lt;br /&gt;
&lt;br /&gt;
bzw. beim Mandantenbetrieb&lt;br /&gt;
&lt;br /&gt;
../../Mandant-ID/custom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;probleme-beim-deployment-im-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-240&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Probleme beim Deployment im Server ====&lt;br /&gt;
&lt;br /&gt;
Es kann u.U. beim Deployment eines Berichts im Server das Problem auftreten, daß ein Bericht im lokalen iReport mit der XML-Datenquelle funktioniert, aber im Server für einzelne Merkmale kein Ergebnis geliefert wird. Dies hat folgende Ursache:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;feldnamen-im-berichtsdesign-weichen-vom-datenbank-feldnamen-ab&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-241&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Feldnamen im Berichtsdesign weichen vom Datenbank-Feldnamen ab  =====&lt;br /&gt;
&lt;br /&gt;
Bei der lokalen Entwicklung in iReport werden die Berichte mit der Datenquelle XML erzeugt. In den Muster-JRXML-Dateien, die man über das Feld &amp;amp;quot;Bericht erzeugen&amp;amp;quot; generiert, sind die Felder über die folgende Notation deklariert:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;field name=&amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;fieldDescription&amp;amp;gt;&amp;amp;lt;![CDATA[col[@id=&amp;amp;quot;4&amp;amp;quot; and wert!=&amp;amp;quot;&amp;amp;quot;]/wert]]&amp;amp;gt;&amp;amp;lt;/fieldDescription&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/field&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-242&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dies bedeutet: Das Feld &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot; hat den Typ &amp;amp;quot;String&amp;amp;quot; und befindet sich im XML-Datenstrom in der vierten Spalte (col@id=4). Dabei befindet sich in Datenblattberichten im Spaltennamen immer ein &amp;amp;quot;\n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot;, um einen Zeilenumbruch im generischen Standardlayout zu erzeugen. Dieses &amp;amp;quot;\n&amp;amp;quot; wird dann für iReport und JasperReports automatisch durch ein Leerzeichen ersetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn die XML-Datenquelle nicht verändert wird, dann ist das Feld immer mit dem gleichen Inhalt gefüllt. &lt;br /&gt;
&lt;br /&gt;
Wenn man den Bericht dann auf den Server kopiert und einbindet, ohne im Dateinamen &amp;amp;quot;_xmlsource&amp;amp;quot; zu verwenden, dann wird das Feld nicht über die Spaltennummer identifiziert, sondern über den Feldnamen, hier z.B. &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot;. Das bedeutet, daß der Server genau diesen Feldnamen zurückliefern muss. Das kann u.U. abweichen:&lt;br /&gt;
&lt;br /&gt;
* Der Server bzw. die zugrunde liegende Maske wurde verändert, so daß der Feldname geringfügig anders ist. Das sollte eigentlich nicht passieren, kann aber vorkommen.&lt;br /&gt;
* Beim Betrieb in HISinOne gibt es in allen Versionen bis 3.02 noch eine kleine Veränderung, wenn das Modul des zugrunde liegenden Datenblattberichts bzw. der Maske direkt per Tomcat-Start installiert wurde, und nicht in dem Edustore-Installation/Upgrade-Menü. Wenn die Module beim Tomcat Start in eine leere Datenbank installiert werden, dann werden Zeichenketten mit dem Feldinhalt &amp;amp;quot;\n&amp;amp;quot; verfremdet nach &amp;amp;quot;n&amp;amp;quot; (also der &amp;amp;quot;\&amp;amp;quot; wird entfernt). Das führt dann dazu, daß das Feld ohne den &amp;amp;quot;\&amp;amp;quot; in der jrxml-Datei deklariert wird, also z.B.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;field name=&amp;amp;quot;Fakultät/Fachbereichn(Schlüssel)&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;fieldDescription&amp;amp;gt;&amp;amp;lt;![CDATA[col[@id=&amp;amp;quot;4&amp;amp;quot; and wert!=&amp;amp;quot;&amp;amp;quot;]/wert]]&amp;amp;gt;&amp;amp;lt;/fieldDescription&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/field&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-243&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wenn man danach dann einen Upgrade der jew. Komponente ausführt, dann wird die Spalte in der Maske umbenannt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039;\n&#039;&#039;&#039;(Schlüssel)&amp;amp;quot; und der Feldname korrekt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039; &#039;&#039;&#039;(Schlüssel)&amp;amp;quot; umgesetzt. Durch das &amp;amp;quot;n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot; paßt der Feldname in der jrxml-Datei nicht mehr zum Ergebnis aus der Datenbank, und das Feld ist leer. So kann es passieren, daß ein Bericht in iReport funktioniert, im Server aber nicht. Im folgenden die Lösung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;korrektur-der-feldnamen-im-berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-244&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Korrektur der Feldnamen im Berichtsdesign =====&lt;br /&gt;
&lt;br /&gt;
Um sicherzustellen, dass der Feldname der jrxml-Datei mit der jeweils aktuell benutzten Datenbank-Version übereinstimmt, geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
* Erzeugen Sie in Edustore eine HTML-Ausgabe der zugrunde liegenden Abfrage, bei Datenblatt-Berichten ist dies das &amp;amp;quot;generische Standardlayout&amp;amp;quot;.&lt;br /&gt;
* Klicken Sie dann oben im Berichtskopf auf den Button &amp;amp;quot;Bericht entwerfen&amp;amp;quot; -&amp;amp;gt; &amp;amp;quot;leerer Bericht&amp;amp;quot; &lt;br /&gt;
* Im Quellcode sehen Sie die Zeilen &amp;amp;lt;field name=&amp;amp;quot;Berichtsname&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt; ... Hier ist jedes einzelne Feld aus der Datenbank deklariert.&lt;br /&gt;
* Markieren Sie alle Zeilen bis zum letzten &amp;amp;quot;&amp;amp;lt;field...&amp;amp;gt;&amp;amp;quot;-Element, i.d.R. ist dies das Feld &amp;amp;lt;field name=&amp;amp;quot;user&amp;amp;quot;..., und kopieren Sie dies in die Zwischenablage&lt;br /&gt;
* Öffnen Sie die jrxml-Datei mit einem UTF-8-fähigen Editor, z.B. Jedit.&lt;br /&gt;
* Ersetzen Sie genau die &amp;amp;quot;&amp;amp;lt;field...&amp;amp;quot;-Passage aus der Zwischenablage.&lt;br /&gt;
* Speichern Sie den Bericht, und testen Sie die Vorschau in JasperReports. Wahrscheinlich kommt eine Fehlermeldung &amp;amp;quot;Field ... does not exist&amp;amp;quot; o.ä., dann müssen Sie das Feld mit Suchen-&amp;amp;gt;Ersetzen umbenennen.&lt;br /&gt;
* Das machen Sie so lange, bis die Vorschau funktioniert. Danach können Sie die jrxml-Datei wieder auf den Server kopieren. Die Felddeklaration passt dann zum Server. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zuordnung-von-default-feldbelegungen-zu-stylesheets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-245&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zuordnung von Default-Feldbelegungen zu Stylesheets ==&lt;br /&gt;
&lt;br /&gt;
Es können für Stylesheets Default-Feldbelegungen für Stylesheets hinterlegt werden. Hintergrund dieser Funktion ist, dass bei speziellen Stylesheets standardmäßig beliebig viele Spalten vorbelegt werden können. In Datenblattberichten gibt es z.B. das Feld &amp;amp;quot;Felder&amp;amp;quot;, in dem die auszugebenden Spalten angegeben werden. Aus Performancegründen sollten nur die Spalten ausgegeben werden, die auch benötigt werden. So kann dann z.B.für JasperReport Stylesheets hinterlegt werden können, welche Spalten auf jeden Fall benötigt werden. Der Anwender weiß nicht welche Spalten benötigt werden und würde im Normalfall alle Spalten ausgeben lassen um keine Fehlermeldung zu erhalten. Dadurch würde aber wiederum der Bericht unnötig lange dauern, da alle Spalten berechnet werden müssen, auch die, welche nicht benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Stylesheet erstellt haben und dieses in SuperX eingebunden haben gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie gehen in die Maske &amp;amp;quot;Administration -&amp;amp;gt; Tabelle suchen&amp;amp;quot;, geben dort bei Stichwort &amp;amp;quot;stylesheet_field&amp;amp;quot; ein und schicken die Maske ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_maske.png]]&lt;br /&gt;
&lt;br /&gt;
In der folgenden Ergebnistabelle klicken Sie bei &amp;amp;quot;stylesheet_field_list&amp;amp;quot; auf den &amp;amp;quot;Bearbeiten&amp;amp;quot; Button.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_tabelle.png]]&lt;br /&gt;
&lt;br /&gt;
In dem nun geöffneten Fenster sehen Sie alle Zuordnungen, welche bereits eingetragen sind. Hier wird aber lediglich das Stylesheet ausgegeben und nicht die Tabellen und Federzugehörigkeit. Dies hätte wegen der vielen Auswahlmöglichkeiten jeden Browser gekillt. Um Einzelheiten zu erfahren müssen Sie daher auf den Details-Button klicken. Auch wenn Sie eine neue Zuordnung erstellen möchten klicken Sie zunächst auf den Detail-Button eines beliebigen Stylesheets.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_list.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt können Sie die Zugehörigkeit des Stylesheets zu Tabelle und Feld ändern oder eine neue Zuordnung erstellen. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn ein Tabellenname ausgewählt und abgespeichert wurde, können nur Spalten dieser Tabelle ausgewählt werden. Wenn Sie die Tabelle ändern wollen, müssten Sie zunächst die Tabelle ändern, abspeichern und dieses Formular erneut aufrufen. Erst dann würden die Spalten der ausgewählten Tabelle in der Listbox Fieldname erscheinen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_edit.png]]&lt;br /&gt;
&lt;br /&gt;
Um eine neue Verknüpfung zu erstellen klicken Sie zuerst auf den + Button oben rechts. Danach erscheint das gleiche Formular nur ohne ausgefüllte Felder. Hier können Sie das Stylesheet und den Tabellennamen auswählen und die dazu passende Spalte der Tabelle die Sie zuvor ausgewählt haben. Achten Sie darauf die Tabelle zu nehmen, welche im Datenblatt verwendet wird. Danach nur noch über das Diskettensymbol oben rechts abspeichern und eine Spalten-Stylesheet-Verknüpfung ist fertig. Diesen Schritt wiederholen Sie für jede Spalte, die Sie in dem JasperReport Bericht benötigen.&lt;br /&gt;
&lt;br /&gt;
Ab Kernmodul 4.2 bzw. HISinOne 5.1 geht es noch komfortabler, Sie können hier auf einzelne Stylesheets filtern : Administration → Masken → Stylesheet suchen &lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst den Bericht aus, und klicken Sie dann rechts beim Bearbeiten-Button in der Spalte Felder-Vorbelegungen bearbeiten: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field.png]]&lt;br /&gt;
&lt;br /&gt;
In dem Bearbeitungsformular können Sie Datensätze erzeuge, löschen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kurzanleitung-direktaufruf-von-jasper-berichten-von-der-maske&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-246&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-247&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kurzanleitung Direktaufruf von Jasper-Berichten von der Maske ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Abschicken der Maske kann man auch direkt auf den entsprechenden Jasper-Bericht umgeleitet werden. Es muss dazu in der Maske ein Feld geben mit dem Namen&lt;br /&gt;
&lt;br /&gt;
tablestylesheet&lt;br /&gt;
&lt;br /&gt;
und der relation &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-248&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;amp;gt; select distinct filename,X.caption from sx_stylesheetsX,&amp;lt;br /&amp;gt;&lt;br /&gt;
sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=23880&lt;br /&gt;
&lt;br /&gt;
und zum Beispiel für Default der Maske 23880&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;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=23880 and S.ord=2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige des Feldes tablestylesheet im Browser wird eine Berschriftung caption hinterlegt, damit auf der Maske &amp;amp;quot;Bericht&amp;amp;quot; erscheint. Im neuen Kern-Modul passiert dies automatisch.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen manuellen Eintrag in die Tabelle &#039;&#039;sx_captions&#039;&#039; einzufügen (siehe Maske Administration -&amp;amp;gt; Maske -&amp;amp;gt; Beschriftung suchen).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| tid&lt;br /&gt;
| table_name&lt;br /&gt;
| field_name&lt;br /&gt;
| locale&lt;br /&gt;
| contents_short&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;&amp;amp;lt;wird automat. vergeben&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
| felderinfo&lt;br /&gt;
| tablestylesheet&lt;br /&gt;
| de&lt;br /&gt;
| Bericht&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Außerdem muss man die Maske um ein Feld Ausgabeformat ergänzen, das die Art=1 hat und folgende relation:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span id=&amp;quot;anchor-249&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and nature::smallint&amp;amp;lt;100 order by nature::smallint&lt;br /&gt;
&lt;br /&gt;
Beispiel für Default Excel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-250&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;amp;gt; select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and description=&#039;Excel&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Achtung: Hier kommen erst Ergebnisse, wenn Sie das Kernmodul 4.1 / HISinOne 3.0 oder höher installieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;spezielle-variablen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-251&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Spezielle Variablen ==&lt;br /&gt;
&lt;br /&gt;
Im Berichtsdesign können neben den Feldern der Ergebnistabelle auch z.B. der Berichtsname, Erleuterung, user und standdatum benutzt werden. Zu finden sind diese im &amp;amp;quot;Report Inspector&amp;amp;quot; unter Fields. Um auch Hochschulspezifische Informationen wie Hochschulname oder Hochschul-Webadresse in einen Bericht importieren zu können wurden unter anderem die sx_captions Variablen &amp;amp;quot;REPORT_HEADING_INSTITUTION&amp;amp;quot; und &amp;amp;quot;REPORT_HEADING_URL&amp;amp;quot; integriert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_sx_captions_markiert.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese können genau wie die anderen Fields in den Bericht per Drag&amp;amp;amp;Drop gezogen werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;makroberichte-als-datenquelle-für-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-252&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Makroberichte als Datenquelle für JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Sie können als Datenquelle für JR nicht nur einzelne Masken nehmen, sondern auch die Ausgabe von Makro-Masken. Dadurch können die verschiedenartigsten Informationen aus den normalen Masken für übergreifende Berichte genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt, wie im KLR-Bericht &amp;amp;quot;Berichtsblatt: Kennzahlen aus der Kostenrechnung&amp;amp;quot; Teile verwendet werden, um einen eigenen JR zu erzeugen, der wiederum Elemente des Makroberichts als Unterbericht nutzt. &lt;br /&gt;
&lt;br /&gt;
Zunächst rufen Sie den Makrobericht auf:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_html.png]]&lt;br /&gt;
&lt;br /&gt;
Das Bild zeigt die ersten drei Elemente des Makros, sie werden mit einer Ordnungsnummer durchnummeriert.&lt;br /&gt;
&lt;br /&gt;
Wir laden dazu die XML-Datenquelle herunter, die XML-Datenquelle binden wir wie [[#3.1.2.Datenquelle erzeugen|outline|gewohnt]] in JasperReports ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_datenquelle.png]]&lt;br /&gt;
&lt;br /&gt;
Dann klicken wir im Browser über den Tabellen den Button rechts von &amp;amp;quot;Bericht entwerfen&amp;amp;quot; → Leerer Bericht. Die JRXML-Datei speichern wir wie [[#3.1.3.Template erzeugen|outline|gewohnt]].&lt;br /&gt;
&lt;br /&gt;
Im Designer sehen wir nun bei den Feldern eine erweiterte Liste:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_jrxml.png]]&lt;br /&gt;
&lt;br /&gt;
Wir sehen also, daß die Ergebnisspalten mit einem Präfix für die Tabellennummer versehen sind, z.B. &amp;amp;quot;tab_0&amp;amp;quot;. Dadurch können wir die Tabellen und somit auch die jew. Spalten eindeutig identifizieren. Dies ist gleichzeitig der Hauptbericht. Das Detail-Band löschen wir (ist nicht nutzbar), stattdessen aktivieren wir ein Summary Band. &lt;br /&gt;
&lt;br /&gt;
Dann erzeugen wir den [[#2.5.Unterberichte |outline|Unterbericht]] für Studierenden-VZÄ. Dazu speichern wir die obige jrxml-Datei z.B. mit dem Namen makro_beispiel_ub_stud.jrxml und entfernen das Titel-Band und Seitenfuß-Band. Dann fügen wir im Designer einen Parameter &amp;amp;quot;ordnr&amp;amp;quot; hinzu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_param.png]]&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht bekommt dann in der Report Query folgende Änderung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_report_query.png]]&lt;br /&gt;
&lt;br /&gt;
Die Ordnungsnummer wird vom Hauptbericht übergeben und dient dazu, in der XML-Datenquelle auf die einzelne Tabelle zu filtern.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich geben wir noch einen weiteren Filter ein, damit die Summenzeilen aus der Originaltabelle nicht in die Kreuztabelle aufgenommen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_filter.png]]&lt;br /&gt;
&lt;br /&gt;
Damit der Unterbericht auch &amp;amp;quot;stand-alone&amp;amp;quot; ausführbar ist, können Sie dem Parameter &amp;amp;quot;ordnr&amp;amp;quot; auch einen Standardwert zuweisen, hier z.B. &amp;amp;quot;2&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_ordnr_default.png]]&lt;br /&gt;
&lt;br /&gt;
Nun können wir die [[#2.5.Unterberichte |outline|Kreuztabelle]] mit dem Assistenten erzeugen. Für unser Beispiel enthält die Kreuztabelle Studierenden-VZÄ nach Studiengang und Fachkennzeichen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_crosstab.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir speichern den Unterbericht und binden ihn in den Hauptbericht im Summary Band ein. Dabei vergeben wir wie gewohnt die Parameter XML_LOCALE und XML_NUMBER_PATTERN. Außerdem erzeugen wir den Parameter &amp;amp;quot;ordnr&amp;amp;quot;, und weisen diesem den Wert 2 zu, weil die Studierenden-Tabelle die Ordnungsnummer 2 hat (s.o.):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hauptbericht_ub_params.png]]&lt;br /&gt;
&lt;br /&gt;
Damit ist die Konfiguration beendet, der Bericht sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hb_erg.png]]&lt;br /&gt;
&lt;br /&gt;
Weitere Unterberichte lassen sich analog hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis zum Einbinden im Servlet: Unterberichte arbeiten nur mit der Datenquelle XML, daher müssen Sie die Datei des Hauptberichts mit dem Suffix &amp;amp;quot;_xmlsource&amp;amp;quot; versehen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kompatibilität-von-ireport-mit-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-253&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kompatibilität von iReport mit JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit iReport Berichte erzeugen, sollte wie gesagt die iReport-Versionsnr. mit der JasperReports-Version übereinstimmen, die der jew. Server nutzt. In Edustore ist dies derzeit die Version 5.1.0. Wenn die Versionsnummern nicht übereinstimmen, dürfen Sie keinesfalls die *.jasper-Dateien von dem lokalen Arbeitsplatz zum Tomcat Server kopieren.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus kann es auch weitere Abhängigkeiten geben, iReport bringt ein paar mehr Bibliotheken mit, als JasperReports. Wenn Sie dann eine jrxml-Datei auf den Server kopieren, könnte es eine Fehlermeldung geben in dem Stil&lt;br /&gt;
&lt;br /&gt;
java.lang.NoSuchMethodError:...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Das Vorgehen ist hier wie folgt:&lt;br /&gt;
&lt;br /&gt;
* Prüfen Sie zunächst, ob Sie die jeweilige Bibliothek wirklich brauchen. &lt;br /&gt;
* Wenn ja, dann ermitteln Sie aus dem Namen der fehlenden Klasse den Namen der *.jar-Datei. Meist reicht es, wenn Sie den Klassennamen in einer Suchmaschine eingeben, oder in einer speziellen Java-Suchmaschine wie http://www.jarfinder.com/&lt;br /&gt;
* Wenn Sie die jar-Datei identifiziert haben, können Sie diese von iReport-xxx/ireport/modules/ext/ in das webapps/superx/WEB-INF/lib Verzeichns kopieren. &lt;br /&gt;
* Danach müssen Sie Tomcat neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: gehen Sie beim Kopieren in den WEB-INF/lib Ordner möglichst &#039;&#039;&#039;sparsam&#039;&#039;&#039; um: manchmal gibt es zwischen einzelnen Bibliotheken unerwünschte und unvorhersehbare Querabhängigkeiten, z.B. nutzt eine iReport-Bibliothek xy.jar eine andere Bibliothek vz.jar, welche bereits im Tomcat Server vorhanden ist – aber mit einer anderen Versionsnummer. In diesem Falle kann es zu seltsamen Phänomenen kommen, die sehr schwer zu diagnostizieren sind, bis hin zu einer Instabilität des Servers. Man muss solche Kopiermaßnahmen auf jeden Fall gründlich testen!&amp;lt;br /&amp;gt;&lt;br /&gt;
Unter uns: Wir nennen Probleme, die dadurch entstehen können, die &amp;amp;quot;jar-Hölle&amp;amp;quot;...&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden sammeln wir ein paar Beispiele für gefahrlose Kopieraktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-grafiken-in-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-254&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Grafiken in JasperReports ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-255&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bitte vermeiden Sie, iReport-spezifische &amp;amp;quot;Themes&amp;amp;quot; zu benutzen (z.B. &amp;amp;quot;aegean&amp;amp;quot;), denn dafür würden weitere Bibliotheken benötigt. Wenn Sie z.B. die folgende Fehlermeldung bekommen, wurde ein Theme benutzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_theme_error.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann sollten Sie die Einstellung für das Objekt (hier das Theme der Grafik) wieder auf default setzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-bibliotheken-von-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-256&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Bibliotheken von iReport ====&lt;br /&gt;
&lt;br /&gt;
Bei der Meldung&lt;br /&gt;
&lt;br /&gt;
java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter&lt;br /&gt;
&lt;br /&gt;
sollten Sie die Bibliotheken &lt;br /&gt;
&lt;br /&gt;
iReport-xxx/ireport/modules/ext/asm.jar &lt;br /&gt;
&lt;br /&gt;
und zur Sicherheit auch&lt;br /&gt;
&lt;br /&gt;
asm-attrs.jar&lt;br /&gt;
&lt;br /&gt;
in den WEB-INF/lib-Ordner kopieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;troubleshooting&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-257&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;report-problem-class-not-set-for-bucket-variable&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-258&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Report Problem: Class not set for bucket: &amp;amp;lt;&amp;amp;lt;Variable&amp;amp;gt;&amp;amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Das Problem tritt in iReport 4.1.1 u.a. bei Kreuztabellen auf. Bei diesem Fehler fehlt in der jrxml-datei im Element &amp;amp;lt;bucketExpression&amp;amp;gt; Z.B.: class=&amp;amp;quot;java.lang.String&amp;amp;quot;. Diese einfach im Editor ergänzen und es funktioniert. Beispiel:&lt;br /&gt;
&lt;br /&gt;
Aus :&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;bucketExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;bucketExpression class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-jasper-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-259&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die jasper Datei ==&lt;br /&gt;
&lt;br /&gt;
Die jasper Datei ist die kompilierte jrxml. Wenn ein Bericht übertragen werden soll, z.B. von dem Entwickler auf den Server oder von dem Development System auch das Produktivsystem immer nur die jrxml Datei übertragen, da es bei Versionsunterschieden in JasperReport zu Fehlern kommt, wenn die Kompilierte Version zur Verfügung steht. Sobald der Bericht ausgeführt wird, erstellt (kompilliert) JasperReports automatisch die jasper Datei. &lt;br /&gt;
&lt;br /&gt;
Wenn die jasper Datei zur verfügung steht, wird auch nur noch diese von JasperReports verwendet und nicht mehr neu kompiliert. Falls Sie also einen Bericht weiter entwickelt haben oder eine neue Version einspielen, löschen Sie direkt die jasper Datei. Ansonsten werden die Änderungen nicht wirksam.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;im-excel-export-fehlen-felder&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-260&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im Excel Export fehlen Felder ==&lt;br /&gt;
&lt;br /&gt;
In Excel werden überlappende Elemente nicht angezeigt. Wenn also 2 Elemente übereinander liegen wird in Excel nur das oberste (welches im Vordergrund liegt) angezeigt. Hier ist besonders drauf zu achten, dass visuell 1px Abstand zwischen den Elementen Platz ist. Wenn von beiden Elementen jeweils eine Linie zu sehen ist, ist es korrekt. Wenn nicht, zählt das schon als Überlappung. Dafür im iReport Designer am besten ganz nah heran zoomen um diesen Abstand zu prüfen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel. Die beiden oberen Elemente überlappen, die unteren nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_excel.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hinweis-für-hisinone-7.0-kompatibilität&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-261&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hinweis für HisInOne 7.0 Kompatibilität ==&lt;br /&gt;
&lt;br /&gt;
Jrxml-Dateien, die unter iReport 4.1.3 entwickelt wurden und in HisInOne 7.1 funktionieren, können in 7.0. zur Fehlermeldung führen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
java.lang.NoClassDefFoundError: net/sf/jasperreports/compilers/GroovyEvaluator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jasperreports5.1.0 (hisinone 7.0) ist die Klasse GroovyEvaluator nicht enthalten, für 7.1 ist die jasperreports-6.1.0.jar enthalten, die enthält den GroovyEvaluator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Workaround:&lt;br /&gt;
&lt;br /&gt;
language=&amp;amp;quot;groovy&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ändern in &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
language=&amp;amp;quot;java&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;html-export-keinen-whitespace&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-262&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;HTML Export keinen whitespace ==&lt;br /&gt;
&lt;br /&gt;
Normal macht JR bei HTML-Exporten für den „Seitenumbruch“ eine Reihe von Leerzeilen. Um dies zu vermeiden, setzen Sie die Property IgnorePagination=true:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;jasperReport xmlns=&amp;amp;quot;http://jasperreports.sourceforge.net/jasperreports&amp;amp;quot; xmlns:xsi=&amp;amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;amp;quot; xsi:schemaLocation=&amp;amp;quot;http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd&amp;amp;quot; name=&amp;amp;quot;Kaufm. Quartalsbericht&amp;amp;quot; language=&amp;amp;quot;groovy&amp;amp;quot; pageWidth=&amp;amp;quot;2925&amp;amp;quot; pageHeight=&amp;amp;quot;565&amp;amp;quot; orientation=&amp;amp;quot;Landscape&amp;amp;quot; columnWidth=&amp;amp;quot;2925&amp;amp;quot; leftMargin=&amp;amp;quot;0&amp;amp;quot; rightMargin=&amp;amp;quot;0&amp;amp;quot; topMargin=&amp;amp;quot;0&amp;amp;quot; bottomMargin=&amp;amp;quot;0&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
isIgnorePagination=&amp;amp;quot;true&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;uuids&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-263&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;UUID&#039;s ==&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio wird an jedes Element eine lange UUID angehängt, in aktuellen Versionen von SuperX/ Edustore macht das keine Probleme. In älteren Versionen bzw. in iReport 4.* schon. Damit der JasperReport abwärtskompatibel ist, muss diese gelöscht werden. Bei großen Berichten taucht diese aber unter Umständen mehrere hundert Mal auf. Hier kann in JasperSoft Studio in dem &amp;amp;quot;Source&amp;amp;quot;-Reiter des Berichtsdesigners nach folgender Regular Expression gesucht werden und diese mit einem Leerzeichen ersetzt werden:&lt;br /&gt;
&lt;br /&gt;
uuid=&amp;amp;quot;[0-9a-z-]{36}&amp;amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-dokus&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-264&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Dokus =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ahammad, S. (2010). iReport 3.7.Learn how to use iReport to create, format, and export reports. Birmingham: Packt&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Haneke, U. et al. (2010). Open Source Business Intelligence. Möglichkeiten, Chancen und Risiken quelloffener BI-Lösungen. Wien: Hanser&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Toffoli, G. (2007). The definitive guide to iReport. Berkeley, CA: Apress&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch mehr Infos (nur Englisch) erhält man unter:&amp;lt;br /&amp;gt;&lt;br /&gt;
http://jasperforge.org/plugins/project/project_home.php?projectname=ireport&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;und natürlich unsere Website:&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;http://www.superx-projekt.de/doku/entwicklung/iReport-Handbuch/main.htm&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;span id=&amp;quot;anchor-265&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16337</id>
		<title>Berichtsdesign mit JasperReports</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Berichtsdesign_mit_JasperReports&amp;diff=16337"/>
		<updated>2026-07-06T06:26:30Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Berichtsdesign mit JasperReports   von Daniel Quathamer &amp;amp;amp; Andre Knieschewski    &amp;lt;span id=&amp;quot;jasperreports-installieren-und-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = &amp;lt;span id=&amp;quot;anchor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports installieren und konfigurieren =  &amp;lt;span id=&amp;quot;voraussetzungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; == &amp;lt;span id=&amp;quot;anchor-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Voraussetzungen ==  * Jasperreports ist eine Laufzeitumgebung fürs Reporting, die in java-basierte Reporting Software integriert werden kann. Der Download ist hier: https…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Berichtsdesign mit JasperReports &lt;br /&gt;
&lt;br /&gt;
von Daniel Quathamer &amp;amp;amp; Andre Knieschewski&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-installieren-und-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports installieren und konfigurieren =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;voraussetzungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* Jasperreports ist eine Laufzeitumgebung fürs Reporting, die in java-basierte Reporting Software integriert werden kann. Der Download ist hier: https://sourceforge.net/projects/jasperreports/. Dieses Paket enthält kommandozeilenbasierte Demos und die benötigten Libraries. Die Demos sind sehr nützlich und als Referenz gut nutzbar. &lt;br /&gt;
* Die Entwicklungsumgebung für JasperReports heißt &amp;amp;quot;Jaspersoft Studio&amp;amp;quot; und kann bezogen werden von https://community.jaspersoft.com/project/jaspersoft-studio. Es enthält auch obige Laufzeitumgebung.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da es ein Eclipse Plugin ist, können Sie es auch direkt in Ihrem Eclipse installieren (Menü Help → Eclipse Marketplace → Suchwort &amp;amp;quot;Jaspersoft&amp;amp;quot;. Dort können Sie aber nur die jeweils aktuelle Version installieren.&lt;br /&gt;
&lt;br /&gt;
Da der Download bei Jaspersoft nun nur für registrierte Nutzer zur Verfügung steht, hier noch ein Link für den Download: https://sourceforge.net/projects/jasperstudio/files/&lt;br /&gt;
&lt;br /&gt;
* Für altere Projekte wurde auch iReport verwendet. Da es ein paar Bugs in den verschiedenen Versionen gibt, empfehlen wir zu der Erstellung von JasperReport Berichten die iReport Version 4.1.3, auch wenn in Edustore die Version 5.1.0 verwendet wird. Download der passenden Version von iReport von http://sourceforge.net/projects/ireport (dort auf &amp;amp;quot;files&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;iReport&amp;amp;quot; klicken, dann erhalten Sie Links auf die jeweilige Version. &lt;br /&gt;
* Für Demos &amp;amp;amp; Deployment auch Apache ANT http://ant.apache.org/&lt;br /&gt;
* Java 1.8 JRE oder höher&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports und Jaspersoft Studio  ==&lt;br /&gt;
&lt;br /&gt;
JasperReports ist das Programm, das fertige Berichte erzeugen kann. Es besitzt (außer einer Vorschauansicht der Berichte) keine graphische Oberfläche. Für das Entwerfen von Berichten ist &#039;&#039;&#039;&#039;&#039;&#039;Jaspersoft Studio&#039;&#039;&#039;&#039;&#039;&#039; geeignet. Um es noch ein wenig zu veranschaulichen könnte man sagen, dass wenn ein JasperReport das Worddokument wäre, dann wäre Jaspersoft Studio z.B. Microsoft Word.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Download benötigen Sie Java 1.8 oder höher zum Ausführen. Nach dem Entpacken können Sie die Anwendung direkt starten. &lt;br /&gt;
&lt;br /&gt;
Bei JasperSoft Studio wird als Grundlage Eclipse verwendet. Wenn man JasperSoft Studio herunter lädt, erhält man automatisch Eclipse mit dabei. JasperSoft Studio kann [http://community.jaspersoft.com/project/jaspersoft-studio hier] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Wenn lieber ein bereits vorhandenes Eclipse verwendet werden soll und Jaspersoft Studio dort als Plugin installiert werden soll, gibt es 2 Wege:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Unter Help → Eclipse Marketplace kann nach „Jaspersoft“ gesucht werden und das Plugin installiert werden&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Datei:JasperReports-Handbuch_jaspersoftstudio_plugin_install1.png]]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Man kann auch über die Marketplace Webseite von Eclipse das Plugin Jaspersoft Studio suchen und das Icon per Drag&amp;amp;amp;Drop nach Eclipse ziehen. Dann wird das Plugin automatisch installiert. [https://marketplace.eclipse.org/content/jaspersoft-studio Hier] die Webseite. (Bei mir hat das Drag&amp;amp;amp;Drop leider nicht funktioniert. Das kann an Linux liegen. Unter Windows wird es sicherlich funktionieren.)&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-4&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Unter Windows - &amp;amp;gt; Preferences → Jaspersoft Studio können Sie verschiedene Einstellungen vornehmen. Wichtig in der Menüpunkt &amp;amp;quot;Compatibility&amp;amp;quot;: wählen Sie dort die JR-Version, die auch Ihre Ziel-Platform enthält. &lt;br /&gt;
&lt;br /&gt;
Im Dateimanager von JasperSoft Studio gibt es Eclipse-typisch ein &amp;amp;quot;virtuelles&amp;amp;quot; Dateisystem mit dem Standardnamen &amp;amp;quot;MyReports&amp;amp;quot;, zumindest beim Speichern von Dateien. Dieses Dateisystem liegt physisch im Ordner &amp;amp;lt;&amp;amp;lt;Home-Verzeichnis&amp;amp;gt;&amp;amp;gt;/JaspersoftWorkspace/MyReports.&lt;br /&gt;
&lt;br /&gt;
Beim Öffnen von Dateien können Sie direkt mit &amp;amp;quot;Open File&amp;amp;quot; aufs normale Dateisystem zugreifen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-5&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Hier eine Übersicht des Entwurfsbereichs, in rot finden Sie Erläuterungen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_designer.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Die Unterfenster können Sie Eclipse-typisch beliebig anordnen. Oben ein Beispiel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-sortierung-und-filterung-der-datenquelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-6&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Sortierung und Filterung der Datenquelle =====&lt;br /&gt;
&lt;br /&gt;
Wenn die Datenquelle definiert ist, kann /sollte der Bericht die Sortierung und Filterung der Daten festlegen. Dies ist etwas versteckt im Designer mittig oberhalb des Entwurfsbereichs:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie die Reiter &amp;amp;quot;Sorting&amp;amp;quot; und &amp;amp;quot;Filter Expression&amp;amp;quot;. Dort pflegen Sie beides.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsdesign-und-vorschau&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-7&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsdesign und Vorschau =====&lt;br /&gt;
&lt;br /&gt;
Im Designmodus können Sie den Bericht entwerfen, oder den XML-Quellcode. Beim Klick auf den Reiter &amp;amp;quot;Preview&amp;amp;quot; bekommen Sie eine Vorschau des Berichts:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_preview.png]]&lt;br /&gt;
&lt;br /&gt;
Oberhalb der Vorschau können Sie die Datenquelle (d.h. den &amp;amp;quot;Data Adapter&amp;amp;quot; angeben, und rechts daneben die Anwendung, die den Bericht zur Anzeige bringt (&amp;amp;quot;Viewer&amp;amp;quot;). Voreingestellt ist hier der Java-interne Viewer von JasperReports, Sie können den aber umstellen z.B: auf PDF oder Excel.&lt;br /&gt;
&lt;br /&gt;
Mit Klick auf das grüne Dreieck führen Sie den Bericht aus und erhalten die Vorschau.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Es ist aufgefallen, dass beispielsweise Fettdruck in der PDF-Vorschau nicht angezeigt wird. Im Java-Preview und aus der Weboberfläche geladen, ist der Fettdruck ersichtlich. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-berichtsstruktur&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-8&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Berichtsstruktur =====&lt;br /&gt;
&lt;br /&gt;
Im &amp;amp;quot;Outline View&amp;amp;quot; sehen Sie die Struktur des Berichts, d.h. aktive &amp;amp;quot;Bänder&amp;amp;quot; und Metadaten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_outline.png]]&lt;br /&gt;
&lt;br /&gt;
Die Elemente unter &amp;amp;quot;Fields&amp;amp;quot; werden bei Nutzung in [[#3.1.3.Template erzeugen|outline|Edustore]] automatisch gefüllt. Alles weitere definieren Sie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jaspersoft-studio-elemente-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-9&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Jaspersoft Studio Elemente bearbeiten =====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie im Design Modus ein Element markieren, wird es automatisch im Outline und in dem Reiter &amp;amp;quot;Properties&amp;amp;quot; selektiert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_properties.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Outline zeigt es lediglich, wo es sich befindet, und im Reiter &amp;amp;quot;Properties&amp;amp;quot; können Sie Formatierung, Anzeige etc. bearbeiten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-10&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport ===&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_welcome.png]] Das Paket enthält bereits die Laufzeitumgebung JasperReports, diese muss also nicht separat installiert werden. Nichtsdestotrotz empfiehlt sich der Download, denn in dem JasperReports-Paket befinden sich viele lehrreiche Demo-Berichte.&lt;br /&gt;
&lt;br /&gt;
Die Windows-Version beinhaltet auch einen Installer. Um diesen zu nutzen sind Admin-Rechte erforderlich. &lt;br /&gt;
&lt;br /&gt;
Alternativ bzw. unter Linux ist iReport ohne Installation direkt nach dem Entpacken lauffähig. Wenn Sie auch Scriptlets erstellen wollen, müssen Sie nicht nur eine Java-Laufzeitumgebung (JRE) installieren, sondern ein JDK, und die Datei $JAVA_HOME/lib/tools.jar nach iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/ireport/libs kopieren. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start unter Windows: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport.exe&lt;br /&gt;
&lt;br /&gt;
Start unter Linux: iReport-&amp;amp;lt;&amp;amp;lt;Versionsnr.&amp;amp;gt;&amp;amp;gt;/bin/ireport&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-einstellungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-11&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Einstellungen ====&lt;br /&gt;
&lt;br /&gt;
Als erstes sollten Sie die Anwendungen einstellen, mit denen iReport generierte Berichte anzeigen soll:&lt;br /&gt;
&lt;br /&gt;
Im Menü Extras-&amp;amp;gt; Optionen wählen Sie im Reiter &amp;amp;quot;iReport&amp;amp;quot;-&amp;amp;quot;Viewers&amp;amp;quot; die entsprechenden Anwendungen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_viewers.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-entwurfsbereich&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-12&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Entwurfsbereich ====&lt;br /&gt;
&lt;br /&gt;
Der Entwurfsbereich bzw. &amp;amp;quot;Designer&amp;amp;quot; hat einen recht komplexen Aufbau. Sie können die Fenster und Seitenbereiche zwar recht flexibel anpassen, aber hier ist die Auslieferung:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_ueberblick.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die wichtigen Bereiche sind hervorgehoben:&lt;br /&gt;
&lt;br /&gt;
* Berichtsstruktur: Welche Seitenbereiche gibt es?&lt;br /&gt;
* Datenquelle: Welche Datenbank wird genutzt?&lt;br /&gt;
* Abfrage: Was ist die konkrete Abfrage für den Bericht?&lt;br /&gt;
* Elemente: Welche Elemente kann ich einfügen, und welche Eigenschaften haben sie?&lt;br /&gt;
* Vorschau: wie sieht der Bericht &amp;amp;quot;gedruckt&amp;amp;quot; aus?&lt;br /&gt;
* Fehlerausgabe: Jeder Bericht wird &amp;amp;quot;kompiliert&amp;amp;quot;, dazu gibt es eine Fehlerausgabe&lt;br /&gt;
&lt;br /&gt;
Im Reiter &amp;amp;quot;Preview&amp;amp;quot; kann man sich eine Vorschau des Ausdrucks anzeigen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterschiede-ireport-und-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-13&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterschiede iReport und JasperSoft Studio ===&lt;br /&gt;
&lt;br /&gt;
Mit der Version 5.5 wurde die Entwicklung von iReport eingestellt, die Firma JasperSoft empfiehlt seit dem die Benutzung von JasperSoft Studio. Nach unseren Erfahrungen ist die Arbeit mit iReport 4.1.3 (die letzte stabile Version) hier und da &amp;amp;quot;leichtgewichtiger&amp;amp;quot; und einfacher, ganz zu schweigen vom Overhead, den JasperSoft Studio mit Eclipse einbringt. Besonders nervig empfanden wir es, dass JasperSoft Studio anders als iReport verschiedene Objekteigenschaften in Reitern organisiert, und bei jedem Wechsel der Markierung eines Berichtselements muss man in JasperSoft Studio wieder zum richtigen Reiter wechseln. &lt;br /&gt;
&lt;br /&gt;
Andererseits ist JasperSoft Studio kompatibel mit neueren JR-Möglichkeiten. Insbesondere bei dem Umgang mit Diagrammen gibt es in JasperSoft Studio erheblich mehr Möglichkeiten, z.B. Chart Customization. Außerdem ist es vorteilhaft, wenn Sie ohnehin Eclipse nutzen. Sie sollten für Ihre Arbeit also abwägen ob Sie die neueren Möglichkeiten im jeweiligen Bericht überhaupt brauchen, ggf. sind Sie mit iReport besser bedient. Aber das ist Geschmackssache.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Beachten Sie aber bitte: sobald Sie einen Bericht mit JasperSoft bearbeitet und gespeichert haben, ist er mit iReport 4.1.3 nicht mehr bearbeitbar, bzw. nur wenn Sie die [[#4.6.UUID&#039;s|outline|UUIDs]] entfernt haben.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beide Produkte befinden sich noch im Einsatz, daher hier nur ein paar Kapitel zur Handhabung der jew. Software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;handhabung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-14&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Handhabung ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;preview&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-15&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Preview =====&lt;br /&gt;
&lt;br /&gt;
Bei iReport waren die Buttons für Designer und Preview immer oben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
Bei Jaspersoft Studio liegen die Buttons unten:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;palette&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-16&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Palette =====&lt;br /&gt;
&lt;br /&gt;
Die Palette ist bei iReport und Jaspersoft Studio an gleicher Position zu finden.&lt;br /&gt;
&lt;br /&gt;
Ireport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette1.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_palette2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;objekt-eigenschaften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-17&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Objekt-Eigenschaften =====&lt;br /&gt;
&lt;br /&gt;
Die Objekt-Eigenschaften liegen auch an der gleichen Stelle, jedoch sind bei Jaspersoft Studio die Gruppierungen der Eigenschaften in Karteireiter unterteilt. Bei iReport ist es einfach eine lange Liste mit Unterteilungen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
iReport:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Jaspersoft Studio:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jss-ir_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;jasperreports-als-kommandozeilen-tool&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-18&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;JasperReports als Kommandozeilen-Tool ==&lt;br /&gt;
&lt;br /&gt;
In der JasperReports-Distribution befindet sich ein ANT-Script, das mehrere Berichte erzeugen kann.&lt;br /&gt;
&lt;br /&gt;
 cd demo/samples&lt;br /&gt;
&lt;br /&gt;
Beispiel xmldatasource:&lt;br /&gt;
&lt;br /&gt;
cd xmldatasource&lt;br /&gt;
&lt;br /&gt;
 ant -p&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe ist:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ant_xmldatasource.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden, je nach Auswahl pdf-, Excel- oder andere Berichte erzeugt. Mit dem Target &amp;amp;quot;test&amp;amp;quot; werden alle Targets durchlaufen.&lt;br /&gt;
&lt;br /&gt;
ant test&lt;br /&gt;
&lt;br /&gt;
Achtung: manche Demos brauchen eine laufende HSQLDB (siehe demo/hsqldb).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-19&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquellen =&lt;br /&gt;
&lt;br /&gt;
Allgemein unterstützt JasperReports verschiedene Datenquellen, z.B. relationale Datenbanken, Excel, CSV oder XML. Auch Webservices sind möglich. Speziell für SuperX/ HISinOne-BI gibt es spezielle Datenquellen-Vorgaben, damit Sie die Daten auch im Server-Betrieb nutzen können. Hier also nur die allgemeinen, also SupeRX/BI-unabhängigen Quellen, wenn Sie JasperReports am lokalen Arbeitsplatz nutzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-datenbank&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-20&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Datenbank ==&lt;br /&gt;
&lt;br /&gt;
Eine relationale Datenbank ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Oben links befindet sich der Dialog zum Erzeugen (1) des Data Adapter, und dann darunter die Zeile &amp;amp;quot;Database Jdbc Connection&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_data_adapter1.png]]&lt;br /&gt;
&lt;br /&gt;
Dort geben Sie dann die jdbc-spezifischen Daten an (Datenbanktyp, Name etc.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: die Nutzung setzt eine direkte Datenbankverbindung zum DB-Server voraus, an vielen Unternehmenanwendungen wird dies nicht mehr erlaubt. Ggf. fragen Sie bei Ihren Systemadministrator/innen nach. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-excel-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-21&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle Excel-Datei ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-22&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Eine Excel Datei ist in JasperSoft Studio als &amp;amp;quot;Data Adapter&amp;amp;quot; einzurichten. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Excel Datei hat vier Spalten und eine führende Zeile mit den Spaltenüberschriften. Achten Sie darauf, dass die Datentypen der Spalten in Excel dem Inhalt entsprechen. Hier die Spalten:&lt;br /&gt;
&lt;br /&gt;
* Frage Nr. &lt;br /&gt;
* Text &lt;br /&gt;
* Mit_ohne_schule &lt;br /&gt;
* Summe&lt;br /&gt;
&lt;br /&gt;
Aus der Excel-Datei erzeugen Sie einen &amp;amp;quot;Data Adapter&amp;amp;quot;. Der Data Adapter vom Typ &amp;amp;quot;Excel File&amp;amp;quot; hat ein paar Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können Sie in einem Berichtsdesign die Datenquelle definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie wählen dort oben links zunächst den &amp;amp;quot;Data Adapter&amp;amp;quot; aus (1), und klicken dann rechts auf &amp;amp;quot;Read Fields&amp;amp;quot; (2):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_datenquelle_excel_3.png]]&lt;br /&gt;
&lt;br /&gt;
Aus der Datenquelle werden dann die Datenfelder (3) und Inhalte (Reiter &amp;amp;quot;Data preview&amp;amp;quot;) automatisch übernommen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-23&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsdesign =&lt;br /&gt;
&lt;br /&gt;
Das Erstellen eines Berichtes erleichtert JasperReports wesentlich. Dennoch wird man sich damit etwas beschäftigen müssen, um ein vernünftiges Ergebnis zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Zuerst muss man den Bericht öffnen. Das geschieht über „Datei“ → „Open“ → Bericht auswählen → auf „Öffnen“ klicken. Nun noch oben links die für diesen Bericht erstellte Datenquelle auswählen und man kann loslegen.&lt;br /&gt;
&lt;br /&gt;
JasperReports bezeichnet die Ausgabebereiche als Bänder. Ein Band ähnelt einer Zeile. Es reicht über die komplette Seitenbreite. Die Höhe kann dabei selbst bestimmt werden und wird dem Informationsgehalt angepasst. Das Band „Detail 1“ ist so etwas wie das Hauptband, in dem dann die Informationen zeilenweise ausgegeben werden. Es wird also eine Schleife über die Daten (Tabelle) ausgeführt und für jeden Datensatz ein mal das Detail Band ausgegeben. Die linke Spalte könnte z.B so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-iReport_Leiste_Neu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier sieht man, das das Band „Detail 1“ aktiv ist und die anderen wie „Title“ noch nicht. In den Gruppen „Fields“ und „Variablen“ befinden sich die Felder (Spalten) aus der Ergebnistabelle und interessante Variablen wie Seitenzahl, die man nun einfach in das bestehende Band „Detail 1“ per „Drag and Drop“ ziehen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Feld_Name.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man z.B. in der Gruppe Fields das Feld „Name“ hat und dies in das Band „Detail 1“ zieht,befindet sich ein Platzhalter im Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie dann auf „Preview“ klicken, wird eine Vorschau des Berichts angezeigt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Designer_Preview.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden alle Namen aufgelistet, die in der Datenquelle vorhanden sind:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_1_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können das Layout der Ausgabe (Schriftart, Größe) über die Eigenschaften des Feldes variieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-24&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um wieder zurück in den Entwicklermodus zu kommen klickt man einfach wieder auf den Reiter &amp;amp;quot;Designer&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Die Bänder „Title“, „Page“ usw. kann man mit einem Rechtsklick und dann „Add Band“ hinzufügen und auch wieder mit einem rechtsklick und dann „Delete Band“ wieder entfernen. Diese Bänder haben bestimmte Eigenschaften. Z.B. Band „Titel“ wird nur einmal auf der ersten Seite abgebildet, Band „Page Header/Footer“ auf jeder Seite am Anfang/Ende.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-und-filtern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-25&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung und Filtern ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise verarbeitet JasperReports die Datensätze zeilenweise in der Reihenfolge, in der sie bereitgestellt werden. Sie können im Entwurfsmodus die Sortierung bzw. Filterung der Datensätze anpassen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort1.png]]&lt;br /&gt;
&lt;br /&gt;
Klicken Sie auf das Icon mit der Tonne und Sie gelangen in die Einstellungen für die Datenquelle. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort2.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button Sortieren können Sie nach allen Feldern des Berichts aufsteigend bzw. absteigend sortieren.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_sort3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Button &amp;amp;quot;Filter expression&amp;amp;quot; können Sie eine Formel definieren, um die Gültigkeit von Datensätzen zu definieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Z.B. die Expression &amp;amp;quot;.contains(&amp;amp;quot;12&amp;amp;quot;) würde auf alle Datensätze filtern, die im Feld die Zeichenkette &amp;amp;quot;12&amp;amp;quot; enthalten. Weitere Infos im Kapitel zum [[#2.9.Expression Editor|outline|Expression Editor]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;listen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-26&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Listen ==&lt;br /&gt;
&lt;br /&gt;
Listen lassen sich einfach erstellen, indem man die jeweiligen Felder ins Detail-Band zieht. Manchmal kann es vorkommen, dass Textfelder &amp;amp;quot;überlaufen&amp;amp;quot;, d.h. die rechteckige Box, die das Feld markiert, ist zu klein für den Feldinhalt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_listen_stretch.png]]&lt;br /&gt;
&lt;br /&gt;
In diesem Falle muss man das Attribut des jew. Felder (hier &amp;amp;quot;Fächergruppe&amp;amp;quot;) &amp;amp;quot;Text Field properties &amp;amp;gt; Stretch with overflow&amp;amp;quot; ankreuzen.&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn das Feld Teil einer tabellarischen Auflistung ist, muss man die anderen Element mit der Eigenschaft &amp;amp;quot;Stretch type → Relative to tallest object&amp;amp;quot; versehen, hier z.B. die Felder &amp;amp;quot;Studienfeld&amp;amp;quot; und &amp;amp;quot;Studienbereich&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 Bei vielen Zeilen ist es übersichtlicher, jede zweite Zeile farbig zu hinterlegen. Dieser Trick ist im Abschnitt Tabellengestaltung [[#2.4.3.Zeilen alternierend einfärben|outline|erläutert]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-27&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ==&lt;br /&gt;
&lt;br /&gt;
Wichtige Vorbemerkung zum Gruppieren: JasperReports setzt bei der Gruppierung voraus, dass die Datensätze der Datenquelle nach den Gruppierungsmerkmalen sortiert sind. Alle Merkmale, nach denen Sie gruppieren, sollten also entweder direkt in der Datenquelle sortiert sein, oder in JasperReports im [[#2.1.Sortierung und Filtern|outline|Berichtsentwurf]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppen-definieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-28&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppen definieren ===&lt;br /&gt;
&lt;br /&gt;
Zu den Standardbändern kann man nun auch noch selbst definierte Gruppen hinzufügen. Mit einem Rechtsklick auf den obersten Knoten → „Add Report Group“ öffnet sich ein Fenster in dem man der Gruppe einen Namen geben kann und das Objekt wählt für das die Gruppe erstellt wird.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie mehrere Gruppierungsebenen benötigen, dann sollte die Reihenfolge des Hinzufügens der Gruppen &amp;amp;quot;top-down&amp;amp;quot; verlaufen, d.h. zuerst die oberste Gruppierung hinzufügen, dann die Gruppe darunter usw.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
In dem folgenden Beispiel wird die Gruppe „Monat“ gewählt und in dem nächsten Schritt mit Header und Footer hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
Man zieht das Feld „Namen“ in das Band „Detail“ und &amp;lt;span id=&amp;quot;anchor-29&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Monat“ in das erstellte Band „Monat Group Header 1“. Aus der Palette rechts oben (wenn nicht vorhanden bekommt man es über „Fenster“ → „Palette“) zieht man einen „Static Text“ in das Band „Monat Group Header 1“ vor der Ausgabe des Monats, benennt das Feld „Monat:“ und noch eine Linie darunter. Zusammen sollte es so aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man nun auf „Preview“ klickt erhält man als Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-30&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Damit eine Gruppe nicht durch einen Seitenumbruch auseinandergerissen wird, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;lt;span id=&amp;quot;anchor-31&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
Sie können auch angeben daß vor jedem Gruppierungswechsel ein Seitenumbruch ausgeführt wird:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_new_page.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit &amp;amp;quot;Start on a new page&amp;amp;quot; wird eine neue Seite bei jedem Gruppenwechsel begonnen. Speziell beim Export nach Excel kann dies in Tandem mit Arbeitsblättern nutzen, siehe [[#2.19.2.Excel-Export in einzelne Tabellenblätter|outline|unten]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppensummen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-32&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppensummen ===&lt;br /&gt;
&lt;br /&gt;
Gruppensummen kann man im Kopf oder Fuß einer Gruppe anlegen. Sie aktivieren z.B. den Gruppenfuß im Report Inspector, und ziehen dann das Feld Summe in den Entwurfsbereich. Beim &amp;amp;quot;Fallenlassen&amp;amp;quot; werden Sie gefragt, ob Sie den jew. Wert oder eine Aggregatfunktion nutzen wollen. Für Zwischensummen wählen Sie &amp;amp;quot;Sum&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Datei:JasperReports-Handbuch_designer_add_group_foot1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich setzen Sie noch ein Label bzw. &amp;amp;quot;Static Text&amp;amp;quot;-Element rechtsbündig davor, und setzen beide Elemente fett:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_add_group_foot2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-ohne-eigenes-band&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-33&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung ohne eigenes Band ===&lt;br /&gt;
&lt;br /&gt;
Bei der Gruppierung in JasperReports wird in der Regel ein horizontales Band für die Gruppierungsebene angelegt. Das führt dazu, daß man zeilenorientiert gruppiert. In manchen Fällen kann es gewünscht sein, in den Spalten einer Tabelle zu gruppieren. Hier ein Beispiel für das Ziel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten1_vorlage.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird in den Zeilen nach dem Merkmal &#039;&#039;&#039;Fach&#039;&#039;&#039; gruppiert. Zusätzlich wird noch in den Spalten nach Fachsemestern gruppiert. Um dieses Layout zu realisieren, muss man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie ein Column Header Band, und ein Group Footer-Band für die Gruppierungsebene Fach. Warum Group Footer? Weil innerhalb des Fachs nochmal gruppiert werden soll, und daher erst nach dem Gruppieren nach Fach nach Fachsemestern gruppiert wird. Ein Detail-Band gibt es hier nicht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten3_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie eine neue Variable z.B. mit dem Namen &amp;amp;quot;fs1&amp;amp;quot; für erstes Fachsemester, und geben Sie der Variable folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten2_variable_1fs.png]]&lt;br /&gt;
&lt;br /&gt;
 Zur Erläuterung: Die Variable filtert die Datensätze gemäß dem Ausdruck in Variable Expression, und tut dies auf der Gruppierungsebene &amp;amp;quot;fach&amp;amp;quot;. Die Variable Expression ist eine für unsere Zwecke sehr nützliche Java-Kurzfassung einer IF-THEN-Bedingung, und meint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn der Inhalt des Feldes &amp;amp;quot;Anzahl Fachsemester&amp;amp;quot; gleich 1 ist, dann gib die Summe der jew. Studierenden aus, wenn nicht, dann gib 0 aus.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Analog kann man noch die Variable &amp;amp;quot;fsgr13&amp;amp;quot; für &amp;amp;quot;Fachsemester &amp;amp;gt; 13&amp;amp;quot; anlegen. &lt;br /&gt;
&lt;br /&gt;
Danach kann man die Variablen &amp;amp;quot;fs1&amp;amp;quot; und &amp;amp;quot;fsgr13&amp;amp;quot; in das Band &amp;amp;quot;Fach Group Footer 1&amp;amp;quot; ziehen, und noch das Feld &amp;amp;quot;Summe&amp;amp;quot; für die Gesamtsumme. Dann tragen wir im Column Header Band noch die Spaltenüberschriften ein. Insgesamt sieht Berichtsentwurf dann so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten4_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und das Ergebnis sieht so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_spalten5_band.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fertig. Man könnte nun noch weitere Fachsemester-Intervalle einfügen, oder z.B. eine Summe der Studierenden in der Regelstudienzeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;gruppierung-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-34&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Gruppierung mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nach Feldern gruppieren wollen, die es in Ihrer Datenquelle gar nicht gibt (z.B. nach Aggregationen von Mekrmalskombinationen), dann können Sie auch Variablen mit speziellen Formeln anlegen, und diese dann in die Gruppierung aufnehmen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wichtig: Wenn die Gruppierungsvariable nicht im Summary Band genutzt wird, muss der resettype der Variable auf „None“ gesetzt werden. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Abschnitt zu [[#2.5.4.Kreuztabellen mit virtuellen Dimensionen|outline|Kreuztabellen]] wird z.B. gezeigt, wie die Fächer Mathe, Physik und Biologie in einen neuen Wert &amp;amp;quot;Naturwissenschaften&amp;amp;quot; transformiert werden.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;variablen-und-gruppierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-35&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Variablen und Gruppierung ===&lt;br /&gt;
&lt;br /&gt;
Beim Anlegen von Gruppen-Bändern und beim Ziehen von Feldern in das jew. Gruppenband legt JR automatisch eine Variable an, mit der jew. Aggregationsfunktion. Diese Variable hat folgende Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Expression: das Feld, aus dem die Variable gespeist wird&lt;br /&gt;
&lt;br /&gt;
Calculation: Die Aggregatfunktion, z.B. &amp;amp;quot;sum&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reset Type: Die Gruppierungsebene&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Variable in Textfeldern des Gruppenbandes nutzen, gibt sie jeweils den richtigen Wert an, egal ob Gruppenkopf oder Fuß.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie aber mit &amp;amp;quot;Print-when-Expressions&amp;amp;quot; im Gruppenband arbeiten und auf die Variablen zugreifen, funktionieren diese standardmäßig nur im Gruppenfuß, weil erst am Ende der Gruppe der Wert bekannt ist. In diesem Fall müssen Sie der Variable auch eine &amp;amp;quot;Initial Value Expression&amp;amp;quot; mit dem jew. Feld geben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen-auf-gruppenebene&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-36&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen auf Gruppenebene ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf der Gruppenebene Berechnungen, z.B. Mittelwerte, durchführen wollen, gibt es einige Fallstricke: &lt;br /&gt;
&lt;br /&gt;
* Die in JR eingebauten Funktionen wie &amp;amp;quot;avg&amp;amp;quot; arbeiten auf Gruppenebene nicht immer exakt.&lt;br /&gt;
* Komplexere Formeln auf Gruppenebene in Variablen abzubilden und diese dann das Quelle für Textfelder zu nehmen hat bei uns nicht geklappt. &lt;br /&gt;
&lt;br /&gt;
Hier unser Vorgehen:&lt;br /&gt;
&lt;br /&gt;
* Definieren Sie auf der Ebene der jew. Gruppe eine Variable mit der Gesamtsumme, und eine mit der Summe der zu mittelnden Werte. Diese Variablen haben als &amp;amp;quot;reset Type&amp;amp;quot; die jew. Gruppierungsebene.&lt;br /&gt;
* Im Textfeld, das Sie ausgeben, verwenden Sie dann die Berechnungsformel, z.B. einen Quotienten. Verwenden Sie für die Berechnung nicht eine neue Variable, sondern fügen Sie die Formel direkt in das Textfeld ein.&lt;br /&gt;
&lt;br /&gt;
Im folgenden ein Beispiel: Wir haben eine Absolventenliste pro Studiengang und Semester, darin werden dann Mittelwerte von Abschlussnoten gebildet. Die Datenquelle hat summierte Zeilen pro Note:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_daten.png]]&lt;br /&gt;
&lt;br /&gt;
Im obigen Beispiel haben wir in der Zeile 5 eine Absolventin mit der Note 1,1. In der letzten Zeile haben wir zwei Absolventinnen mit der Note 1,2.&lt;br /&gt;
&lt;br /&gt;
Würden wir den Notenschnitt manuell berechnen, müßten wir die Notensumme (Spalte H*K) ermitteln, hier wäre der Wert 32,3. Die Summe der Absolventen in Spalte K wäre 16, d.h. der Notenschnitt wäre 32,3/16 = 2,02.&lt;br /&gt;
&lt;br /&gt;
In JasperReports wäre der Entwurf wie folgt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir haben eine Variable &amp;amp;quot;Summe_1&amp;amp;quot; auf der Ebene des Semester-Bandes, die im obigen Excel der Summe der Spalte &amp;amp;quot;Summe&amp;amp;quot; entspricht. &lt;br /&gt;
&lt;br /&gt;
Außerdem haben wir eine Variable &amp;amp;quot;Notensumme&amp;amp;quot; mit der Formel $F{Note}*$F{Summe}, auf der Ebene der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Achten Sie drauf, dass Sie als Typ &amp;amp;quot;java.lang.Double&amp;amp;quot; nehmen, damit Sie keine Rundungsfehler bekommen.&lt;br /&gt;
&lt;br /&gt;
Der Quotient wird dann im Textfeld gebildet, das den Notenschnitt auf Semesterebene enthält, und auf zwei Nachkommastellen gerundet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld selbst muss bei &amp;amp;quot;Evaluation time&amp;amp;quot; den Wert &amp;amp;quot;Group&amp;amp;quot; haben, und bei &amp;amp;quot;Evaluation group&amp;amp;quot; dann den Wert der Gruppe &amp;amp;quot;Semester&amp;amp;quot;. Und hier das Ergebnis in der Vorschau:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_notenschnitt_vorschau.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Wert 2,02 stimmt mit unserer manuellen Berechnung überein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;tabellengestaltung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-37&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Tabellengestaltung ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;summen-seitenzahlen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-38&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Summen, Seitenzahlen ===&lt;br /&gt;
&lt;br /&gt;
Um es noch ein wenig interessanter zu gestalten fügt man noch das Gehalt hinzu, summiert es für die Monate und gesamt. Dazu noch die Seitenanzahl und einen Seitenzähler und eine Überschrift.&lt;br /&gt;
&lt;br /&gt;
Das Gehalt bekommt man, indem man das Gehalt aus den Feldern neben den Namen zieht. Das selbe macht man auch nochmal in das Band „Monat Group Footer 1“ und wählt hier die Aggregation „Sum“ aus, um die Summe zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Um einen Seitenzähler zu erhalten fügt man zunächst das Band „Page Footer“ hinzu und legt dort die Variable „PAGE_NUMBER“ ab. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Page_Number.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Eigenschaften“ → „Text field properties“ → „Evaluation Time“ wählt man hier „Now“ um die aktuelle Seitenanzahl zu bekommen und „Report“ um die gesamte Seitenanzahl zu erhalten. In dem Beispiel ist die Ausgabe z.B.: „Seite 2 von 6“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-steuern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-39&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche steuern ===&lt;br /&gt;
&lt;br /&gt;
Damit die drei Personen im Monat 2 nicht durch einen Seitenumbruch auseinandergerissen werden, gibt es einige Einstellungen in dem Band der Gruppe. Dazu einfach auf das jeweilige Band klicken, für welches die Einstellungen vorgenommen werden sollen (hier „Monat“) und dann in „Eigenschaften“ → „Group properties“ → „Keep Together“ anklicken oder wenn man möchte „Reprint header“ um den &amp;amp;quot;Header&amp;amp;quot; der Gruppe am Seitenkopf zu wiederholen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel im Designermodus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_Monat_Namen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_1_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_2_2_Monat_Namen_Ergebnis.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilen-alternierend-einfärben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-41&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilen alternierend einfärben ===&lt;br /&gt;
&lt;br /&gt;
Um nun bei mehreren Datensätzen auch noch den Überblick in den Zeilen zu behalten kann man jetzt auch noch den Hintergrund der Zeile abwechselnd farbig gestalten. Dazu Zieht man aus den „Reports Elements“ das „Rectangle“ in das „Detail 1“ Band&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und passt es der Größe des Bandes an.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Hintergrundfarbe kann man nun in den Eigenschaften in „Backcolor“ ändern. Damit dies nun nicht in jeder Zeile erscheint, sondern abwechselnd, fügt man noch in den Eigenschaften in „Print When Expression“ den Wert &amp;lt;span id=&amp;quot;anchor-42&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-43&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Boolean.valueOf( $V{PAGE_COUNT}.intValue() % 2 == 0 ) ein. &lt;br /&gt;
&lt;br /&gt;
Zur erläuterung:&lt;br /&gt;
&lt;br /&gt;
Die Variable „PAGE_COUNT“ zählt die Anzahl der Datensätze hoch. Mit „% 2“ wird diese Variable durch 2 geteilt und nur der Restwert ausgegeben. Als Ergebnis erhält man also in jeder ungeraden Zeile eine 1. Dieses Ergebnis wird nun mit der „0“ verglichen. Wenn dieser Ausdruck/Vergleich (expression) wahr ist, wird das Objekt, in diesem Fall der Hintergrund, angezeigt. Bei diesem Ausdruck erhält also jede gerade Zeile den Hintergrund. Möchte man lieber die ungeraden Zeilen hervorheben, schreibt man einfach eine 1 anstelle der 0 hinter „==“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis bei einer ungeraden Hervorhebung sieht z.B. so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Even_Odd_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel welches bereits in der Uni Mannheim benutzt wird ist die Ausgabe einer Rechnungslegungsliste. Das Beispiel zeigt nicht nur ein aufwändigeres Layout, sondern auch, wie man gruppierte Tabellen anlegt: Dabei sind die Zeilen der Tabelle im Detail 1 Band, und die Zwischensummen in den Gruppierungs-Bändern. Die Spaltenüberschriften der Tabelle befinden sich im untersten Group-Header-Band. Im Designermodus sieht das ganze folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und im Preview:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Beispiel_3_Uma_Ergebnis_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rahmenlinien-vorausschauend-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-44&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rahmenlinien &#039;&#039;&#039;vorausschauend setzen&#039;&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
Sowohl bei Text- als auch bei Static-Fields findet sich ein eigener Reiter zum setzen von Rahmeneigenschaften. Dort wird der Abstand des Inhaltes zum Rahmen des jeweiligen Feldes definiert, sowie Rahmenlinien gesetzt.&lt;br /&gt;
&lt;br /&gt;
Beim Setzen von Rahmenlinien wird empfohlen, dass bei nebeneinanderliegenden Feldern, welche durch eine Rahmenlinie getrennt werden, jeweils in beiden Feldern Rahmenlinien gesetzt werden und nicht nur in einem der beiden Felder. Denn beim Export in das PDF-Format ist ersichtlich ob nur eines der Felder oder beide Felder Rahmenlinien besitzen. Falls dies also nicht einheitlich umgesetzt wird, erscheinen Rahmenlinien an entsprechenden Stellen dünner beziehungsweise dicker (bei Excel-Dokumenten tritt dieser Effekt nicht auf):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_borders2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-45&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterberichte  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: In Edustore funktionieren Unterberichte nur, wenn der Dateiname der jrxml-Datei mit &amp;amp;quot;_xmlsource.jrxml&amp;amp;quot; endet. Dadurch wird dem Servlet mitgeteilt, dass die Datenquelle für den Bericht ein XML-Datenstrom ist. Dabei ist mit Performanceeinbußen zu rechnen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Außerdem muss beim Berichtsdesign die gleiche JasperReports Version genutzt werden wie im Server. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden eine Anleitung zur Erstellung eines Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-46&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Hauptberichts ===&lt;br /&gt;
&lt;br /&gt;
 Erzeugen Sie für den Unterbericht mit Hilfe des [[#2.1.3.Template erzeugen|outline|Template]][[#2.1.3.Template erzeugen|outline|-Generators]] in Edustore einen leeren Bericht, und speichern Sie diesen am besten im gleichen Verzeichnis wie den Hauptbericht. &lt;br /&gt;
&lt;br /&gt;
 Ziehen Sie dann das Subreport-Werkzeug in den Entwurfsbereich:&lt;br /&gt;
&lt;br /&gt;
Ggf.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport0_tool.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es startet der Subreport-Assistent. Hier geben Sie zunächst den Dateinamen oben an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt geben Sie eine Datenbank-Verbindung an. Hier wählen Sie &amp;amp;quot;Don&#039;t use any connection...&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Im nächsten Schritt werden Parameter angezeigt, zu diesem Zeitpunkt gibt es aber noch keine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klicken Sie einfach auf &amp;amp;quot;Weiter&amp;amp;quot;. Sie werden dann aufgefordert, einen Dateipfad für den Unterbericht zu vergeben. IReport legt diesen standardmäßig in das gleiche Verzeichnis wie den Hauptbericht. Für Edustore sollten Sie dies auch tun.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass Sie beim Unterbericht nicht die *.jrxml-Datei verlinken, sondern die *.jasper-Datei, d.h. den kompilierten Report.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport1_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach sehen Sie einen Platzhalter für den Unterbericht im Entwurfsbereich. Beachten Sie bitte daß die Größe des Platzhalters unwichtig ist: die Ausdehnung des Unterberichts wird im Unterbericht definiert. Der Platzhalter ist lediglich wichtig, um die linke obere Ecke des Unterberichts festzulegen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Rechts neben dem Platzhalter sehen Sie die Eigenschaften des Unterberichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_none.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Unterbericht arbeitet meist mit Übergabe von Parametern, z.B. will man vom Hauptbericht den Inhalts des Feldes &amp;amp;quot;Kostenstelle&amp;amp;quot; an den Unterbericht übergeben. Dies müssen wir in den Eigenschaften des Unterberichts &amp;amp;quot;deklarieren&amp;amp;quot;. In der Zeile &amp;amp;quot;Parameters&amp;amp;quot; steht nach Bedienung des Assistenten noch kein Wert. Für die Datenquelle XML gibt es außerdem einen Parameter &amp;lt;span id=&amp;quot;anchor-47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_DATA_DOCUMENT, der immer übergeben werden muss: Die XML-Datenquelle des Hauptberichts. Hier eine Übersicht, welche Parameter übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport10_parameters.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Zeilen mit Großschreibung sind die vorgegebenen Werte, der Parameter &amp;amp;quot;Kst&amp;amp;quot; speist sich aus dem JR-Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;. Das Beispiel zeigt, daß der Name für den Parameter beliebig ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis für Unterberichte mit Dezimalzahlen&#039;&#039;&#039;: Wenn der Unterbericht mit Zahlen mit Nachkommastellen arbeitet, und Sie in JasperReports testen, dann müssen Sie noch die [[#3.1.2.Datenquelle erzeugen|outline|Parameter]] &amp;lt;span id=&amp;quot;anchor-48&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_LOCALE und &amp;lt;span id=&amp;quot;anchor-49&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;XML_NUMBER_PATTERN wie folgt übergeben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport2_params_number.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unterbericht-mit-header-und-footer-vom-hauptbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-50&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Unterbericht mit Header und Footer vom Hauptbericht ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Unterbericht in einem normalen Gruppen- oder Detail-Band liegt, wird der Header und Footer vom Hauptbericht automatisch mitbenutzt. In vielen Fällen möchte man aber den Unterbericht nur ein mal ausgeben und legt ihn daher in das Summery-Band. Hier wird Standardmäßig der Header und Footer nicht ausgegeben oder wiederholt. Möchte man aber z.B. die Seitenzahl die im Footer liegt weiterhin angezeigt bekommen, gibt es eine Eigenschaft vom Hauptbericht, die man nur aktivieren braucht. Diese Eingenschaft nennt sich: Summary with Page Header and Footer.&lt;br /&gt;
&lt;br /&gt;
Also einfach auf den Hauptbericht auswählen und in Eigenschaften diesen Punkt aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport_header_footer.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;konfiguration-des-unterberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-51&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Konfiguration des Unterberichts ===&lt;br /&gt;
&lt;br /&gt;
Nun können wir den Unterbericht öffnen, indem wir über dem Platzhalter die rechte Maustaste betätigen und &amp;amp;quot;Open Subreport&amp;amp;quot; wählen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport3_open.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es erscheint ein neues Fenster mit einem leeren Entwurfsbereich. Sie könnten nun loslegen und im Detailbereich verschiedene Elemente gestaltet. Aber man muss bedenken daß ein Unterbericht für jeden Datensatz im Hauptbericht ausgeführt und eingebettet wird. Daher wird man vermutlich in den meisten Fällen im Unterbericht auf einen Filter zurückgreifen. Hier kommt dann wieder der oben genannte Parameter, z.B. &amp;amp;quot;Kst&amp;amp;quot; ins Spiel: Als ersten deklarieren wir den Parameter im Unterbericht, indem wir Links bei den Parametern die rechte Maustaste drücken, und &amp;amp;quot;Hinzufügen...&amp;amp;quot; wählen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Standardmäßig nennt IReport den Parameter &amp;amp;quot;parameter1&amp;amp;quot;. Rechts können wir in den Eigenschaften des Parameters den Namen ändern, und &amp;amp;quot;Use as a prompt&amp;amp;quot; abwählen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_param2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Änderungen sind nicht notwendig.&lt;br /&gt;
&lt;br /&gt;
Wir ergänzen nun die &amp;amp;quot;Report Query&amp;amp;quot; [[Datei:JasperReports-Handbuch_report_query.png]] des Unterberichts von&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/ergebnisse/ergebnis/ergebniselement/sqlerg/row&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
um einen Filter, der mit der Abfragesprache XPATH formuliert wird. Im obigen Beispiel würden wir jetzt nur die Zeilen der Datenquelle auswählen, wo die Nummer der Kostenstelle mit der des Hauptberichts übereinstimmt. Wir erinnern uns: letztere steht im Parameter &amp;amp;quot;Kst&amp;amp;quot;. Anhand der vorhandenen Report Query können wir sehen, dass die Kostenstelle in den Spalten (&amp;amp;quot;col&amp;amp;quot;) mit der id=5 steht. Der Ausdruck wird also um den Filter &amp;amp;quot;&#039;&#039;[col[@id=&amp;amp;quot;5&amp;amp;quot;]/wert=&#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-52&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;$P{Kst}&#039;]&#039;&#039;&amp;amp;quot; ergänzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport4_query.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Nun ändern wir im Entwurfsbereich des Unterberichts das Layout: für das aktuelle Beispiel wollen wir im Unterbericht eine Summe der Beträge für jede Kostenstelle ausgeben. Dazu müssen wir zunächst eine Gruppierung nach Kostenstelle hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Gruppierungsassistenten wählen wir das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot; als Gruppierungsmerkmal, und im nächsten Schritt sagen wir, daß ein Gruppenkopf hinzugefügt werden soll:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist die Gruppierung als Band verfügbar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In die Gruppierung ziehen wir dann das Feld &amp;amp;quot;Summe&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beim &amp;amp;quot;Loslassen&amp;amp;quot; des Feldes werden wir gefragt, ob wir eine Aggregatfunktion nutzen wollen; wir wählen hier die Summierung:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach ist das Feld verfügbar. Wir setzen noch das Label &amp;amp;quot;Summe:&amp;amp;quot; davor. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport5_group6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Den Detailbereich brauchen wir eigentlich nicht, wir können den ganz schmal machen. Danach speichern wir den Unterbericht, und gehen wieder zum Hauptbericht. Hier setzen wir den Unterbericht direkt unter das Feld &amp;amp;quot;Kostenstelle&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport15_align.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Bericht mit der jew. Datenquelle ausführen. Das Ergebnis läßt je nach Datenmenge ein bisschen auf sich warten:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_subreport20_erg.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einhängen-des-berichts-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-53&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einhängen des Berichts in Edustore ===&lt;br /&gt;
&lt;br /&gt;
Damit der Bericht auch im Server nutzbar ist, muss noch folgendes eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
* Der Server sollte ausreichend RAM haben (Variable CATALINA_OPTS), weil hier XML als Datenquelle verarbeitet wird.&lt;br /&gt;
* Im Hauptbericht gibt es einen neuen Parameter SUBREPORT_DIR. Setzen Sie hier den Defaultwert (&amp;amp;quot;Default value Expression&amp;amp;quot; auf den Pfad, in dem die Dateien liegen (z.B. &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-54&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-55&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/home/superx/webserver/tomcat/webapps/superx/WEB-INF/reports/&amp;amp;quot;).&lt;br /&gt;
* Kopieren Sie die .jasper Datei des Unterberichts in dieses Verzeichnis. &lt;br /&gt;
* Bei Nutzung von Versionskontrollsystemen haben Sie die *.jasper-Dateien vermutlich ignoriert (gitignore / svnignore). Sie müssen die Dateien daher mit &amp;amp;quot;-f&amp;amp;quot; adden / committen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorsicht beim Einsatz von JasperSoft Studio: Die Anwendung erzeugt bei der Einzelbearbeitung eines Unterberichts nicht automatisch eine entsprechende .jasper-Datei beim Previewen des Hauptberichts (iReport machte das). Man muss also in Jaspersoft Studio im Bearbeitungsfenster oben immer &amp;amp;quot;Compile Report&amp;amp;quot; anklicken, um eine neue .jasper Datei zu erzeugen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-56&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedienung-des-assistenten-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-57&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedienung des Assistenten für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Für die Erstellung von Kreuztabellen gibt es einen eigenen Assistenten. Vorab sollte man aber zunächst ein &amp;amp;quot;Summary&amp;amp;quot;-Band erzeugen. Im folgenden Beispiel haben wir alle anderen Gruppierungen und Detail-Bands entfernt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir das Crosstab-Element in den Summary Band. Es erscheint der Assistent. Als Datenquelle nutzen wir die Abfrage des Berichts. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als nächsten definieren wir die Zeilendimension des Berichts:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen z.B. die Abschlüsse. Danach definieren wir die Spalten-Dimension:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir wählen das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;. Danach definieren wir das Merkmal, das in den Zellen ausgegeben werden soll. Dies ist die Summe der Studierenden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Schluß kann man ein Layout festlegen, und Zeilen- und Spaltensummen erzeugen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Entwurfsbereich erscheint ein neues Fenster mit der Kreuztabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab7.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können wir nun Spaltenbreiten und Überschriften ändern:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab9.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_crosstab8.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nachbearbeitung-des-kreuztabellen-assistenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-58&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nachbearbeitung des Kreuztabellen-Assistenten ===&lt;br /&gt;
&lt;br /&gt;
Der Assistent liefert nur einfache Kreuztabellen, ggf. wollen Sie diese im Nachhinein anpassen. Sie können z.B. mehr als zweistufige Hierarchien in Kreuztabellen einrichten, indem Sie im Report Inspector manuell neue Merkmale anlegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_new_row.png]]&lt;br /&gt;
&lt;br /&gt;
Auch bei &amp;amp;quot;Measures&amp;amp;quot; können Sie neue &amp;amp;quot;abhängige Variablen&amp;amp;quot; anlegen, z.B. wenn Sie in einer Tabelle mit den Zeilen &amp;amp;quot;Ausgaben&amp;amp;quot; und &amp;amp;quot;Einnahmen&amp;amp;quot; die Ausgaben mit negativem Vorzeichen versehen wollen und dann saldieren wollen: Sie würden ein neues &amp;amp;quot;Measure&amp;amp;quot; anlegen, mit der Calculation=&amp;amp;quot;Sum&amp;amp;quot;, Typ &amp;amp;quot;java.lang.Float&amp;amp;quot;, und der folgenden Expression bekommen alle Ausgaben ein negat. Vorzeichen:&lt;br /&gt;
&lt;br /&gt;
($F{Kostenart}==&amp;amp;quot;Ausgaben&amp;amp;quot;)?-$F{Betrag}:$F{Betrag}&lt;br /&gt;
&lt;br /&gt;
Das neue Measure können Sie dann in die Zeilen- oder Spaltensummen ziehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-im-gruppenfuß&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-59&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen im Gruppenfuß ===&lt;br /&gt;
&lt;br /&gt;
Kreuztabellen lassen sich nicht nur im Summary Band nutzen, sondern auch in Gruppenfuß/Gruppenkopf-Bändern. Wenn Sie die Kreuztabelle z.B. in einen Groupfooter legen, müssen Sie den &amp;amp;quot;Reset type“ der Gruppe anpassen. Das machen Sie indem Sie ein rechts klick auf die Kreuztabelle machen und dann auf &amp;amp;quot;Crosstab data&amp;amp;quot; klicken. Dort stellen Sie den &amp;amp;quot;Reset type&amp;amp;quot; auf &amp;amp;quot;Group&amp;amp;quot; und die &amp;amp;quot;Reset group&amp;amp;quot; auf die Gruppe in der die Kreuztabelle gelegt wurde. Wenn Sie das nicht machen funktioniert der Report nicht! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kreuztabellen-mit-virtuellen-dimensionen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-60&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kreuztabellen mit virtuellen Dimensionen ===&lt;br /&gt;
&lt;br /&gt;
Sie können auch virtuelle Dimensionen in Kreuztabellen nutzen, indem Sie ähnlich wie bei der [[#2.2.4.Gruppierung ohne eigenes Band|outline|Gruppierung ohne eigenes Band]] mit Variablen arbeiten. &lt;br /&gt;
&lt;br /&gt;
Um z.B. alle Studienfächer im Feld &amp;amp;quot;1. Fach&amp;amp;quot; auszugeben, und nur die Fächer Mathematik, Physik und Biologie zu einem Fach &amp;amp;quot;Naturwissenschaften&amp;amp;quot; zusammenzufassen, legen Sie eine neue Variable &amp;amp;quot;fachgruppe&amp;amp;quot; an, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell.png]]&lt;br /&gt;
&lt;br /&gt;
In der Kreuztabelle können Sie nun z.B. in den Zeilen die Variable &amp;amp;quot;fachgruppe&amp;amp;quot; auswählen, und erhalten eine Tabelle mit der &amp;amp;quot;künstlichen&amp;amp;quot; Zeile &amp;amp;quot;Naturwissenschaften&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_gruppierung_virtuell2.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sortierung-in-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-61&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Sortierung in Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
Zeilen- oder Spaltendimensionen werden in Kreuztabellen immer alphabetisch sortiert, egal wie die Sortierung in der Datenquelle ist. Das ist in der Regel kein Problem, aber wenn z.B. eine Zeilendimension anders sortiert werden soll, geht das nicht ohne weiteres. Hier ein Problembeispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_falsch.png]]&lt;br /&gt;
&lt;br /&gt;
Das Balkendiagramm übernimmt die Sortierung nach dem Schlüssel der Gehaltsgruppe aus der Datenquelle. In der Kreuztabelle wird die Zeilendimension &amp;amp;quot;Bezeichnung der Gehaltsgruppe&amp;amp;quot; angezeigt, und diese sortiert alphabetisch, was an dieser Stelle aber unsinnig ist: Der Eintrag &amp;amp;quot;Kein Einkommen&amp;amp;quot; sollte ganz oben stehen.&lt;br /&gt;
&lt;br /&gt;
Wir schauen uns zunächst die Definition der Kreuztabelle an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig1.png]]&lt;br /&gt;
&lt;br /&gt;
Die Zeilendimension sortiert aufsteigend nach Bezeichnungstext. Man kann auch keine alternative Expression als Sortierkriterium angeben. Wir müssen also einen Trick anwenden: wir nehmen den Sortierschlüssel mit in die &amp;amp;quot;Bucket Expression&amp;amp;quot; der Zeilendimension auf, und setzen ihn als Präfix davor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach ist die Sortierung richtig:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig3.png]]&lt;br /&gt;
&lt;br /&gt;
Aber optisch ist das natürlich unschön, der Sortierschlüssel sollte am besten gar nicht angezeigt werden. Wir lösen das, indem wir den Anzeigetext wiederum so abwandeln, dass der erste Buchstabe nicht sichtbar ist. Java bietet dazu die Funktion &amp;amp;quot;substring()&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig4.png]]&lt;br /&gt;
&lt;br /&gt;
Und siehe da: die Sortierung und Anzeige ist perfekt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztab_sortierung_richtig5.png]]&lt;br /&gt;
&lt;br /&gt;
Dies ist nur ein Beispiel, wie man mit Hilfe von Java Expressions die Anzeige von Kreuztabellen variieren kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;parameter-für-kreuztabellen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-62&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Parameter für Kreuztabellen ===&lt;br /&gt;
&lt;br /&gt;
In Kreuztabellen hat man keinen direkten Zugriff auf die Variablen und Felder des Hauptberichts. Man kann die Werte aber als Parameter übergeben. Dazu gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie machen den Parameter im Crosstab-Element bekannt, hier z.B. der Parameter &amp;amp;quot;RSZ&amp;amp;quot; für Regelstudienzeit):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach übergeben Sie den Parameter im Hauptbericht. Mit Rechtsklick auf das Cosstab Element können Sie eine Parameters-Map Expression hinterlegen, das ist einfach eine Zuweisung von einer oder mehreren Variablen zu jeweils einem Wert in der Groovy-Syntax mit &amp;amp;quot;[Variable:Wert,...]&amp;amp;quot;. In dem Beispiel unten weisen wir dem Parameter &amp;amp;quot;RSZ&amp;amp;quot; den Wert des Feldes &amp;amp;quot;RSZ&amp;amp;quot; zu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param2.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können wir den Parameter in der Kreuztabelle nutzen, z.B. um in einer Spaltenüberschrift nur dann eine Zahl mit Soll-Kreditpunkten anzuzeigen, wenn die Fachsemester innerhalb der Regelstudienzeit liegen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param3.png]]&lt;br /&gt;
&lt;br /&gt;
Und hier das Ergebnis für einen Studiengang mit 6 Semestern Regelstudienzeit:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_crosstab_param5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;manuelle-kreuztabelle&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-63&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Manuelle Kreuztabelle ===&lt;br /&gt;
&lt;br /&gt;
Wenn die gewünschte Konfiguration/Einstellungen in der Kreuztabelle nicht möglich ist, kann eine Kreuztabelle mit Einschränkungen auch selber erstellt werden. Im Beispiel mit Semestern, muss vorher abgeschätzt werden wie viele Semester vorraussichtlich in den Spalten vorkommen werden. Für jedes Semester (z.B. für 10 Semester) wird dann eine Variable angelegt. Die erste bekommt das höchste Semester (wie im Screenshot zu sehen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das zweite Semester wir dann das höchste welches aber unterhalb von dem ersten liegen soll, usw.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_kreuztabelle_manuell_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Semester können nun als Spalten verwendet werden mit der Option „blank when null“.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;layout-von-kreuztabellen-bearbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-64&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Layout von Kreuztabellen bearbeiten  ===&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt befasst sich mit Themen zur Layoutanpassung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;total-einer-row-group-entfernen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-65&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Total einer ‚Row Group‘ entfernen ====&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue ‚Row Group‘ angelegt wird, wird automatisch ein dazugehöriges Total-Feld erzeugt und mit eingefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_001.png|642x367px]]&lt;br /&gt;
&lt;br /&gt;
Das ist in diesem Falle nicht erwünscht. Um dieses Feld zu entfernen, wird in den &amp;lt;span id=&amp;quot;anchor-66&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-67&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Properties der &amp;lt;span id=&amp;quot;anchor-68&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Row Group‘ die ‚Total Position‘ = ‚none’ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_002.png|642x263px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;header-von-row-groups-für-jede-zeile-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-69&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Header von ‚Row Groups‘ für jede Zeile wiederholen ====&lt;br /&gt;
&lt;br /&gt;
Im folgenden Screenshot ist eine Kreuztabelle dargestellt, bei welcher die Header der ‚Row Groups‘ nur einmal dargestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_003.png|434x315px]]&lt;br /&gt;
&lt;br /&gt;
Zwar ließe sich das Feld noch, so dass es bis zum nächsten ‚Row Header‘ reicht, aber in diesem Beispiel ist erwünscht, dass sich der Header für jede Zeile wiederholt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_004.png|530x420px]]&lt;br /&gt;
&lt;br /&gt;
Dazu wird die Funktion ‚Merge Header Cells‘ in den Properties der ‚Row Group‘ deaktiviert. Es kann sein, dass die Funktion einmal aktiviert und dann wieder deaktiviert werden muss, damit sie als deaktiviert erkannt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_005.png|642x275px]]&lt;br /&gt;
&lt;br /&gt;
Damit der Text in der ersten Spalte nicht abgeschnitten wird, wurde ‚Stretch with Overflow‘ in den Text-Field-Properties ausgewählt. Dadurch ist eine Lücke bei den anderen Spalten entstanden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_006.png|509x404px]]&lt;br /&gt;
&lt;br /&gt;
Um diese Lücke zu schließen wird der ‚Stretch Type‘ in allen folgend eingerahmten Textfeldern auf ‚Relative To Band Height (deprecated)‘ gesetzt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_007.png|642x322px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;static-field-und-text-field-frei-gestaltenbewegen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-70&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Static Field‘ &amp;lt;span id=&amp;quot;anchor-71&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;und ‚Text Field‘ frei gestalten/bewegen ====&lt;br /&gt;
&lt;br /&gt;
Im Default sind ‚Static Field‘ und ‚Text Field‘ in einer Kreuztabelle nicht frei positionierbar/gestaltbar. Um das zu ändern, wird im jeweiligen Bereich das Layout auf ‚Free Layout‘ eingestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_008.png|642x279px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reihenfolge-der-row-groups-ändern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-72&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reihenfolge der ‚Row Groups‘ ändern ====&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der ‚Row Groups‘ muss nachträglich im ‚Outline‘-Bereich geändert werden. Dies erfolgt per Drag and Drop im rot markierten Bereich:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_009.png|642x437px]]&lt;br /&gt;
&lt;br /&gt;
Die Textfelder im Design-Bereich zu verschieben, reicht nicht aus, denn die ‚Row Group‘ selbst bleibt wo sie ist und dann würde nur das Textfeld in eine andere Row Group verschoben. Im folgenden Negativbeispiel wurden nachträglich im Design-Bereich die Textfelder Intervall und Datenherkunft vertauscht. Dadurch sind sie in der jeweils falschen ‚Row Group‘ gelandet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_010.png|642x387px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-73&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme ==&lt;br /&gt;
&lt;br /&gt;
Um einen Bericht ansprechend zu gestalten dürfen Diagramme wie Torten- oder Balkendiagramme nicht fehlen. Diese in einen Bericht einzubringen ist auch nicht schwer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Vorab sei aber darauf hingewiesen: Grafiken in JasperReports arbeiten nicht analog zu Kreuztabellen, in denen Daten nach Zeilen- oder Spaltenmerkmalen automatisch gruppiert und summiert werden. Für Grafiken sollten Sie gewährleisten, dass die Datenbasis für die Grafik &#039;&#039;&#039;bereits gruppiert und summiert&#039;&#039;&#039; sind, Sie können also keine Einzeldaten für Grafiken verwenden. Bei Datenblatt-Berichten in Edustore ist dies gewährleistet, wenn Sie im Feld &amp;amp;quot;Felder&amp;amp;quot; nur die Felder selektieren, nach denen in der Grafik gruppiert werden soll. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-74&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme ===&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben eine Tabelle, die die Studierendenzahl mehrerer Semester nach Geschlecht aufführt. Hier ein Screenshot der Datengrundlage:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Tabelle enthält die Merkmale Geschlecht, Semester und Summe. Daraus erzeugen wir in Jaspersoft Studio (und weiter unten in iReport) ein Balkendiagramm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-75&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Zunächst definieren wir die Sortierung der Daten. Im &amp;amp;quot;Dataset and Query Dialog&amp;amp;quot; sind die Felder der Datenquelle aufgeführt. Unten finden Sie den Reiter &amp;amp;quot;Sorting&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_query2.png]]&lt;br /&gt;
&lt;br /&gt;
Damit die Grafik richtig funktioniert müssen wir nach beiden Merkmalen (Semester und Geschlecht) sortieren. Das Semester sollte nicht alphabetisch nach Namen sortiert sein, sondern nach dem Zahlenschlüssel. Sonst ständen alle Wintersemester untereinander, und davor alle Sommersemester.&lt;br /&gt;
&lt;br /&gt;
Dann ziehen wir aus der Palette das Chart Element in das Summary Band. Es startet automatisch ein &amp;amp;quot;Chart Wizward&amp;amp;quot;. Hier wählen wir &amp;amp;quot;Stacked Bar&amp;amp;quot; als Grafiktypen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun müssen wir ihm sagen welches Feld die Y-Achse darstellt (hier &amp;amp;quot;Summe&amp;amp;quot;), und welches die X-Achse (hier &amp;amp;quot;Semester der Belegung&amp;amp;quot;). Das Merkmal zur Unterscheidung der Balkenfarben (&amp;amp;quot;Series&amp;amp;quot;) ist das Geschlecht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach klicken wir auf &amp;amp;quot;Finish&amp;amp;quot;, und die Grafik wird als Platzhalter im Summary Band eingefügt. Dort definieren wir noch die Breite der Grafik:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Entwurf fertiggestellt. So sieht die Grafik aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard3.png]]&lt;br /&gt;
&lt;br /&gt;
Es ist etwas ungünstig dass die Labels der X-Achse nicht ganz lesbar sind. Wir lösen dies mit Rotation der Labels um 45 Grad:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht es besser aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard5.png]]&lt;br /&gt;
&lt;br /&gt;
Das Beispiel lädt zur weiteren Verfeinerung an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einfache-diagramme-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-76&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einfache Diagramme in iReport ====&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht in iReports &amp;amp;quot;Refresh Preview Data&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Spalten der Tabelle sind selbsterklärend. Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Wir wählen hier das Merkmal &amp;amp;quot;Geschlecht&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart3.png]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei der X-Achse (in JasperReports heißt das &amp;amp;quot;Category Axis&amp;amp;quot;) nehmen wie das Merkmal Semester, und bei der &amp;amp;quot;Value expression&amp;amp;quot; die Summe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist die Definition beendet. Wir können dann in den Eigenschaften der Grafik noch eine &amp;amp;quot;Title Expression&amp;amp;quot; festlegen, z.B. &amp;amp;quot;Studierende nach Semester und Geschlecht&amp;amp;quot;. In der Vorschau sieht die Grafik so aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Wintersemester werden noch nicht abgedruckt, dazu ändern wie die &amp;amp;quot;Label rotation&amp;amp;quot; auf 30°. Dies lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_designer_chart6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wichtig für die Grafik war die Sortierung in der Datenquelle nach &amp;amp;quot;dim_semester.quell_id&amp;amp;quot;. Mit &amp;amp;quot;Series Colors&amp;amp;quot; kann man die Farbe der Balken ändern etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Wenn sie jeden Balken bzw. Teil des Balkens zusätzlich mit den Werten ausgeben wollen, müssen sie in den Chart-Eigenschaften unter den &amp;amp;quot;Bar*Properties&amp;amp;quot; das Ankreuzfeld &amp;amp;quot;Show labels&amp;amp;quot; ankreuzen. Wenn es bereits angekreuzt ist, sollten Sie das Kreuz einmal entfernen und wieder setzen (Bug in iReport seit Version 4.x)&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-nach-tabelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-77&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme nach Tabelle ausgeben ===&lt;br /&gt;
&lt;br /&gt;
Üblicherweise ähnelt ein Diagramm in JasperReports einer Kreuztabelle. Wenn nun ein Diagramm nach Vorgabe einer Tabelle ausgegeben werden soll, muss ein wenig getrickst werden. &lt;br /&gt;
&lt;br /&gt;
Erläuterung:&lt;br /&gt;
&lt;br /&gt;
In der Series expression werden die Zeilen angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Category expression werden die Spalten angegeben.&lt;br /&gt;
&lt;br /&gt;
In der Value expression wird der Wert angegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um ein Diagramm nun zu erstellen muss pro Series + Category eine Categorie series angelegt werden und das entsprechende Feld angegeben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;diagramme-mit-berechneten-werten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-78&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Diagramme mit berechneten Werten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die einem Diagramm zugrunde liegende Tabelle noch Berechnungen erfordert, muss man mit Variablen arbeiten. Als Beispiel wird hier die Maske &amp;amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;amp;quot; benutzt. Das Ergebnis wird eine Tabelle mit Balkendiagramm der &amp;amp;quot;Studierende und Studienanfänger im 1. Fachsemester (Zeitreihe)&amp;amp;quot; sein.&lt;br /&gt;
&lt;br /&gt;
Ein bereits fertiges Datenblatt könnte folgendermaßen aussehen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_datenblatt_ohne_grafik.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier fehlt jetzt die Grafik, die in dem noch leeren Band &amp;amp;quot;Summary&amp;amp;quot; eingefügt werden soll. Wenn das Band noch nicht eingefügt wurde, einfach mit Rechtsklick auf Summary (im &amp;amp;quot;Report Inspector&amp;amp;quot;) und dann auf &amp;amp;quot;Add Band&amp;amp;quot; um es anzuzeigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_how_to_add_summary.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun ziehen wir aus dem &amp;amp;quot;Report Elements&amp;amp;quot; die &amp;amp;quot;Chart&amp;amp;quot; in das Band &amp;amp;quot;Summary&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_in_summary_ziehen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dabei öffnet sich ein Fenster in dem Sie sich die Art der Grafik auswählen können. In diesem Beispiel wählen wir &amp;amp;quot;Stacked Bar 3D&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Klick auf &amp;amp;quot;OK&amp;amp;quot;, geht es weiter mit den Inhalten der Grafik.&lt;br /&gt;
&lt;br /&gt;
Als Dataset gibt es hier nur eine Auswahl. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_dataset_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Daher akzeptieren wir dies mit einem Klick auf &amp;amp;quot;Weiter&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Die &amp;amp;quot;Series&amp;amp;quot; sind die verschiedenen Unterteilungen eines Balkens. Da es in diesem Beispiel dafür keine Variable gibt, wird später noch per Hand eine Weitere hinzugefügt. Wenn es bei Ihnen möglich ist, klicken Sie rechts neben dem Feld auf den Button und fügen dort eine Variable ein. In diesem Beispiel wird als fester String &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-79&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Frauen im 1. FS&amp;amp;quot; eingegeben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_series_auswaehlen.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Und dann wieder auf &amp;amp;quot;Weiter&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Auf der X-Achse soll in diesem Beispiel die Semester erscheinen und auf der Y-Achse die Anzahl der Weiblichen Studierenden im 1. Fachsemester. Um dies zu erhalten wählt man als &amp;amp;quot;category expression&amp;amp;quot; die Variable &amp;amp;quot;Semester&amp;amp;quot; aus. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies geschieht, indem man auf den Button rechts neben dem Feld klickt, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dann doppelt auf das Feld &amp;amp;quot;Semester&amp;amp;quot; klickt und dann auf &amp;amp;quot;Apply&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In den meisten Fällen werden hier Felder benutzt. Wenn Sie jedoch z.B. eine Variable benutzen wollen, müssen Sie nach dem Klick rechts auf den Button in dem neuen Fenster links unten z.B. auf &amp;amp;quot;Variables&amp;amp;quot; oder &amp;amp;quot;Parameter&amp;amp;quot; klicken. Dabei ändert sich der Inhalt von dem mittleren Feld. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_category_auswaehlen3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier können Sie nun auch eine andere Auswahl treffen.&lt;br /&gt;
&lt;br /&gt;
Das selbe gilt auch für &amp;amp;quot;value expression&amp;amp;quot;. Der Unterschied ist hierbei, die &amp;amp;quot;category expression&amp;amp;quot; ist die Bezeichnung und in &amp;amp;quot;value expression&amp;amp;quot; dürfen nur Zahlen vorkommen, welche von JasperReports addiert werden können. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wählen wir nun z.B. das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_value_auswaehlen2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun noch abschließend auf Beenden drücken und wir erhalten das erste Ergebnis. Über &amp;amp;quot;Preview&amp;amp;quot; wird nun das Diagramm mit den Frauen aus dem 1. Fachsemester über die Semester angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_erstes_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um nun die männlichen Studenten aus dem 1. FS noch hinzuzufügen oder Änderungen an der gerade getroffenen Auswahl vorzunehmen klickt man mit der rechten Maustaste auf die Chart und dann auf &amp;amp;quot;Chart Data&amp;amp;quot;. In dem Reiter &amp;amp;quot;Details&amp;amp;quot; kann man nun die eben angelegte Category bearbeiten/entfernen oder auch eine neue anlegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_details.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier wollen wir jetzt noch die männlichen Studierende aus dem 1. FS noch Hinzufügen. Also klickt man auf &amp;amp;quot;Hinzufügen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Eingabe funktioniert hier genau wie in dem Assistenten bei der Erstellung einer neuen Chart. Nur taucht jetzt das Problem auf, dass es kein Feld mit den Männlichen Studierenden gibt, sondern nur gesamt. Die Lösung ist aber ganz einfach. Zunächst geht man wieder in den &amp;amp;quot;Expression editor&amp;amp;quot; der &amp;amp;quot;Value expression&amp;amp;quot; und wählt das Feld &amp;amp;quot;1. FS gesamt&amp;amp;quot; aus, setzt dahinter ein Minuszeichen und danach wählt man noch das Feld &amp;amp;quot;1. FS Frauen&amp;amp;quot; aus. Jasper berechnet dann jeweils das Ergebnis und benutzt dieses als Value. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_chart_m_std_1fs_hinz_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun erhalten wir als Ergebnis folgende Tabelle:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt noch viele Änderungsmöglichkeiten unter Einstellungen wie z.B. &amp;amp;quot;Label rotation&amp;amp;quot; lässt die Schrift unter den Balken rotieren, damit längere Schriftzüge möglich sind und &amp;amp;quot;Series Colors&amp;amp;quot; um die Farbe der Balken zu ändern. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_zweites_ergebnis1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;chart-customizer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-80&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Chart Customizer ===&lt;br /&gt;
&lt;br /&gt;
Mit JasperSoft Studio können die über sog. &amp;amp;quot;Chart Customizer&amp;amp;quot; Details bzgl. des Layouts vor Diagrammen steuern. Im folgenden ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
Wir haben ein einfaches Balkendiagramm, in dem wir eine (automatisch) ermittelte Y-Achse mit Werten von 0-15 haben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wollen wir den Bereich auf 12 (in 2er-Schritten ändern). Man könnte dies ganz leicht über die Eigenschaften ändern:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man aber nicht die Schrittweite ändern. Wir legen dazu einen Chart Customizer vom Typ &amp;amp;quot;Value Axis Range and Tick&amp;amp;quot; an:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und damit sieht das Diagramm so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_chart_customizer_range3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Y-Achse zählt nun in 2er Schritten von 0 bis 12.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch ein Hinweis: Bei Y-Achsen mit kleinen Wertebereichen kann es vorkommen, dass JR die Y-Achse automatisch mit Intervallen mit Nachkommastellen versieht, also z.B. 1 - &amp;lt;span id=&amp;quot;anchor-81&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;1,5 - 2 - 2,5 etc. Bei manchen Maßen macht die Nachkommastelle keinen Sinn (z.B. wenn Studierende gezählt werden). Um das zu ändern gehen Sie in der Eigenschaften der Y-Achse (Chart → Value axis) und setzen bei der Eigenschaft &amp;amp;quot;Value axis tick label mask&amp;amp;quot; den Wert &amp;amp;quot;#&amp;amp;quot; (Pattern für ganzzahlig) ein. Damit wird nur noch ganzahlig hochgezählt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;balken-labels&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-82&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Balken Labels ===&lt;br /&gt;
&lt;br /&gt;
In Balkendiagrammen können die exakten Zahlen nicht genau ermittelt werden. Aus diesem Grund wird oft gewünscht, die Zahlen noch mal schriftlich darzustellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_balken_labels_1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um die Zahlen anzeigen zu lassen muss einfach in den Chart Properties unter Advanced „Common Chart Properties → Plot → Show Labels“ auf true gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-83&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklets ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-84&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ab JR 6.2 oder höher (d.h. SuperX-Kernmodul 4.8 oder HISinOne-BI 2018.12) gibt es die Möglichkeit, Berichts-&amp;amp;quot;Bücher&amp;amp;quot; mit Deckblatt, Inhaltsverzeichnis und Schlußseite zu erstellen. Die Erstellung ist übersichtlicher als eine Kombination aus Haupt- und Unterbericht, und bietet beim Seitenlayout mehr Optionen, z.B. kann man in einem Booklet Hoch- und Querformat kombinieren.&lt;br /&gt;
&lt;br /&gt;
Englische Anleitungen siehe &lt;br /&gt;
&lt;br /&gt;
https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/report-books&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wg. der Version ist diese Möglichkeit in iReport nicht mehr verfügbar, Sie müssen JasperSoft Studio nutzen. Wenn Sie dort mit File -&amp;amp;gt; New einen neuen Report erzeugen, können Sie bei Report type den Wert &amp;amp;quot;Book report&amp;amp;quot; wählen. Der Assistent fragt Sie dann, ob Sie Deckblatt, Inhaltsverzeichnis und die Schlußseite benötigen, kreuzen Sie die jew. Position an. Sie erhalten danach ein Entwurfsfenster mit dem Hauptbericht, der drei Abschnitte enthält: Das &amp;lt;span id=&amp;quot;anchor-85&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Deckblatt und Inhaltsverzeichnis (&amp;amp;quot;Cover and table of contents&amp;amp;quot;), den Buchinhalt (&amp;amp;quot;Content&amp;amp;quot;) und die Schlußseite (&amp;amp;quot;Backcover&amp;amp;quot;):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Datei speichern, werden die jew. Unter-Dateien automatisch mit angelegt, mit dem Zusatz &amp;lt;span id=&amp;quot;anchor-86&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;*_cover.jrxml&amp;amp;quot;, &amp;amp;quot;*_toc.jrxml&amp;amp;quot; und &amp;amp;quot;*_backcover.jrxml&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hauptbericht-im-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-87&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hauptbericht im Booklet ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;aufbau-des-hauptberichts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-88&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Aufbau des Hauptberichts ====&lt;br /&gt;
&lt;br /&gt;
Startpunkt beim Booklet ist der Hauptbericht. Dieser hat keine &amp;amp;quot;Bänder&amp;amp;quot; im Sinne einer Ergebnisausgabe, insbesondere gibt es kein Detailband. Trotzdem arbeitet der Hauptbericht mit einer Datenquelle im Sinne eines Detailbandes, hier heißt das Band &amp;amp;quot;Content&amp;amp;quot;. Für Makroberichte in SuperX-/BI müssen wir für alle Unterberichte dieselbe XML-Quelle verwenden, d.h. wir müssen im Hauptbericht genau eine Zeile der XML-Quelle filtern. Wir machen das mit XPATH mit dem Ausdruck&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/ergebnisse/ergebnis[@ordnr=&#039;0&#039;]/ergebniselement/sqlerg/row[@no=&#039;0&#039;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies liefert die erste Zeile der ersten Tabelle des Makroberichts im Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Klicken Sie also oben auf die Datenquelle des Hauptberichts, und fügen Sie den Filter ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Funktion „Read Fields“ funktioniert in diesem Fall nicht. Die Felder für den Hauptbericht werden manuell in den Sourcecode eingefügt. Dazu erstellen Sie zunächst, wie in [[#4.5.Makroberichte als Datenquelle für JasperReports|outline|Abschnitt 4.5]] beschrieben, ein JR-Template für den Makrobericht. Aus diesem Template kopieren Sie aus dem Sourcecode die Felder und fügen diese im Booklet ein. Fügen Sie alle Felder sowohl im Haupt- als auch in den Unterberichten des Booklets ein.&lt;br /&gt;
&lt;br /&gt;
Im Content Band können Sie dann mit der rechten Maustaste die jew. Unterberichte verlinken. Die Technik ist identisch mit den normalen Haupt/-Unterberichten, nur dass das Seitenlayout nicht vom Hauptbericht zum Unterbericht vererbt wird. &lt;br /&gt;
&lt;br /&gt;
Im Beispiel haben wir einen Unterbericht verlinkt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main3.png]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;amp;quot;Component Expression&amp;amp;quot; geben Sie den Unterbericht an. Im Feld &amp;amp;quot;Tab name expression&amp;amp;quot; können Sie den Namen des TABs in Excel definieren. Standardmäßig wird bei einem Booklet beim Export nach Excel also ein Arbeitsblatt mit mehreren Sheets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht wird mit den gleichen Parametern aufgerufen wie bei klassischen [[#2.5.1.Konfiguration des Hauptberichts|outline|Unterberichten]]. Der erste Unterbericht bekommt die ordnr 0, der zweite Unterbericht die ordnr 1 usw.:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_main4.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;übergabe-von-layouts-vom-hauptbericht-an-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-89&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Übergabe von Layouts vom Hauptbericht an Unterberichte ===&lt;br /&gt;
&lt;br /&gt;
Generell werden im Booklet keine Layoutvorgaben vom Hauptbericht an den jew. Unterbericht übergeben. Ausnahme: Die Property &amp;amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;amp;quot;, die beim Excel Export als Zahl formatierte Zellen auch in Excel als Zahl ausgibt, wird im Hauptbericht gesetzt und dann an die Unterberichte übergeben.&lt;br /&gt;
&lt;br /&gt;
Achtung: Je nach JasperSoft Studio Version kann man diese Property nicht in der graphischen Entwcklungsumgebung setzen, sondern nur im *.jrxml-Quellcode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-deckblatt&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-90&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Deckblatt ===&lt;br /&gt;
&lt;br /&gt;
Das Deckblatt ist ein normaler JasperReport mit Elementen im Titel-Band. Beachten Sie dass im Unterbericht auch Seitenränder und Seitenformate definiert sein müssen. Sie können auch vom Hauptbericht Parameter übergeben, hier z.B. das Semester:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover1.png]]&lt;br /&gt;
&lt;br /&gt;
 Im Hauptbericht wiederum wird dieser Parameter dann übergeben, hier z.B. aus der Legende der Maske:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_cover2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-inhaltsverzeichnis&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-91&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet Inhaltsverzeichnis ===&lt;br /&gt;
&lt;br /&gt;
Das Inhaltsverzeichnis ist ein Bericht ohne Datenquelle, und bekommt über die Evaluation Time=&amp;amp;quot;Report&amp;amp;quot; die Anweisung, die Inhaltsdokumente nach Lesezeichen (HTML-Anchors) zu durchsuchen. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1a.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist leer, und über die Property &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
net.sf.jasperreports.bookmarks.data.source.parameter=REPORT_DATA_SOURCE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wird als Datenquelle der Content angegeben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Berichtsdesign ist vom Assistenten vorgegeben und relativ einfach. Sie können bis zu drei Ebenen für das Inhaltsverzeichnis angeben, jede Ebene benötigt ein eigenes Detailband.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_toc2.png]]&lt;br /&gt;
&lt;br /&gt;
 Die Feldnamen im Bericht sollten nicht geändert werden. Sie können aber das Layout anpassen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;booklet-erster-detailbericht&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-92&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Booklet erster Detailbericht ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Detailbericht ist ein normaler Unterbericht, d.h. er hat den Parameter &amp;amp;quot;ordnr&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;amp;quot;ordnr&amp;amp;quot; wird dann bei der Datenquelle des Unterberichts ausgewertet:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht soll sicherlich auch Seitenzahlen anzeigen, dazu fügen Sie noch ein &amp;amp;quot;Page footer&amp;amp;quot; Band hinzu, und erzeugen dort ein Textfeld mit dem Inhalt z.B. &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Seite &amp;amp;quot;+$V{MASTER_CURRENT_PAGE}&lt;br /&gt;
&lt;br /&gt;
Das Textfeld muss bei Evaluation time den Wert &amp;amp;quot;Master&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content3.png]]&lt;br /&gt;
&lt;br /&gt;
Danach wird die Seitenzahl jedes Unterberichts an den Hauptbericht angepaßt.&lt;br /&gt;
&lt;br /&gt;
Für das Inhaltsverzeichnis müssen Sie im jew. Detailbericht Lesezeichen (HTML-Anchors) und jeweils eine Ebene angeben. Wir können z.B. für das Textfeld der Überschrift einen Anker der Ebene 1 festlegen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danach legen wir für das Gruppenband für das Textfeld mit dem Label der Gruppe (Fakultätsname) einen Anker der Ebene 2:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_content6.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-fertige-booklet&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-93&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das fertige Booklet ===&lt;br /&gt;
&lt;br /&gt;
So sieht das Booklet im Preview im JasperSoft Studio aus: Zuerst das Deckblatt...&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1.png]]&lt;br /&gt;
&lt;br /&gt;
... und dann auf Seite 2 das Inhaltsverzeichnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview1b.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
und dann auf Seite 3 der erste Unterbericht:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_booklet_preview2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-94&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemeines-zu-schriften&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-95&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemeines zu Schriften ===&lt;br /&gt;
&lt;br /&gt;
Für den Entwurf von Berichten ist es wichtig, daß die jew. Schriftart auch beim Server-System und beim Client verfügbar sind. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ein häufiger Fallstrick ist hier: unter Windows wird mit JasperReports entworfen, und dort z.B. die Schriftart &amp;amp;quot;Arial&amp;amp;quot; gewählt. Der Report soll auf dem Server unter Linux laufen, dort gibt es die Schriftart nicht. Resultat: der Bericht ist nicht kompilierbar. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 Bei PDF-Dateien lassen sich Fonts ggf. auch in die Datei einbetten, bei Exportformaten wie OpenOffice oder Word ist dies nicht möglich. Sie sollten daher Schriftarten wählen, die auch beim Client mit größter Wahrscheinlichkeit installiert sind. Die sicherste Wahl ist es, Font-Familien anzugeben, z.B. &amp;amp;quot;Serif&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Im Zweifelsfall installieren Sie die Schriftart auf allen beteiligten Systemen. TrueType Fonts lassen sich in JasperReports importieren und nutzen, sie können sogar in PDF-Dateien standardmäßig eingebettet werden. Im folgenden wird die Schriftart &amp;amp;quot;Liberation Sans&amp;amp;quot; installiert, die man auf [https://fedorahosted.org/liberation-fonts/ https://fe][https://fedorahosted.org/liberation-fonts/ dorahosted.org/liberation-fonts/] herunterladen kann. Entpacken Sie das Download Paket in einem beliebigen Verzeichnis. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-ireport-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-96&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-97&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in iReport einbinden ===&lt;br /&gt;
&lt;br /&gt;
Achtung: wenn Sie iReport unter Windows nutzen, müssen Sie für die folgenden Schritte iReport als Admin starten:&lt;br /&gt;
&lt;br /&gt;
Im Menü &amp;amp;quot;Extras&amp;amp;quot;-&amp;amp;gt;&amp;amp;quot;Optionen&amp;amp;quot; können Sie den Font importieren:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wählen Sie aus der Dateiliste zunächst den &amp;amp;quot;Regular&amp;amp;quot;-Font aus, z.B. die Sans-Serif-Variante. &amp;lt;span id=&amp;quot;anchor-98&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im nächsten Schritt geben Sie dem Font einen Namen, und Sie wählen die zugehörigen Dateien für Fettdruck etc:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import_step2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-99&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier die Ansicht, wenn Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des Formulars können Sie noch PDF-Exportoptionen wählen, z.B. ob die Schriftart in PDF-Dateien eingebunden werden soll. &amp;lt;span id=&amp;quot;anchor-100&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Achtung: beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;schriften-in-jaspersoft-studio-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-101&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Schriften in &#039;&#039;&#039;JasperSoft Studio&#039;&#039;&#039; einbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter „Window“ → „Preferences“ können Sie Fonts einbinden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach einem Klick auf „Add“ öffnet sich ein neues Fenster. Dort geben Sie dem Font einen Namen und wählen die zugehörige Datei für den normale Ausführung des Fonts. Es gibt weitere Reiter für Bold, Italic und Bold Italic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import5.png]]&lt;br /&gt;
&lt;br /&gt;
Außerdem kreuzen Sie an, daß der Font in die jew. PDF-Datei eingebettet wird. Die nächsten zwei Dialoge (Locales, Font Mappings) lassen wir der Einfachheit halber erstmal weg. Wenn Sie dann OK drücken, ist der Font in iReport installiert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Einstellungen jederzeit ändern, indem Sie auf &amp;amp;quot;Edit Font&amp;amp;quot; klicken:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import6.png]]&lt;br /&gt;
&lt;br /&gt;
Achtung: Beachten Sie lizenzrechtliche Fragen, die wenigsten Fonts sind ohne weiteres kopierbar. Wir empfehlen den Liberation-Font, der steht unter der OpenSource Lizenz GPL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-schriftart-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-102&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default-Schriftart in iReport ===&lt;br /&gt;
&lt;br /&gt;
Sie können die Default Schriftart in iReport einstellen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_default_font.png]]&lt;br /&gt;
&lt;br /&gt;
Stellen Sie den Default-Font auf &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-103&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Liberation Sans&amp;amp;quot;. Danach müssen Sie iReport neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fonts-auf-dem-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-104&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fonts auf dem Server  ===&lt;br /&gt;
&lt;br /&gt;
Um Schriftarten auf einen Tomcat-Server zu installieren, müssen die vier ttf-Dateien (normal, fett, kursiv, fett-kursiv) in den Ordner $JRE_HOME/lib/fonts kopiert werden. Für alle Java Anwendungen wie den Tomcat und JasperReports stehen dann die in dem verwendetem Java zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Beispiel Arial unter Ubuntu 18.04:&lt;br /&gt;
&lt;br /&gt;
Prüfen Sie mit dem Kommando &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-105&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;ps fax | grep tomc&lt;br /&gt;
&lt;br /&gt;
welcher Tomcat läuft. Sie bekommen eine Ausgabe z.B. &lt;br /&gt;
&lt;br /&gt;
47769 ?       Sl   36:25 &amp;lt;span id=&amp;quot;anchor-106&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Xmx3500M -XX:MaxPermSize=400m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -DSuperX-DB-PROPERTIES-SET=true -Djava.endorsed.dirs=/var/lib/tomcat8/endorsed -classpath /var/lib/tomcat8/bin/bootstrap.jar:/var/lib/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat8 -Dcatalina.home=/var/lib/tomcat8 -Djava.io.tmpdir=/var/lib/tomcat8/temp org.apache.catalina.startup.Bootstrap start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der erste Befehl zeigt den Pfad zu JRE_HOME, also &amp;lt;span id=&amp;quot;anchor-107&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;/usr/lib/jvm/java-8-openjdk-amd64. Sie kopieren also die Dateien z.B. &lt;br /&gt;
&lt;br /&gt;
arial.ttf&lt;br /&gt;
&lt;br /&gt;
arialbd.ttf&lt;br /&gt;
&lt;br /&gt;
arialbi.ttf&lt;br /&gt;
&lt;br /&gt;
ariali.ttf&lt;br /&gt;
&lt;br /&gt;
von&lt;br /&gt;
&lt;br /&gt;
 C:\Windows\winsxs\amd64_microsoft-windows-font-truetype-arial_31bf3856ad364e35_6.1.7601.17514_none_d0a9759ec3fa9e2d\*.ttf&lt;br /&gt;
&lt;br /&gt;
nach &lt;br /&gt;
&lt;br /&gt;
/usr/lib/jvm/java-8-openjdk-amd64/lib/fonts&lt;br /&gt;
&lt;br /&gt;
und starten dann Tomcat neu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: Sorgen Sie dafür dass Sie eine Lizenz für die jew. Fonts haben, weil diese bei PDF in die ausgelieferten Dateien eingebettet werden.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;font-extension&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-108&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Font Extension ===&lt;br /&gt;
&lt;br /&gt;
Eine Alternative zu dem Einbinden der Schriftart über das Java Verzeichnise Font Extension. Diese hat aber nicht immer funktioniert. Um auf diesem Wege die Fonts auf einem Ziel-Server einzubinden, kann man die Schriftart als Font Extension exportieren, die dann wiederum in den CLASSPATH des Servers (bei Webanwendungen WEB-INF/lib) kopiert werden müssen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nutzen Sie dazu den obigen Button &amp;amp;quot;Export as extension&amp;amp;quot;, und wählen Sie einen Dateinamen mit der Endung &amp;amp;quot;.jar&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: Die Einbettung einer Font Extension in einer JasperReports-Laufzeitumgebung klappt erst mit JasperReports 3.7.2 oder höher. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Wenn Sie in iReport auch PDF als Vorschau wählen, erzeugt iReport im Verzeichnis der jrxml-Datei auch eine entsprechende PDF-Datei. Damit diese die Fonts enthält, müssen Sie auch in iReport im CLASSPATH die Font-Extension einbinden. In diesem Falle ist es vorteilhaft, die Endung &amp;amp;quot;.jar&amp;amp;quot; (nicht &amp;amp;quot;.zip&amp;amp;quot;) zu wählen, weil iReport hier nur jar-Dateien einbindet.&lt;br /&gt;
&lt;br /&gt;
Noch ein Hinweis zu den Attributen &amp;amp;quot;PDF Font name&amp;amp;quot; und &amp;amp;quot;PDF Encoding&amp;amp;quot;: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_font_import3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Attribute werden nicht mehr ausgewertet, wenn Sie mit Font Extensions arbeiten. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfield-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-109&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;TextField-Formatierung ==&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt werden verschiedene Einstellungen und Möglichkeiten der Formatierung in TextFields vorgestellt und erläutert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ausgabe-von-null-als-string-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-110&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ausgabe von &#039;&#039;&#039;NULL&#039;&#039;&#039; als &#039;&#039;&#039;String&#039;&#039;&#039; verhindern ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls NULL in einem TextField als String ausgeschrieben wird, kann dies verhindert werden, indem die Einstellung „Blank When NULL“ aktiviert wird. Das Feld bleibt dann leer:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_text_field_formatting.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-wörter-unterstreichen-oder-fett-drucken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-111&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Wörter unterstreichen oder fett drucken ===&lt;br /&gt;
&lt;br /&gt;
Wenn in einem TextField einzelne Wörter unterstrichen oder fett gedruckt werden sollen, einfach in den „Text properties“ unter „Markup“ „styled“ auswählen. In dem Textfield dann einfach um das zu unterstreichende Wort „&amp;amp;lt;u&amp;amp;gt; … &amp;amp;lt;/u&amp;amp;gt;“ schreiben oder „&amp;amp;lt;b&amp;amp;gt; … &amp;amp;lt;/b&amp;amp;gt;“ um es fett gedruckt auszugeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Bitte beachten, dass die PDF-Preview aus Jaspersoft Studio heraus keinen Fettdruck darstellt.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;zahlen--und-datumsformat&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-112&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zahlen- und Datumsformat ===&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hier ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_textfield_pattern1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Textfeld bekommt das Pattern &amp;amp;quot;0&amp;amp;quot;, d.h. es wird eine Ganzzahl inkl. 0 angezeigt. Der Platzhalter &amp;amp;quot;#&amp;amp;quot; steht für Zahlenbestandteile, hier wird eine 0 allerdings nicht angezeigt. Weitere Zahlen- und Datumsformate sind im Assistenten (linker Teil des Screenshots) sicher selbsterklärend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-113&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ===&lt;br /&gt;
&lt;br /&gt;
Hat man pro Spalte / Zelle unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;#0;#0&amp;amp;quot; : &amp;amp;quot;###0.00;###0,00&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;effiziente-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-114&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Effiziente Formatierung ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keine Lust haben, jedes Textelement eines Berichts einzeln zu formatieren, empfehlen wir als ersten Schritt, Formatierungen zu kopieren. &lt;br /&gt;
&lt;br /&gt;
Im Kontextmenü jedes Elements gibt es die Menüpunkte &amp;amp;quot;Copy Format&amp;amp;quot; und &amp;amp;quot;Paste Format&amp;amp;quot;, die jeweils Formate kopieren und einfügen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_copy_format.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Hochschulen ist ein einheitliches Layout der Berichte wichtig, und so bietet es sich an, zentrale Layouts zu definieren und dann wiederzuverwenden. In JasperReports heißen Layouts auch &amp;amp;quot;Styles&amp;amp;quot; bzw. Formatvorlagen. Ähnlich wie in OpenOffice Writer oder MS Word lassen sich Formatvorlagen definieren und zuweisen. Bei Änderungen der Formatvorlage werden diese Änderungen auf alle Elemente automatisch übertragen - auch nachträglich. &lt;br /&gt;
&lt;br /&gt;
In der &amp;amp;quot;Styles Library&amp;amp;quot; werden z.B. einige häufig verwandte Layoutvorlagen angeboten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles_library.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können die Formate anwenden, indem Sie einfach die jew. Vorlage von der &amp;amp;quot;Styles Library&amp;amp;quot; per Drag and Drop auf das Ziel-Textfeld im Report Design ziehen und somit anwenden.&lt;br /&gt;
&lt;br /&gt;
 Sie können auch eigene Formatvorlagen zentral definieren. Im Menü Datei-&amp;amp;gt;New-&amp;amp;gt;Style geht es los: Wir erzeugen z.B. eine neue Style-Datei mit dem Namen &amp;amp;quot;meinLayout.jrtx&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_style_def_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jrtx-Datei definieren sie einen oder mehrere Formatvorlagen. Wir definieren z.B. die Formatvorlage &amp;amp;quot;Textelemente&amp;amp;quot;, und geben ihr die Eingenschaft &amp;amp;quot;SansSerif, Schriftgröße 12&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Danach können sie die Datei in der jrxml-Datei im Report Inspector unter &amp;amp;quot;Styles&amp;amp;quot; einbinden. Damit sind die Formatvorlagen in dieser Datei verfügbar, und können bei den Elementeigenschaften im Attribut &amp;amp;quot;Style&amp;amp;quot; zugewiesen werden: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styleref_design_folie.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 JasperReports nimmt standardmäßig den absoluten Pfad der jrtx-Datei, in der XML-Quelle sollten Sie diesen Pfad auf relativ umstellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;conditional-styles-bedingte-formatierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-115&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Conditional styles – &#039;&#039;&#039;Bedingte Formatierung&#039;&#039;&#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man in einzelne Textfelder &amp;amp;quot;bedingte Formatierung&amp;amp;quot; nutzen will (z.B. farbiger Hintergrund, Fettdruck), hat man früher mehrere Textfelder einzeln angelegt, mit dem gleichen Inhalt und einer jeweiligen &amp;amp;quot;Print-when expression&amp;amp;quot;. Das geht seit JR 3.x eleganter mit den sog. &amp;amp;quot;Conditional styles&amp;amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Hierfür wird ein Style angelegt und diesem diverse „Conditional Styles“ untergeordnet. Die „Conditional Styles“ enthalten Bedingungen und Formatierungseinstellungen. Der Style kann beispielweise einem Textfeld übergeben werden. Sobald die Bedingung eines &amp;lt;span id=&amp;quot;anchor-116&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Conditional Styles“ erfüllt wird, werden die im „Conditional Style“ festgelegten Formatierungseinstellungen auf das Textfeld angewandt. Die Einstellungen im Textfeld selbst werden allerdings höher priorisiert. Eine detaillierte Erläuterung der Priorisierung anhand eines Beispiels findet sich in Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-jaspersoft-studio-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-117&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in JasperSoft Studio – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zunächst legen Sie die Formatierungen an, indem Sie unter Styles die rechte Maustaste drücken und über „Create Style“ einen Style erstellen, beispielsweise &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durch Rechtsklick auf &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039; wird über „Create Conditional Style“ ein neuer Conditional Style hinzugefügt. Es erscheint ein neuer Unterknoten &amp;amp;lt;No condition set&amp;amp;gt;. Über die Properties können anschließend die zu erfüllende Bedingung als Expression, beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-118&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;$F{Name}.equals(&amp;amp;quot;Summe Aktiva&amp;amp;quot;)||$F{Name}.equals(&amp;amp;quot;Summe Passiva&amp;amp;quot;)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
festgelegt und die Formatierungseinstellungen vorgenommen werden. In diesem Falle ist Fettschrift (bold) gewählt : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style4.png]]&lt;br /&gt;
&lt;br /&gt;
Um den Style inklusive seiner Conditional Styles auf beispielsweise ein Textfeld anzuwenden, werden die Properties des entsprechenden Feldes geöffnet. Im Reiter Appearance wird der gewünscht Style, in diesem Falle &#039;&#039;&#039;Daten_angepasst&#039;&#039;&#039;,&#039;&#039;&#039; &#039;&#039;&#039;dem Textfeld zugeordnet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Die Reihenfolge wird direkt im XML oder per Drag&amp;amp;amp;Drop geändert.&lt;br /&gt;
&lt;br /&gt;
Es kam in der Vergangenheit bereits zu dem Phänomen, dass im Conditional Style Fettschrift gewählt war, aber nicht ins Textfeld übernommen wurde, während beispielsweise Kursivschrift problemlos und wie erwartet funktionierte. Eine genauere Beschreibung und Lösung findet sich im Abschnitt „Textfeld vs. Conditional Style – Priorisierung“&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;beispiel-in-ireport-schrift-fett-machen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beispiel in iReport – Schrift fett machen ===&lt;br /&gt;
&lt;br /&gt;
Um z.B. einzelne Zeil&amp;lt;span id=&amp;quot;anchor-120&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;en nach einer Bedingung f&amp;lt;span id=&amp;quot;anchor-121&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;ett zu machen oder nicht kann man so vorgehen: &amp;lt;span id=&amp;quot;anchor-122&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zunächst legen Sie die Formatierungen an, indem Sie im Report Inspector unter Styles die rechte Maustaste drücken und ein Style hinzufügen, z.B. &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; für einen Style der Fett sein soll, wenn im Feld &#039;&#039;&#039;zw&#039;&#039;&#039; bestimmte Werte stehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_styles.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-123&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Danach erzeugen Sie mit Rechtsklick auf &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039; eine neue Bedingung mit „Hinzufügen von Conditional Style“. Bei dem neuen Unterknoten &amp;lt;span id=&amp;quot;anchor-124&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;No condition set&amp;amp;gt; klicken Sie auf die rechte Maustaste, dann Edit Condition. Hier können Sie wie gewohnt eine Bedingung in Form einer Expression eingeben, z.B. &lt;br /&gt;
&lt;br /&gt;
$F{Zweckbestimmung}.equals(&amp;lt;span id=&amp;quot;anchor-125&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Gesamtausgaben&amp;amp;quot;)||$F{Zweckbestimmung}.equals(&amp;lt;span id=&amp;quot;anchor-126&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Gesamteinnahmen&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Dann müssen Sie den neuen Conditional Style anklicken &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style.png]]&lt;br /&gt;
&lt;br /&gt;
und in den Eigenschaften bold auf true setzen.&lt;br /&gt;
&lt;br /&gt;
Dann wählt man im Report designer die Felder aus, die ggfs. fett dargestellt werden sollen, und bei den Eigenschaften als Style &#039;&#039;&#039;zw_maybe_bold&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style2.png]]&lt;br /&gt;
&lt;br /&gt;
Wenn man mit Padding arbeiten will, kann man für den Style padding angeben, muss aber anscheinend manuell im jrxml leftpadding entfernen&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;box topPadding=&amp;amp;quot;0&amp;amp;quot; &amp;lt;s&amp;gt;leftPadding=&amp;amp;quot;0&amp;amp;quot;&amp;lt;/s&amp;gt; bottomPadding=&amp;amp;quot;0&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-127&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bei mehreren conditional styles wird die Reihenfolge ausgewertet, alle zutreffende conditional styles werden genommen. Es gibt zwar einen Menüpunkt „Reihenfolge ändern“ bei rechtem Mausklick, der ist jedoch deaktiviert, man kann die Reihenfolge aber direkt im XML ändern oder per Drag&amp;amp;amp;Drop.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-128&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Leider kann man nicht einen conditionalstyle auf ein leere Zelle anwenden (z.B. Unterstrich), wenn man Excelexport macht, wird daraus einfach eine leere Zelle ohne Formatierung selbst wenn man Leerzeichen in der Text Expression hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Werden Variablen im conditional style verwendet, muss die evaluation time aktiviert werden über die property:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-129&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.style.evaluation.time.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
Siehe https://community.jaspersoft.com/blog/tip-data-set-variable-usage-conditional-style-table-component-jasper-reports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Style kann auch mit einem anderen Style verknüpft werden, indem in dem entsprechenden Style unter dem Reiter „Style“ in dem Feld „Style“ das entsprechende Style ausgewählt wird. Somit können bestimmte Wiederholungen gespart werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;textfeld-vs.-conditional-style-priorisierung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-130&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-131&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Textfeld vs. Conditional Style – Priorisierung&amp;lt;span id=&amp;quot;anchor-132&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Abschnitt wird anhand eines Beispiels aufgezeigt, dass Textfelder höher priorisiert sind als Conditional Styles und welche Fallstricke dadurch entstehen können. Das Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einem Textfeld wird ein Style zugeordnet, der einen Conditional Style enthält, welcher bei erfüllter Bedingung den Text fett und kursiv darstellen soll: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style6.png]]&lt;br /&gt;
&lt;br /&gt;
Im Textfeld selbst sind beide Einstellungen deaktiviert:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style7.png]]&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis ist, dass im Bericht der Text dieses Feldes zwar kursiv, aber nicht fett dargestellt wird. Zum Testen werden weitere Formatierungseinstellungen im Conditional Style hinzugefügt, beispielsweise Unter- und Durchstreichen und auch dies wird umgesetzt. Die Bedingung des Conditional Styles ist also erfüllt. &lt;br /&gt;
&lt;br /&gt;
Der Grund für dieses Verhalten ist nur mit Blick auf den Source-Code ersichtlich:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style8.png]]&lt;br /&gt;
&lt;br /&gt;
Dort findet sich in den Einstellungen des Textfeldes &#039;&#039;isBold=“false“&#039;&#039;. Dieses Fragment ist dadurch entstanden, dass in der Designoberfläche von JasperSoft Studio für das Textfeld die Einstellung bold einmal aktiviert und dann wieder deaktiviert wurde. Im Source-Code wird nach dem ersten Aktivieren &#039;&#039;isBold=“true“&#039;&#039; hinzugefügt und beim Deaktiveren nicht wieder komplett entfernt, sondern auf false gesetzt. Da die Einstellungen im Textfeld selbst höher priorisiert werden, als jene der Conditional Styles, wird der Fettdruck des Conditional Styles nicht umgesetzt. Löscht man im Source-Code das Fragment &#039;&#039;isBold=“false“&#039;&#039;, dann wird der im Conditional Style definierte Fettdruck umgesetzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;default-style&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-133&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Default Style ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen Style als Default Style zu verwenden. Hierfür wird beim Style, nicht beim Conditional Style, die entsprechende Einstellung gesetzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_cond_style9.png]]&lt;br /&gt;
&lt;br /&gt;
Dieser Style wird nun auf jedes Feld angewandt, dem kein anderer Style zugeordnet ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;expression-editor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-134&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Expression Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Expression Editor werden die für die Ausgabe bestimmten Werte angegeben. Zahlen werden ohne Zusatz eingetragen. Feste String Werte werden zwischen Anführungszeichen gesetzt. Felder und Variablen können über ein Doppelklick auf den jeweiligen Namen unterhalb des Eingabefeldes eingefügt werden. &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_filter1.png]]&lt;br /&gt;
&lt;br /&gt;
Zu den Feldern und Variablen gibt es auch noch Funktionen in dem 3. unterem Kästchen. &lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für Textausgabe:&lt;br /&gt;
&lt;br /&gt;
Es soll ausgegeben werden „Auswertungszeitraum 1.1.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt; bis 31.12.&amp;amp;lt;&amp;amp;lt;Jahr&amp;amp;gt;&amp;amp;gt;“.&lt;br /&gt;
&lt;br /&gt;
Anstatt zwei statische Textfelder und zwei dynamische zu machen, legt man eine Expression an:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Auswertungszeitraum: 1.1.&amp;amp;quot;+$F{legende_Jahr_value}+&amp;amp;quot; bis 31.12.&amp;amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Der Clou an JasperReports ist: da das Programm auf der Programmiersprache Java beruht, kann man in Expressions echten Java Code einfügen bzw. um eigenen Java Code erweitern. Wenn Sie z.B. wissen dass das benutzte Feld &amp;amp;quot;$F{Lehr- und Forschungsbereich}&amp;amp;quot; vom Typ String ist, können Sie alle in Java eingebauten String Funktionen benutzen, z. B. Substring, contains, indexOf, toLowerCase etc. Analog auch für andere Datentypen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;bedingungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-135&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bedingungen ===&lt;br /&gt;
&lt;br /&gt;
Bedingungen sind in dem Expression Editor auch möglich. Wenn z.B. eine Variable nur Ausgegeben werden soll, wenn der Wert größer, kleiner oder gleich einem anderem vorgegebenen Wert oder Variable sein soll, wird folgende Syntax verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;Bedingung&amp;amp;gt;&amp;amp;gt; ? &amp;amp;lt;&amp;amp;lt;&amp;lt;span id=&amp;quot;anchor-136&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Ausgabe wenn Bedingung wahr&amp;amp;gt;&amp;amp;gt; : &amp;amp;lt;&amp;amp;lt;Ausgabe wenn Bedingung falsch&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bedingungen:&lt;br /&gt;
&lt;br /&gt;
String1 == String2&lt;br /&gt;
&lt;br /&gt;
String1 != String2&lt;br /&gt;
&lt;br /&gt;
Nummer1 &amp;amp;gt; Nummer2&lt;br /&gt;
&lt;br /&gt;
String1.contains( String2 )&lt;br /&gt;
&lt;br /&gt;
String1 == null&lt;br /&gt;
&lt;br /&gt;
usw.&lt;br /&gt;
&lt;br /&gt;
Wie oben angegeben: Wenn die Bedingung wahr ist, wird der Wert nach dem Fragezeichen genommen. Wenn die Bedingung falsch ist, wird der Wert nach dem Doppelpunkt genommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-zeichenketten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-137&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Zeichenketten ===&lt;br /&gt;
&lt;br /&gt;
Häufig werden für Berichtsausgaben Zeichenketten manipuliert. Dadurch, daß JasperReports innerhalb der Java-Runtime läuft, stehen uns mächtige Methodenaufrufe zur Verfügung, die in Java schon eingebaut sind. &lt;br /&gt;
&lt;br /&gt;
Für Zeichenketten hier eine Übersicht:&lt;br /&gt;
&lt;br /&gt;
 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umgang-mit-datumsfeldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-138&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umgang mit Datumsfeldern ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datumswerte-aggregieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-139&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datumswerte aggregieren ====&lt;br /&gt;
&lt;br /&gt;
Fürs Berichtsdesign auf aggregierter Ebene ist es oft praktisch, Datumswerte auf &amp;amp;quot;grobere&amp;amp;quot; Kategorien zu aggregieren, z.B. Monate, Quartale, oder Jahre. Um solche Werte auszugeben bzw. danach zu gruppieren können Sie eigene Variablen anlegen, die dann im Expression Editor mit Hilfe von Java berechnet werden. Hier ein Beispiel für eine Transformation vom Datum zur Einheit &amp;amp;quot;Jahr-Monat&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
(($F{Datum}.getYear()+1900)*100)+($F{Datum}.getMonth()+1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn wir annehmen, dass im Feld &amp;amp;quot;Datum&amp;amp;quot; ein Datums- oder Zeitstempel-Wert steht, dann wird über die o.g. Expression daraus ein Zahlenwert nach dem Muster Jahr (vierstellig) + Monat (zweistellig), z.B. für den 13.5.2013 würde daraus der Wert 201305. Nach diesem ganzzahligen Wert kann man dann sortieren und gruppieren. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Anmerkung: die o.g. Methoden getYear() und getMonth() sind seit einigen Jahren in Java &amp;amp;quot;deprecated&amp;amp;quot;, d.h. sie könnten in zukünftigen Java Versionen entfallen. Aber da dies in den letzten 7 Jahren nicht passiert ist, können wir damit noch arbeiten und optimistisch sein. Falls die Methoden wirklich entfernt werden, muss man eigene statische Methoden mit dem in Java eingebauten Calender-Objekt erstellen, Codebeispiele dazu gibt es viele im WWW.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wenn man Text &amp;amp;quot;Erzeugungsdatum&amp;amp;quot; und das Datum in einem Feld haben will geht so:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-140&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;Erzeugungsdatum:&amp;amp;quot;+new SimpleDateFormat(&amp;amp;quot;dd.MM.YYYY&amp;amp;quot;, Locale.GERMAN).format(new java.util.Date()) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeichenketten-zum-datumstyp-konvertieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-141&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeichenketten zum Datumstyp konvertieren ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Datum als String-Feld geliefert bekommen, können Sie es mit Groovy zum Typen &amp;amp;quot;java.util.Date&amp;amp;quot; konvertieren, z.B. um danach zu sortieren. Wenn z.B. das Feld „Beginn“ den Typ String hat und gefüllt ist mit dem Wert &amp;amp;quot;18.11.2020 18:05:00&amp;amp;quot;, dann können Sie eine Variable vom Typ java.util.Date erzeugen, mit der Expression:&lt;br /&gt;
&lt;br /&gt;
Date.parse(&amp;amp;quot;dd.MM.yyyy hh:mm:ss&amp;amp;quot;, $F{Beginn})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-workarounds&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-142&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Besonderheiten / Workarounds ===&lt;br /&gt;
&lt;br /&gt;
* Bei Feldern mit Länge 1 klappte einfaches equals nicht, mit einer substring Anweisung geht es dann:&lt;br /&gt;
&lt;br /&gt;
$F{legende_Art des Berichts_value}.substring(0,1).equals(&amp;amp;quot;B&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span id=&amp;quot;anchor-143&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Folgejahr berechnen: Selbst es das Feld Jahr gibt und es als Integer definiert ist in der Felderinfo, klappt der Bericht nur in JasperReports nicht in SuperX nicht wenn man schreibt:&amp;lt;br /&amp;gt;&lt;br /&gt;
$F{legende_Jahr_value}.intValue()+1&amp;lt;br /&amp;gt;&lt;br /&gt;
geht nicht, statt dessen:&amp;lt;br /&amp;gt;&lt;br /&gt;
new Integer($F{legende_Jahr_value}).intValue()+1&lt;br /&gt;
* Statt das Element table zu nutzen kann man auch manuell eine Tabelle erzeugen, in dem man per Rechtsklick auf ein Element Padding und Borders bearbeitet. Siehe http://www.youtube.com/watch?v=LbU6qTj3zQM&lt;br /&gt;
* Achten muss man dann darauf, dass Felder die Null sein können nicht „remove when blank“ haben und als TextFieldExpression besser nehmen: $F{Betrag}==null?&amp;amp;quot; &amp;amp;quot;:$F{Betrag}&lt;br /&gt;
* außerdem, wenn die erste Spalte einen stretch with overflow hat auch bei „stretch type“ „relative to tallest object“ einstellen &lt;br /&gt;
* Zeilenumbruch in Feld&amp;lt;br /&amp;gt;&lt;br /&gt;
Markup auf html setzen und dann z.B. &amp;amp;quot;Plan&#039;&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;br&amp;amp;gt;&#039;&#039;&#039;&#039;&#039;&#039;&amp;amp;quot;+$F{legende_Jahr_value}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;häufig-benötigte-transformationen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-144&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Häufig benötigte Transformationen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-tid-in-namen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-145&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester-tid in Namen ====&lt;br /&gt;
&lt;br /&gt;
$V{Semester (Schlüssel)}.toString().endsWith(&amp;amp;quot;1&amp;amp;quot;)?(&amp;amp;quot;SS &amp;amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)):(&amp;amp;quot;WS &amp;amp;quot;+$V{Semester (Schlüssel)}.toString().substring(0,4)+&amp;amp;quot;/&amp;amp;quot;+(new Integer($V{Semester (Schlüssel)}.toString().substring(0,4))+1).toString())&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;umrechnung-semester-in-akad.-jahr&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-146&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Umrechnung Semester in akad. Jahr ====&lt;br /&gt;
&lt;br /&gt;
Die folgende Formel formt die Semesterzahl aus dem Studierenden-Datenblatt in ein akad. Jahr um nach der Formel &amp;amp;quot;Akad. Jahr=WS + darauf folgendes SS&amp;amp;quot;, z.B. WS 2009/2010 und SS 2010 werden zum akad. Jahr 2009:&lt;br /&gt;
&lt;br /&gt;
$F{Semester der Belegung (Schlüssel)}.toString().endsWith(&amp;amp;quot;2&amp;amp;quot;) ? $F{Semester der Belegung (Schlüssel)}.toString().substring(0,4):(new Integer($F{Semester der Belegung (Schlüssel)}.toString().substring(0,4))-1).toString() &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formel nimmt beim WS die ersten vier Stellen des Semester-Schlüssels, und beim SS werden die ersten vier Stellen als Ganzzahl codiert, und dann wird 1 subtrahiert.&lt;br /&gt;
&lt;br /&gt;
Da es diverse Definitionen von Akad. Jahr / Studienjahr / Prüfungsjahr gibt, kann man das obige Beispiel leicht für eigene Bedürfnisse abwandeln.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pattern-expression-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-147&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-148&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pattern Expression ==&lt;br /&gt;
&lt;br /&gt;
Die Formatierung der Werte kann mit Hilfe des Attributes &amp;amp;quot;Pattern&amp;amp;quot; gesetzt&lt;br /&gt;
&lt;br /&gt;
werden. Hat man allerdings unterschiedliche Werte z.B. Datumsangaben und Währungseinheiten&lt;br /&gt;
&lt;br /&gt;
oder Ganzzahlen und Kommazahlen und möchte diese unterschiedlich formatieren, so kann dies&lt;br /&gt;
&lt;br /&gt;
mit dem Attribut &amp;amp;quot;Pattern Expression&amp;amp;quot; dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für die Ausgabe von Ganzahlen und Kommazahlen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$V{valueMeasure}.doubleValue() == Math.floor($V{valueMeasure}.doubleValue()) &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&lt;br /&gt;
!Double.isInfinite($V{valueMeasure}.doubleValue()) ?&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;#0;#0&amp;amp;quot; : &amp;amp;quot;###0.00;###0,00&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier der Pattern Expression Editor:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_pattern_expression_ergebnis.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;fortgeschrittene-techniken-bei-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-149&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Fortgeschrittene Techniken bei Feldern ==&lt;br /&gt;
&lt;br /&gt;
Textfelder enthalten standardmäßig nur den Feldnamen, aber die zugrunde liegenden [[#2.9.Expression Editor|outline|Ausdrücke]] lassen sich erweitern. Dabei kann auch alle Java Klassen zugegriffen werden, die sich im CLASSPATH befinden, z.B. [[#2.9.2.Umgang mit Zeichenketten|outline|java.lang.String]]. &lt;br /&gt;
&lt;br /&gt;
Hier ist ein Beispiel, in dem die Klasse &amp;amp;quot;StringBuilder&amp;amp;quot; (wird mit Java ausgeliefert , java.lang.StringBuilder) genutzt wird, um einen Text auszugeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das so aus:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_expression_stringbuilder1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Beispiel verdeutlicht: Man könnte da auch de.meineKlasse.erzeugeText(&amp;amp;quot;mein Text&amp;amp;quot;) schreiben, und diese Klasse dann in den CLASSPATH bei Jasper Start legen, und voila! Durch diese Funktionalität lassen sich also beliebige Java Klassen einbinden. Das gleiche geht übrigens auch mit Groovy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einrücken-von-feldern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-150&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einrücken von Feldern ==&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Feldern macht man am besten, in dem man mehrere Textfelder definiert und jeweils eine printWhenExpression auf die Ebene einbaut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativer Versuch war folgendes:&lt;br /&gt;
&lt;br /&gt;
Wobei Nachteil bei sehr langen Texten, bei denen strech with overflows zur Geltung kommt, dann die zweite Zeile nicht eingerückt wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Einrücken von Felder kann man für Textfelder (Strings) machen, indem der SuperX-Bericht eine Spalte einruecken definiert, der je nach gewünschter Einrückung eine Anzahl von x enthält, also z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Name&lt;br /&gt;
| Betrag&lt;br /&gt;
| Einrücken&lt;br /&gt;
|-&lt;br /&gt;
| 1. Überschrift&lt;br /&gt;
| 30000&lt;br /&gt;
| X (mindestens 1 x nötig)&lt;br /&gt;
|-&lt;br /&gt;
| 1.1 Unterüberschrift&lt;br /&gt;
| 15000&lt;br /&gt;
| Xxxxx&lt;br /&gt;
|-&lt;br /&gt;
| 1.3. UnterUnterübersichrift&lt;br /&gt;
| 3000&lt;br /&gt;
| xxxxxxxxx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann kann man ein Textfeld erzeugen und bei TextFieldExpression einfach eintragen:&lt;br /&gt;
&lt;br /&gt;
$F{Einruecken}.replace(&#039;x&#039;,&#039; &#039;)+$F{Name}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für Zahlfelder (z.B. Double) geht das so nicht so gut, weil dann das Pattern der Darstellung ###0,00 nicht mehr greift.&lt;br /&gt;
&lt;br /&gt;
Man definiert drei Felder nebeneinander, Beispiel:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| $F{Name}&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;gt;=6&lt;br /&gt;
&lt;br /&gt;
| ${Betrag}&lt;br /&gt;
&lt;br /&gt;
PrintWhenExpression&lt;br /&gt;
&lt;br /&gt;
$F{Hierarchie_Ebene}.intValue()&amp;amp;lt;6&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bei Ebene 1-5 wird ganz rechts ausgegeben, bei Ebene &amp;amp;gt;=6 wird mittig ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berechnungen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-151&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berechnungen ==&lt;br /&gt;
&lt;br /&gt;
Bei Berechnungen muss immer auch auf (ich nenne es mal) die Gültigkeit der Variable geachtet werden. Wenn eine Variable eine Summe bildet kann diese für z.B. „jetzt“ oder für eine Gruppe oder den ganzen Report gelten. Je nach Gültigkeit gilt z.B. die Summe nur für die aktuelle Gruppe (bei Gruppenbändern). &lt;br /&gt;
&lt;br /&gt;
Achtung: Es gibt nicht nur eine Gültigkeit bei der Variable selber (Reset type) sondern auch bei dem Element in dem Bericht. Wenn eine Variable in den Bericht gezogen wird, besitzt das entstandene Element eigene Eigenschaften, bei dem dann die „Evulation Time“ eingestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;prozentrechnung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-152&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Prozentrechnung ===&lt;br /&gt;
&lt;br /&gt;
Für die Prozentrechnung musst zuerst eine Variable z.B. mit dem Namen &amp;amp;quot;Gesamt&amp;amp;quot; anlegen mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Calculation = Sum&lt;br /&gt;
&lt;br /&gt;
Reset type = Report&lt;br /&gt;
&lt;br /&gt;
Dannach kann ein Textfeld mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
$F{Summe} / $V{Gesamt}&lt;br /&gt;
&lt;br /&gt;
erstellt werden mit den Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
Expression Class = Double&lt;br /&gt;
&lt;br /&gt;
Pattern = #.##0.00 % (kannst du unter Prozent auswählen)&lt;br /&gt;
&lt;br /&gt;
Evaluation Time = Auto &lt;br /&gt;
&lt;br /&gt;
In der Variable „Gesamt“ wird die Summe aus allen Werten des Feldes Summe gezogen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Prozentberechnungen in Grafiken muss in manchen Fällen der Wert auf 0 überprüft werden. Das kann man z.B. mit folgendem Code machen:&lt;br /&gt;
&lt;br /&gt;
( $V{zahl1} == 0 || $V{zahl2} == 0 ? 0 : ( $V{zahl1} / $V{zahl1} * 100) )&lt;br /&gt;
&lt;br /&gt;
Damit ist dann sichergestellt, dass es keine Probleme bei der Berechnung gibt, auch wenn die Zahlen mal leer sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;rundung&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-153&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Rundung ===&lt;br /&gt;
&lt;br /&gt;
Wenn man runden möchte den Datentyp am besten auf BigDecimal stellen. Ansonsten wird schon mal aus 2,45 gerundet 2,4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hyperlinks&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-154&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hyperlinks ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;externe-links&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-155&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Externe Links ===&lt;br /&gt;
&lt;br /&gt;
Ein Textfeld kann auch als Hyperlink befüllt und ausgegeben werden. Vorab bemerkt: Hyperlinks funktionieren in internen Viewer von JasperSoft Studio sowie beim Export nach Excel nicht bzw. nur eingeschränkt, zumindestens wenn man POI als Excel Engine nutzt. Selbst wenn Hyperlinks ausgegeben werden, ist in den Sicherheitseinstellungen von Excel oder OpenOffice eine Änderung vorzunehmen, damit Hyperlinks auch aktiv sind. Da es hier komplexte Unterschiede bei MS Excel-/OpenOffice-Versionen gibt, haben wir das Thema nicht weiter verfolgt und raten davon ab.&lt;br /&gt;
&lt;br /&gt;
In den anderen üblichen Ausgabeformaten (PDF, HTML) funktionieren die Hyperlinks.&lt;br /&gt;
&lt;br /&gt;
Dabei gibt es zwei Varianten:&lt;br /&gt;
&lt;br /&gt;
Das Textfeld hat als Markup Typ den Wert &amp;amp;quot;html&amp;amp;quot;, und die Hyperlinks werden in HTML-Notation eingefügt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier der Quellcode der textField-Expression zum Kopieren:&lt;br /&gt;
&lt;br /&gt;
$V{Gross_Forsch_Proj_Sprech}.replaceAll( &amp;amp;quot;\n&amp;amp;quot;,&amp;amp;quot;&amp;amp;lt;br /&amp;amp;gt;&amp;amp;quot; )+&amp;amp;quot;&amp;amp;lt;a href=\&amp;amp;quot;http://www.meinserver.de/url/\&amp;amp;quot;&amp;amp;gt;Siehe Details&amp;amp;lt;/a&amp;amp;gt;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im Ergebnis sieht das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pfd2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei Variante 2 erhält ein ReportElement im Quellcode die entsprechende Eigenschaft. In der von uns genutzten Version von JasperSoft Studio (6.5.1 final) war das noch nicht im GUI bearbeitbar, daher kann man das nur im Quelltext machen. Immerhin &amp;amp;quot;zerstört&amp;amp;quot; JasperSoft Studio dies beim Speichern nicht. &lt;br /&gt;
&lt;br /&gt;
Die Eigenschaft des textField heißt hyperlinkType=&amp;amp;quot;Reference&amp;amp;quot; und wird wie folgt belegt:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;textField pattern=&amp;amp;quot;&amp;amp;quot; isBlankWhenNull=&amp;amp;quot;true&amp;amp;quot; &#039;&#039;&#039;hyperlinkType=&amp;amp;quot;Reference&amp;amp;quot;&#039;&#039;&#039;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;reportElement mode=&amp;amp;quot;Opaque&amp;amp;quot; x=&amp;amp;quot;363&amp;amp;quot; y=&amp;amp;quot;22&amp;amp;quot; width=&amp;amp;quot;259&amp;amp;quot; height=&amp;amp;quot;22&amp;amp;quot; forecolor=&amp;amp;quot;#000000&amp;amp;quot; backcolor=&amp;amp;quot;#FFFFFF&amp;amp;quot; uuid=&amp;amp;quot;48c8e2df-f231-4433-8836-309668e0a859&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;printWhenExpression&amp;amp;gt;&amp;amp;lt;![CDATA[$V{Gross_Forsch_Proj_Sprech}.length() &amp;amp;gt;100]]&amp;amp;gt;&amp;amp;lt;/printWhenExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/reportElement&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;box&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;pen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;topPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;leftPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;bottomPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;rightPen lineWidth=&amp;amp;quot;0.5&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/box&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;textElement textAlignment=&amp;amp;quot;Left&amp;amp;quot; verticalAlignment=&amp;amp;quot;Middle&amp;amp;quot; rotation=&amp;amp;quot;None&amp;amp;quot; markup=&amp;amp;quot;html&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;font fontName=&amp;amp;quot;SansSerif&amp;amp;quot; size=&amp;amp;quot;6&amp;amp;quot; isBold=&amp;amp;quot;false&amp;amp;quot; isItalic=&amp;amp;quot;false&amp;amp;quot; isUnderline=&amp;amp;quot;false&amp;amp;quot; isStrikeThrough=&amp;amp;quot;false&amp;amp;quot; pdfEncoding=&amp;amp;quot;Cp1252&amp;amp;quot; isPdfEmbedded=&amp;amp;quot;false&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;paragraph lineSpacing=&amp;amp;quot;Single&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/textElement&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;textFieldExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;amp;quot;Siehe Details&amp;amp;quot;]]&amp;amp;gt;&amp;amp;lt;/textFieldExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;&amp;amp;lt;hyperlinkReferenceExpression&amp;amp;gt;&amp;amp;lt;![CDATA[&amp;amp;quot;http://meinserver/url&amp;amp;quot;]]&amp;amp;gt;&amp;amp;lt;/hyperlinkReferenceExpression&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;/textField&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Am Ende des textField wird dann im Element hyperlinkReferenceExpression das Ziel des Hyperlinks definiert. Da dies eine Expression ist, kann man die Hyperlinks auch dynamisch aufbauen. In der Ausgabe dies das dann so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_hyperlink_pdf.png]]&lt;br /&gt;
&lt;br /&gt;
Je nach PDF Viewer muss man auch hier in den Sicherheitseinstellungen Hyperlinks aktivieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;interne-linksanker&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-156&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Interne Links/Anker ===&lt;br /&gt;
&lt;br /&gt;
Auf einem Text Field kann ein Link eingetragen werden. Dafür muss man einfach mit der rechten Maustaste auf das Textfeld klicken und dann auf Hyperlink klicken. &lt;br /&gt;
&lt;br /&gt;
Das erste Feld oben &amp;lt;span id=&amp;quot;anchor-157&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;„Anchor Name Expression“ kann einen Text enthalten, auf den von einer anderen Stelle verwiesen werden kann. Es ist also eine Markierung. &lt;br /&gt;
&lt;br /&gt;
Wenn ich einen Hyperlink Type wähle, kann ich auch Verweise in den generierten Bericht erzeugen. Z.B. kann ich hier den Type „LocalAnchor“ wählen.&lt;br /&gt;
&lt;br /&gt;
Um z.B. ein Inhaltsverzeichnis zu erzeigen, welches im PDF bei klick auf ein Element dort hin springen soll, gehe ich zunächst zu der Stelle an der die Sprungmarke gesetzt werden soll und erzeuge dort ein Text Field mit der „Anchor Name Expression“ z.B. „Überschrift1“. Das Inhaltsverzeichnis muss dann auch aus Text Fields erzeugt werden und dort wähle ich dann bei Hyperlink type „LocalAnchor“. Nun habe ich unter der Auswahl von dem Hyperlink type ein neues Eingabefeld „Hyperlink Anchor Expression“. Dort trage ich jetzt exakt den gleichen Text „Überschrift1“ ein und im generierten PDF kann ich dort drauf klicken um an die Markierte Stelle zu kommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichts-properties-setzen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-158&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichts-Properties setzen ==&lt;br /&gt;
&lt;br /&gt;
Es gibt auf Berichtsebene die Möglichkeit, die Ausgabe der Berichte über sog. &amp;amp;quot;Properties&amp;amp;quot; zu steuern, teilweise auch formatspezifisch. So können Sie z.B. steuern, daß bei der Ausgabe nach Excel Zahlenfelder als Zahlenfelder ausgegeben werden, nicht als Textfelder. &lt;br /&gt;
&lt;br /&gt;
Um die Berichts-Properties zu setzen, können Sie dies entweder für einzelne Berichte, order auch Server-weit einstellen.&lt;br /&gt;
&lt;br /&gt;
Bei einzelnen Berichten gehen Sie im Report Inspector auf das oberste Element, und dort auf &amp;amp;quot;Eigenschaften&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties1.png]]&lt;br /&gt;
&lt;br /&gt;
Sie erhalten dann eine Liste der Eigenschaften: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_report_properties2.png]]&lt;br /&gt;
&lt;br /&gt;
Dort können Sie Zeilen hinzufügen, bearbeiten und löschen. Eine Erläuterung der jew. Property erhalten Sie in dem jew. Dialog.&lt;br /&gt;
&lt;br /&gt;
Um eine Property systemweit zu speichern, legen Sie eine Textdatei mit dem Namen &amp;amp;quot;jasperreports.properties&amp;amp;quot; an, und legen diese in den CLASSPATH. Im Kontext von Tomcat ist dies das Verzeichnis webapps/superx/WEB-INF/classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenlayout&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-159&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenlayout ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-160&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche ===&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Typen von Seitenumbrüchen: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wenn der gesamte Bericht paginiert ist (Report-Eigenschaft &amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;false&amp;amp;quot;), berechnet JR aufgrund des Seitenformats die Seitenumbrüche automatisch, und fügt auch, sofern vorhanden, die Bänder &amp;amp;quot;page header&amp;amp;quot; und &amp;amp;quot;page footer&amp;amp;quot; hinzu.&lt;br /&gt;
* Bei eingeschalteten Eigenschaften des jew. Bandes &amp;amp;quot;Start on a new page=true&amp;amp;quot; werden Seitenumbrüche ebenfalls aufgeführt&lt;br /&gt;
* Es gibt für manuelle Seitenumbrüche in der Palette das Element &amp;amp;quot;Break&amp;amp;quot;, das an beliebiger Stelle einen manuellen Seitenumbruch einfügt. Nun ist die Frage: wenn gesamte Bericht nicht paginiert ist (&amp;amp;quot;Ignore Pagination&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot;), was dann bei einem Break passieren soll. In älteren JR Versionen (vor 4.8) wurde der Break trotzdem gesetzt. In Versionen ab 4.8 passiert das nicht mehr, man kann aber ab Version 5.1 über die Berichts-Property&amp;lt;br /&amp;gt;&lt;br /&gt;
net.sf.jasperreports.page.break.no.pagination=apply&amp;lt;br /&amp;gt;&lt;br /&gt;
das alte Verhalten nachbilden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 In JasperSoft Studio oder iReport kann man zusätzlich noch beim Rendern des Berichts über den Parameter JRParameter.&amp;lt;span id=&amp;quot;anchor-161&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;IS_IGNORE_PAGINATION steuern, ob Seitenumbrüche ausgeführt werden. Dies überlagert die Berichtseinstellung, wenn es angehakt ist. Das ist z.B. sinnvoll, wenn Sie im PDF Export Seitenumbrüche haben wollen, in Excel oder HTML aber nicht. &lt;br /&gt;
&lt;br /&gt;
Leider kann man diesen Parameter nicht im Servlet setzen. Wenn Sie Seitenkopf/Fuß bei PDF wünschen, bei Excel aber nicht, nutzen Sie die Anleitung [[#2.21.5.Seitenkopf und Seitenfuß bei Excel unterdrücken|outline|unten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten, wie sich das Detailband bei einem Seitenumbruch verhalten soll. Diese werden über den ‚Split Type‘ des Bandes gesteuert. Beispiel: &lt;br /&gt;
&lt;br /&gt;
Bei einem Seitenumbruch wird die aktuelle Zeile des Detailbandes aufgeteilt und geht auf der nächsten Seite weiter. Der ‚Split Type‘ steht auf Stretch.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_011.png|642x170px]]&lt;br /&gt;
&lt;br /&gt;
Falls erwünscht ist, dass jede Zeile ganz dargestellt wird, kann der ‚Split Type‘ auf Prevent gestellt werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_012.png|300x281px]]Das Ergebnis sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_013.png|642x223px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-höhe-von-textfeldern-dynamisch-anpassen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-162&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-163&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die Höhe von Textfeldern dynamisch anpassen ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Textfelder besitzen die Eigenschaft „Stretch With Overflow“. Wird diese aktiviert, passt das Textfeld dynamisch seine Größe, falls der Inhalt nicht in das Feld passt. Der Text bricht um und die Höhe des Feldes wird vergrößert. Damit auch alle anderen Felder derselben Zeile ihre Größe entsprechend anpassen wird der „Stretch Type“ aller Felder dieser Zeile auf „Relative To Tallest Object (deprecated)“ gesetzt. Die Felder passen ihre Höhe dann dem höchsten Feld dieser Zeile an. Im Detailband genügt dies. Für Bänder mit festgelegter Zeilenanzahl, wie beispielsweise dem Titelband ist eine weitere Einstellung vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
Um im Titelband die Funktion „Stretch With Overflow“ nutzen zu können, ist es notwendig allen Feldern in darunterliegenden Zeilen den „Position Type“ „Float“ zuzuweisen. Die Position der Felder verändedrt sich dann entsprechend der Höhe darüberliegender Felder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_layout2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bericht-ausgeben-ohne-dateninput&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-164&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bericht ausgeben, ohne Dateninput ===&lt;br /&gt;
&lt;br /&gt;
Wenn der Bericht bzw. das Layout mit Titelband etc. ausgegeben werden soll, obwohl es keine Daten gibt, dann wird die Funktion ‚When No Data Type‘ auf ‚All Sections No Detail‘ gestellt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_Eingebettet_014.png|336x374px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;besonderheiten-beim-export-nach-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Besonderheiten beim Export nach Excel  ==&lt;br /&gt;
&lt;br /&gt;
Für jedes Exportformat gibt es auf Berichtsebene bzw. darunter spezielle Properties, die Feinheiten des Zielformates festlegen. Dies wird im folgenden anhand des Excel-Exports von Formeln und Namen von Arbeitsblättern (Sheet-Names) gezeigt.&lt;br /&gt;
&lt;br /&gt;
Bitte beachten Sie dass diese Hinweise für den &amp;amp;quot;alten&amp;amp;quot; Excel Export (&amp;amp;quot;xls&amp;amp;quot;) gelten. Für die Exportformate xlsx, JExcel-API oder OpenOffice-Spreadsheets funktionieren diese teilweise nicht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-165&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Um leere Zeilen im Excelexport zu vermeiden, im jrxml-Kopf:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.collapse.row.span&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.remove.empty.space.between.columns&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-166&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-167&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-168&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.remove.empty.space.between.rows&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
wenn man Zahlenanpassung möchte&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
  → font wird ggfs. verkleinert&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.print.keep.full.text&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-formeln&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-169&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-170&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Formeln ===&lt;br /&gt;
&lt;br /&gt;
Es gibt auch die Möglichkeit Zahlen nicht nur vorab zu berechnen, sondern beim Export nach Excel als Excel-Formel zu übergeben. &lt;br /&gt;
&lt;br /&gt;
Um diese Funktion zu aktivieren muss im JRXML die Property mit folgender Zeile eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.detect.cell.type&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder über die Report Properties:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type1.png]]&lt;br /&gt;
&lt;br /&gt;
Danach können in jedem Text Field in der Property expression:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type2.png]]&lt;br /&gt;
&lt;br /&gt;
folgende Einträge ergänzt werden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_detect_cell_type3.png]]&lt;br /&gt;
&lt;br /&gt;
Rechts neben &amp;lt;span id=&amp;quot;anchor-171&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-172&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.formula wird die Formel für Excel eingetragen, allerdings ohne = am Anfang. Außerdem werden nicht alle Excel-Formeln unterstützt, insbesondere nicht deren deutsche Lokalisierung (z.B. oben SUMME(D119...). Details finden Sie in der [https://poi.apache.org/spreadsheet/formula.html POI]-Dokumentation. Um zu erfahren wie die Felder lauten, welche berechnet werden sollen, am besten den Bericht einmal ausführen und in Excel anzeigen lassen. Achtung: Wenn der Bericht noch bearbeitet wird, können sich die Felder noch verändern.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;span id=&amp;quot;anchor-173&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-174&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-175&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-176&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;net.sf.jasperreports.export.xls.pattern können speziell für Excel Formatangaben gemacht werden. In dem obigen Beispiel &amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-177&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-178&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;#,##0.00;-#,##0.00&amp;amp;quot; gibt es 2 Nachkommastellen und ein Tausender-Trennzeichen. Wenn z.B. Tausende von Euro angezeigt werden sollen, nimmt man als Pattern #. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Fallstrick: in der von uns getesteten Version (4.1.3) wurde die Property net.sf.jasperreports.export.xls.formula nur dann ausgewertet, wenn das das jew. Textfeld eine korrekte &amp;amp;quot;Text field expression&amp;amp;quot; hat, sie darf also nicht leer sein. Ob das ein Bug ist oder nicht ist uns derzeit unklar.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Beispiel für eine komplexe Summenformel SUM(D7:D20,D28,D33,D40)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann die Formel auch als Expression formulieren, z.b. um eine Division durch 0 zu verhindern. Setzen Sie dazu das Häkchen bei &amp;amp;quot;Use an expression&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excelformula_expression.png]]&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel führt die Formel &amp;amp;quot;D91/D149&amp;amp;quot; nur aus, wenn die Variable $V{Haush_Professoren_1} (die Quelle für die Zelle D149) einen Wert größer 0 hat. Wenn nicht, wird keine Formel reingeschrieben, sondern der Wert 0. &lt;br /&gt;
&lt;br /&gt;
Diese Funktion bietet natürlich noch viel mehr Möglichkeiten, z.B. könnte man damit Excel-Zellennummern dynamisch berechnen etc. Beispiele dazu finden Sie in den JasperReport Demos in demo/samples/xlsformula/reports/XlsFormulaReport.jrxml. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zeilennummern-dynamisch-berechnen-ein-beispiel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-179&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zeilennummern dynamisch berechnen (Ein Beispiel) ====&lt;br /&gt;
&lt;br /&gt;
Will man dass in der gesamten Exceldatei immer Spalte F=D+E ist, braucht man nicht für jede Zeile feste Formeln eintragen.&lt;br /&gt;
&lt;br /&gt;
Als Erstes schaut man in welcher Zeile die eigentlichen Daten anfangen, also z.B. nach den zwei Headerzeilen ganz am Anfang der Tabelle und den 3 Spaltenüberschriften, die pro Seite wiederholt werden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel&lt;br /&gt;
&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||($F{Soll}==null&amp;amp;amp;&amp;amp;amp;$F{Reste}==null))?&amp;amp;quot;&amp;amp;quot;:&amp;lt;span id=&amp;quot;anchor-180&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;SUM(D&amp;amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+&amp;lt;span id=&amp;quot;anchor-181&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;$V{REPORT_COUNT}.intValue()+2)+&amp;amp;quot;,E&amp;amp;quot;+(($V{PAGE_NUMBER}.intValue()*3)+$V{REPORT_COUNT}.intValue()+2)+&amp;amp;quot;)&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Elegant geht es auch so&lt;br /&gt;
&lt;br /&gt;
($F{Zweckbestimmung}.isEmpty()||&amp;lt;span id=&amp;quot;anchor-182&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;($F{Soll}==null&amp;amp;amp;&amp;amp;amp;$F{Reste}==null))?&amp;amp;quot;&amp;amp;quot;:&amp;lt;span id=&amp;quot;anchor-183&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-184&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-185&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;INDIRECT(\&amp;amp;quot;D\&amp;amp;quot; &amp;amp;amp; ROW())+INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das hat nur den Nachteil, dass die Formel in Excel nicht so schön ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;wenn-if-formel-ein-fallstrick&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-186&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;WENN-/IF-Formel – &#039;&#039;&#039;Ein&#039;&#039;&#039; Fallstrick ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick, der uns einige Stunden Arbeitzeit gekostet hat: die IF-Formel wird in OpenOffice und MS Excel mit dem Trennzeichen &amp;amp;quot;;&amp;amp;quot; für die THEN- und ELSE-Bedingung formuliert. JasperReports nutzt als Trennzeichen aber &amp;amp;quot;,&amp;amp;quot;. Interessanterweise wird dann im fertigen Excel das &amp;amp;quot;,&amp;amp;quot; als &amp;amp;quot;;&amp;amp;quot; angezeigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sumif-summen-mit-bedingungen-bsp.-zwischensummen-ignorieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-187&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-188&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;SUMIF – Summen mit Bedingungen (Bsp.: Zwischensummen ignorieren) ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn die Summe über einen großen Bereich gezogen werden soll, in dem auch Zwischensummen vorkommen, gibt es die Folgende Formel:&lt;br /&gt;
&lt;br /&gt;
SUMIF(A&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:A&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;,\&amp;amp;quot;&amp;amp;lt;&amp;amp;gt;Summe*\&amp;amp;quot;,B&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:B&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Wenn die Zwischensummen mit addiert werden würden, wäre das Ergebnis doppelt so hoch wie es sein sollte. Die Funktion SUMIF beinhaltet 3 Bereiche. Zuerst wird der Bereich eingegeben, auf den die Bedingung angewendet wird:&lt;br /&gt;
&lt;br /&gt;
A&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:A&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von A1 bis A10. &lt;br /&gt;
&lt;br /&gt;
Danach kommt die Bedingung:&lt;br /&gt;
&lt;br /&gt;
\&amp;amp;quot;&amp;amp;lt;&amp;amp;gt;Summe*\&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet, es werden alle Zeilen genommen, die &#039;&#039;&#039;&#039;&#039;NICHT&#039;&#039;&#039;&#039;&#039; mit „Summe“ anfangen.&lt;br /&gt;
&lt;br /&gt;
Als letztes kommt der Bereich, der summiert werden soll:&lt;br /&gt;
&lt;br /&gt;
B&amp;amp;quot;+$V{zeile_start}.intValue()+&amp;amp;quot;:B&amp;amp;quot;+$V{zeile_ende}.intValue()+&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Hier ist das z.B. von B1 bis B10. &lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel werden alle Zahlen zwischen B1 und B10 aufsummiert, wenn in der entsprechenden Zeile in der Spalte A der Text nicht mit „Summe“ beginnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;statt-0-werten-eine-leere-zelle-ausgeben&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-189&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-190&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Statt 0-Werten eine leere Zelle ausgeben ====&lt;br /&gt;
&lt;br /&gt;
Im Standardfall wird eine 0 ausgegeben, falls eine Formel in Excel auf leere Zellen oder Zellen mit einer 0 verweist. Um stattdessen eine leere Zelle auszugeben wird die Property Property net.sf.jasperreports.export.xls.pattern genutzt. Das obige Beispiel wird erweitert:&lt;br /&gt;
&lt;br /&gt;
###0.00;-###0.00;;@&lt;br /&gt;
&lt;br /&gt;
Die jeweiligen Zellen weisen nun 2 Nachkommastellen aus und zudem werden 0-Werte nicht mehr angezeigt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;openoffice-vs-excel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-191&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;OpenOffice vs Excel&amp;lt;span id=&amp;quot;anchor-192&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
OpenOffice kommt mit folgender Berechnung klar&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())+INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW())-INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW())-INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW())&amp;amp;quot;:&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Excel macht hier Ärger, wenn eine der Zellen Null ist, wird als Gesamtergebnis #WERT angezeigt, entweder Sum-Formel benutzen, oder noch mal mit IF prüfen, ob Zelle gefüllt ist&lt;br /&gt;
&lt;br /&gt;
Struktur ist (IF(Zelle leer,0,sonst Zellenwert))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;IF(INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;E\&amp;amp;quot; &amp;amp;amp; ROW()))+IF(INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;F\&amp;amp;quot; &amp;amp;amp; ROW()))-IF(INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;G\&amp;amp;quot; &amp;amp;amp; ROW()))-IF(INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW())=\&amp;amp;quot;\&amp;amp;quot;,0,INDIRECT(\&amp;amp;quot;H\&amp;amp;quot; &amp;amp;amp; ROW()))&amp;amp;quot;:&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;stretch-with-overflow-in-excel-korrekt-verarbeiten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-193&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;‚Stretch with Overflow‘ in Excel korrekt verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine Zelle haben mit besonders langem Text, z.B. „Unterstützungen auf Grund der Unterstützungsgrundsätze, Fürsorgemaßnahmen sowie Kosten nach dem Arbeitssicherheitsgesetz“, hilft es, nur bei der Zelle, Line Spacing auf double zu setzen, dann sieht es in Excel besser aus.&lt;br /&gt;
&lt;br /&gt;
Es wird das Stretch richtig verarbeitet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span id=&amp;quot;anchor-194&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.auto.fit.row&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.font.size.fix.enabled&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ verkleinert fonts bei bedarf&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.print.keep.full.text&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;pagination-in-excel-dokumenten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-195&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Pagination in Excel-Dokumenten ===&lt;br /&gt;
&lt;br /&gt;
In Excel-Dokumenten in die Seitengröße naturgemäß irrelevant. Trotzdem wird das im jrxml gesetzte Seitenformat beim Excel-Export beachtet. Das stellt sich so dar, dass im Excel-Dokument der „Rest der Seite“ durch einzelne breitere beziehungsweise höhere Zellen gefüllt wird. Das sieht beispielsweise folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unter dem Tabellenschluss ist die Zeile 84 so hoch, dass die im jrxml eingestellte Seitenhöhe erreicht ist. Um das zu verhindern wird für den gesamten Bericht &amp;lt;span id=&amp;quot;anchor-196&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;isIgnorePagination=“true“ gesetzt. Die Einstellung wird im source-Code ganz oben im Tag &amp;amp;lt;jasperReport isIgnorePagination=“true“&amp;amp;gt; gesetzt oder über die grafische Oberfläche:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_pagination2.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;excel-export-in-einzelne-tabellenblätter&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-197&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Excel-Export in einzelne Tabellenblätter ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normalerweise werden beim Export nach Excel die Berichtsinhalte in das erste Tabellenblatt geschrieben. Je nachdem wie Sie auf Berichtsebene die Property net.sf.jasperreports.export.xls.one.page.per.sheet setzen, wird der Seitenumbruch gesteuert. Setzen Sie den Wert auf &amp;amp;quot;true&amp;amp;quot;, dann führt jeder Seitenumbruch zu einem neuen Sheet bzw. Arbeitsblatt in der Excel-Datei. Standardmäßig werden diese dann &amp;amp;quot;Page 1&amp;amp;quot;, Page 2&amp;amp;quot; etc. benannt. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Namen der Sheets explizit vergeben wollen, können Sie dies wie folgt machen: Wenn Sie z.B. die Berichtsproperty net.sf.jasperreports.export.xls.sheet.names.all auf den Wert &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Hauptseite/wichtige Seite/Unwichtige Seite&amp;amp;quot; setzen, bekommen Sie drei Sheets mit den jew. Namen, d.h. der &amp;amp;quot;/&amp;amp;quot; fungiert als Trennzeichen. Dementsprechend sollte im Namen des Sheets kein &amp;amp;quot;/&amp;amp;quot; auftauchen.&lt;br /&gt;
&lt;br /&gt;
Seit JR 4.1 gibt es auch die Möglichkeit, die Sheetnamen dynamisch zu vergeben. Auch hier werden Properties mit Expressions genutzt.&lt;br /&gt;
&lt;br /&gt;
Es gibt verschiedene Möglichkeiten Berichtsinhalte in verschiedene Excel-Tabellenblätter zu verteilen. Im Folgenden werden zunächst Möglichkeiten betrachtet, welche bei Einzelberichten in Frage kommen. Danach geht es um die klassische Haupt- und Unterberichtsstruktur und zuletzt um Booklets, welche die in den meisten Fällen wohl elegantere Alternative zu klassichen Haupt- und Unterberichten darstellen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;einzelne-berichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-198&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Einzelne Berichte ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nehmen wir an wir haben einen Bericht mit der Gruppierung auf die Spalte &amp;amp;quot;LFB&amp;amp;quot;, im Gruppenkopf befindet sich ein Text Field mit der Expression $F{LFB}.&lt;br /&gt;
&lt;br /&gt;
Sie können diesem Textfeld eine Property net.sf.jasperreports.export.xls.sheet.name geben:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names.png]]&lt;br /&gt;
&lt;br /&gt;
Das Textfeld erhält somit beim Füllen des Berichts den jew. Wert, z.B. &amp;amp;quot;Anglistik, Amerikanistik&amp;amp;quot;, und diese Überschrift steht auch im Gruppenkopf. Wenn der Gruppenkopf das Attribut &amp;amp;quot;Start on a new page&amp;amp;quot; hat, dann beginnt der Gruppenkopf auf einer neuen Seite und, dank der Berichts-Property net.sf.jasperreports.export.xls.one.page.per.sheet , erzeugt Excel / OpenOffice dann ein neues Sheet mit dem Namen Anglistik, Amerikanistik. Beim Sheetnamen soll nur sichergestellt werden, dass kein &amp;amp;quot;/&amp;amp;quot; im Text vorkommt, daher der replace-Befehl zur Sicherheit. Hier ein Screenshot in OpenOffice:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_sheets_names2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man kann das gesamte Verhalten auch deaktivieren, indem man auf Berichtsebene das Attribut &amp;amp;quot;Ignore Pagination&amp;amp;quot; auf &amp;amp;quot;true&amp;amp;quot; setzen. In diesem Falle werden alle Seitenumbrüche ignoriert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis für SuperX/Edustore Nutzer: leider haben wir in älteren Kernmodul-Versionen dieses Attribut &amp;amp;quot; Ignore Pagination&amp;amp;quot; im Servlet fest auf &amp;amp;quot;true&amp;amp;quot; gesetzt, so dass Sie diese Funktion im Servlet erst ab Version SuperX 4.5 bzw. HISinOne-BI 7.0 nutzen können.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;haupt--und-unterberichte&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-199&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Haupt- und Unterberichte ====&lt;br /&gt;
&lt;br /&gt;
Das vorherige Kapitel hat aufgezeigt, wie innerhalb eines einzelnen Einzelberichtes mit gezieltem setzen von Seitenumbrüchen ein solcher Berichte auf verschiedene Tabellenblätter eines Excel-Dokumentes augeteilt wird.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Einzelberichte in einem Excel-Dokument gesondert auf verschiedene Tabellenblätter aufzuteilen eignen sich klassiche Haupt- und Unterberichtsstrukturen (vgl. Kapitel 3.5). Die simpelste Methode wäre das Seitenlayout eines Berichtes so groß zu wählen, dass der gesamte Bericht auf eine Seite passt. &lt;br /&gt;
&lt;br /&gt;
Falls Haupt- und Unterberichte verwendet werden, darauf achten, dass der Hauptbericht direkt unter dem letzten Unterberichtselement endet. Ansonsten entsteht ein weiteres leeres Tabellenblatt. Der folgende Screenshot zeigt, wie es nicht sein sollte. Hier muss das Summary-Band verkleinert werden, sodass es mit dem Unterberichtselement endet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_excel_export_main-_subreport.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;individuelle-gestaltung-bei-booklets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-200&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Individuelle Gestaltung&#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-201&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; bei Booklets ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Booklets bieten diverse Vorteile beim Gestalten der einzelnen Seiten beziehungsweise Sheets. Denn jeder Unterbericht kann hier individuell formatiert werden. Dies betrifft beispielsweise die Definition von Sheetnamen, da hierfür die Eigenschaft &amp;amp;quot;Tab name expression&amp;amp;quot; im &amp;amp;quot;Buch&amp;amp;quot;-[[#2.8.1.Hauptbericht im Booklet|outline|Bericht]] vorgesehen ist. Auch das Problem, dass ein Sheet in diesem Falle nicht mehrere Seite umfassen darf (und man somit die Seitengröße unrealistisch groß machen muss) ist damit behoben.&lt;br /&gt;
&lt;br /&gt;
Eine Ausnahme stellen jedoch die Properties dar. Diese werden im Hauptbericht gesetzt und gelten für alle Unterberichte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;das-drucklayout-in-excel-konfigurieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-202&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Das Drucklayout in Excel konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenränder-und-kopfzeile-im-drucklayout-formatieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-203&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Seitenränder und Kopfzeile im Drucklayout formatieren&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zum Anlegen eines Textes in der Kopfzeile gibt es die Properties&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-204&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.left&amp;amp;quot;&amp;amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je nach gewünschter Position wird der jeweiligen Property ein Wert übergeben. Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.center&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;![CDATA[&amp;lt;span id=&amp;quot;anchor-205&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;lt;span id=&amp;quot;anchor-206&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;10&amp;lt;span id=&amp;quot;anchor-207&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Meldung der Ist-Besetzung]]&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/property&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sheet.header.right&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;![CDATA[&amp;lt;span id=&amp;quot;anchor-208&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;amp;amp;10&amp;lt;span id=&amp;quot;anchor-209&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Anlage 1 &amp;lt;span id=&amp;quot;anchor-210&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;amp;&amp;amp;quot;Liberation Sans,Regular&amp;amp;quot;&amp;amp;amp;10 (zu VwV HWiF 3.2.1)]]&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/property&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird zentral der Text „&#039;&#039;&#039;Meldung der Ist-Besetzung&#039;&#039;&#039;“ übergeben. Der Text ist in der Schriftart Liberation Sans und fettgedruckt formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;), sowie in Schriftgröße 10 (&amp;amp;amp;10).&lt;br /&gt;
&lt;br /&gt;
Rechts wird der Text „&amp;lt;span id=&amp;quot;anchor-211&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;Anlage 1 &#039;&#039;&#039;&amp;lt;span id=&amp;quot;anchor-212&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;(zu VwV HwiF 3.2.1)“ verwandt. Der erste Teile „&#039;&#039;&#039;Anlage 1&#039;&#039;&#039;“ ist wie der zentrale Text formatiert (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Bold&amp;amp;quot;&amp;amp;amp;10). Für den zweiten Teil „(zu VwV HwiF 3.2.1)“ wird von Fett- auf Regulärdruck gewechselt (&amp;amp;amp;&amp;amp;quot;Liberation Sans,Regular&amp;amp;quot;&amp;amp;amp;10). Weitere Möglichkeiten zur Formatierung finden sich auf https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/extensions/XSSFHeaderFooter.html.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit die Kopfzeile im Drucklayout sichtbar ist, ist es notwendig den Seitenrand groß genug zu gestalten. Dafür werden folgende Properties genutzt:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.left.margin&amp;amp;quot; value=&amp;amp;quot;20&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.right.margin&amp;amp;quot; value=&amp;amp;quot;20&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.top.margin&amp;amp;quot; value=&amp;amp;quot;40&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.print.page.bottom.margin&amp;amp;quot; value=&amp;amp;quot;10&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;vordefinierte-zeilen-im-drucklayout-auf-jeder-seite-wiederholen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-213&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Vordefinierte Zeilen im Drucklayout auf jeder Seite wiederholen ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um im Drucklayout beispielsweise einen Tabellenkopf auf jeder Seite zu wiederholen, wird die Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-214&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-215&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.sx_repeating.rows.range&amp;amp;quot; &amp;lt;span id=&amp;quot;anchor-216&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-217&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;value=&amp;amp;quot;3:7&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
genutzt (dafür eigene Klasse de.superx.servlet.SxJRXlsExporter geschaffen und de.superx.servlet.JasperCreator angepasst – aktuell in NHS-Pack für 7.1 enthalten). Der Wert gibt an, welche Zeilen des Excel-Dokumentes im Drucklayout auf jeder Seite wiederholt werden. Im Beispiel (&#039;&#039;value=&amp;amp;quot;3:7&amp;amp;quot;&#039;&#039;) sind die Zeilen 3 bis 7 betroffen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenumbrüche-im-drucklayout-verhindern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-218&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenumbrüche im Drucklayout verhindern ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teilweise ist es wünschenswert Seitenumbrüche im Drucklayout zu verhindern, sowohl in der Breite als auch in der Höhe. Hierfür werden die Properties&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.fit.width&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.fit.height&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
genutzt. Also value kommen hier 1 und 0 für entweder true oder false infrage. Setzt man der Wert true, dann wird nicht umgebrochen. Das bedeutet für dieses Beispiel, dass der gesamte Inhalt des Excel-Dokuments auf eine Seite gedruckt würde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-verbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-219&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellen verbinden ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.export.xls.sx_cell_merge&amp;amp;quot; value=&amp;amp;quot;0,6,0,7|1,2,3,4&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
1,1,4,1 - will merge from B2 to E2. Remember it is zero based indexing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellschutz-aktivieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-220&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zellschutz aktivieren ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.password&amp;amp;quot; value=&amp;amp;quot;gmmmyflb&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
→ Alle Zellen sind mit Passwort geschützt.&lt;br /&gt;
&lt;br /&gt;
Wenn bestimmte Spalten/Zeilen nicht geschützt sein sollen:&lt;br /&gt;
&lt;br /&gt;
Property net.sf.jasperreports.export.xls.cell.locked  false.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies kann man auch über eine komplexe PropertyExpression steuern, z.B.&lt;br /&gt;
&lt;br /&gt;
(&lt;br /&gt;
&lt;br /&gt;
($F{Zeile}!=null&amp;amp;amp;&amp;amp;amp;(&lt;br /&gt;
&lt;br /&gt;
  $F{Zeile}.indexOf(&amp;amp;quot;A&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.indexOf(&amp;amp;quot;B&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.indexOf(&amp;amp;quot;C&amp;amp;quot;)&amp;amp;gt;-1||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;I.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;II.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;III.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;IV.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;V.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VI.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VII.&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Zeile}.equals(&amp;amp;quot;VIII.&amp;amp;quot;)))||&lt;br /&gt;
&lt;br /&gt;
($F{Kontengruppe}!=null&amp;amp;amp;&amp;amp;amp;$F{Kontengruppe}.equals(&amp;amp;quot;53,54,58&amp;amp;quot;))||&lt;br /&gt;
&lt;br /&gt;
($F{Name}!=null&amp;amp;amp;&amp;amp;amp;(&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe der (ordentlichen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Ordentliche &amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;- ordentliche&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;+/- Finanz&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Investitionen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Finanzbedarf&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe Deckung&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;5.1 E&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Summe sonstige betriebl&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Sonstige betriebliche&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;5.1.) Erträge aus Zuweisungen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Materialaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe Materialaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Personalaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe Personalaufwand&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;Sonstige betriebliche Aufwendungen&amp;amp;quot;)||&lt;br /&gt;
&lt;br /&gt;
$F{Name}.startsWith(&amp;amp;quot;= Summe sonstige betriebliche Aufwendungen&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
))?&amp;amp;quot;true&amp;amp;quot;:&amp;amp;quot;false&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zellen-fixieren&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Zellen fixieren ===&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio können Sie festlegen, dass beim Excel-Export bestimmte Zeilen und Spalten fixiert werden, indem Sie spezielle Eigenschaften für den Export konfigurieren.&lt;br /&gt;
&lt;br /&gt;
Um Zeilen und Spalten in Excel zu fixieren, müssen Sie die Eigenschaften &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;net.sf.jasperreports.export.xls.freeze.row &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
und &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;net.sf.jasperreports.export.xls.freeze.column&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
konfigurieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie möchten, dass die erste Zeile und die erste Spalte fixiert werden:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;net.sf.jasperreports.export.xls.freeze.row = 2&#039;&#039;&lt;br /&gt;
* &#039;&#039;net.sf.jasperreports.export.xls.freeze.column = B&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nach dem Export werden in Excel die erste Zeile und die erste Spalte fixiert, und der Rest des Arbeitsblatts bleibt scrollbar.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.freeze.column&amp;amp;quot; value=&amp;amp;quot;B&amp;amp;quot;/&amp;amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.freeze.row&amp;amp;quot; value=&amp;amp;quot;2&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hintergrund--oder-textfarben-beim-excel-export&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-221&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-222&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hintergrund- oder Textfarben beim Excel-Export ===&lt;br /&gt;
&lt;br /&gt;
Beim Excel Export werden Zellen, die ein Rechteck mit einer Print-When-Expression zugewiesen bekommen haben, u.U. nicht richtig wiedergegeben, während es beim PDF Export klappt. Um dies zu beheben müssen Sie&lt;br /&gt;
&lt;br /&gt;
1. den Farbraum beim Excel Export erweitern: Excel unterstützt bei Hintergrund- oder Vordergrundfarben nur wenige [http://dmcritchie.mvps.org/excel/colors.htm Farbcodes]. Für spezielle Farben nach RGB-Wert muss die Berichts-property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-223&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.create.custom.palette&amp;amp;quot; value=&amp;amp;quot;true&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
gesetzet werden (benötigt Bibliothek org-netbeans-core.jar im Classpath der Anwendung)&lt;br /&gt;
&lt;br /&gt;
2. Statt farbiger Textfelder oder Rechtecke mit &amp;amp;quot;Print-When-Expression&amp;amp;quot; müssen Sie [[#2.11.Conditional styles - Zeilen fett machen|outline|Conditional Styles]] nutzen.&lt;br /&gt;
&lt;br /&gt;
3. Wenn Sie mit Hintergrundfarben arbeiten, müssen die Textfelder und die jew. Styles die Eigenschaft &amp;amp;quot;Opaque&amp;amp;quot;=&amp;amp;quot;true&amp;amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
4. Beim Export nach Excel müssen Sie das JExcelApi nutzen. Dies ist bei SuperX seit Kernmodul 4.5 der Standard, bei HISinOne-BI seit Version 7.1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;seitenkopf-und-seitenfuß-bei-excel-unterdrücken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-224&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Seitenkopf und Seitenfuß bei Excel unterdrücken ===&lt;br /&gt;
&lt;br /&gt;
Wenn Ihr Bericht normalerweise ein Band &amp;amp;quot;Page Header&amp;amp;quot; bzw. &amp;amp;quot;Page Footer&amp;amp;quot; hat, können Sie dies beim Exportformat XLS unterdrücken (z.B. wenn Sie dort keine Seitenzahlen wünschen, bei PDF aber schon).&lt;br /&gt;
&lt;br /&gt;
Setzen Sie dazu die Berichts-Property&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-225&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-226&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.1&amp;amp;quot; value=&amp;amp;quot;pageHeader&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xls.exclude.origin.band.2&amp;amp;quot; value=&amp;amp;quot;pageFooter&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Ausgabeformat XLSX heißen die Properties:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.1&amp;amp;quot; value=&amp;amp;quot;pageHeader&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;property name=&amp;amp;quot;net.sf.jasperreports.export.xlsx.exclude.origin.band.2&amp;amp;quot; value=&amp;amp;quot;pageFooter&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dies klappt ab JR Version 4.5, sie können diese Properties aber lediglich im XML-Quellcode hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;dimension-tausend-euro&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-227&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dimension Tausend-Euro  ==&lt;br /&gt;
&lt;br /&gt;
In Excel als Dimension Tausend-Euro ausgeben, mit zwei Nachkommastellen&lt;br /&gt;
&lt;br /&gt;
In Deutschem Excel bei manueller Angabe benutzerdefiniertes Format #.##0,00.&lt;br /&gt;
&lt;br /&gt;
In Jasper muss Amerikanische Vorlage sein:&lt;br /&gt;
&lt;br /&gt;
-&amp;amp;gt; #,##0.00&lt;br /&gt;
&lt;br /&gt;
Bei Excel kann man als Property Expresion net.sf.jasperreports.export.xls.pattern z.B. nehmen&lt;br /&gt;
&lt;br /&gt;
#, → zeigt nur Tausender Werte an&lt;br /&gt;
&lt;br /&gt;
#,##0.00, → zeigt Tausernder Werte, mit zwei Nachkommastellen an&lt;br /&gt;
&lt;br /&gt;
der Werte selber ist einfach &amp;lt;span id=&amp;quot;anchor-228&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;$F{Soll}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei PDF/HTML muss man den Wert duch 1000 teilen $F{Soll}.doubleValue()/1000&lt;br /&gt;
&lt;br /&gt;
und dann als Pattern z.B. #,##0.00;-#,##0.00&lt;br /&gt;
&lt;br /&gt;
Die Rundung macht das Pattern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-in-edustore&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-229&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung in Edustore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;berichtsentwicklung-bei-grunddaten-und-basisberichten&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-230&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Berichtsentwicklung bei Grunddaten und Basisberichten ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;allgemein&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-231&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Allgemein ===&lt;br /&gt;
&lt;br /&gt;
In den Grunddaten- und Basisberichten kann man beliebige Ergebnistabellen lokal als XML speichern, und dann als Datenquelle in JasperReports einbinden. Dann kann man den Bericht lokal gestalten, und, wenn er fertig ist, in die Weboberfläche einhängen. Die XML Datei wird nur für die Testausgabe bei JasperReports verwendet und dient als Ersatz der Datenbank. Wenn der Bericht in der Weboberfläche eingehängt ist, wird dieser direkt mit frischen Daten versorgt.&lt;br /&gt;
&lt;br /&gt;
Für die Folgenden 2 Punkte „Datenquelle erzeugen“ und „Template erzeugen“ gibt es [http://www.superx-projekt.de/doku/benutzerhandbuch/movies/jasper_erzeugen.viewlet/jasper_erzeugen_viewlet_swf.html hier] einen Kurzfilm.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_vergleich_jrxml_xml_zusammen.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-232&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Ergebnistabelle eines Berichtes vorliegt, erhält man über den XML Export von SuperX die Datenquelle für den Jasper Report. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man lokal ab: Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine xml-Datei abspeichern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Falls der Tomcat in ISO Kodierung läuft, muss für JasperReports in der ersten Zeile bei encoding ein UTF-8 eingetragen werden. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;ISO-8859-1&amp;amp;quot;?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird ersetzt mit:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;UTF-8&amp;amp;quot;?&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In JasperReports sind dann folgende Schritte zu tun, um die neue Datenquelle einzubinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-jaspersoft-studio&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-233&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in JasperSoft Studio ====&lt;br /&gt;
&lt;br /&gt;
Die Datenquellen heißen hier &amp;amp;quot;Data Adapters&amp;amp;quot; und werden im Repository hinzugefügt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: wenn Sie JasperSoft in Ihrem vorhandenen Eclipse als Plugin installiert haben, sehen Sie den Reiter &amp;amp;quot;Repository&amp;amp;quot; nicht; in diesem Fall liegen die Data Adapter im jew. Projekt. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im Assistenten geben Sie XML-Document als Datentyp an, und im nächsten Reiter spezifizieren Sie das Format:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jaspersoft_datasource2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Datumsformat ist bei Edustore das deutsche Schema &amp;amp;quot;dd.MM.yyyy&amp;amp;quot;, und das Zahlenformat ist eine Zahl mit 6 Nachkommastellen und &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner, also &amp;amp;quot;#0.######&amp;amp;quot;. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist auch das Ankreuzfeld &amp;amp;quot;Use the report Xpath expression&amp;amp;quot;, dies müssen Sie immer ankreuzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;datenquelle-in-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-234&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Datenquelle in iReport ====&lt;br /&gt;
&lt;br /&gt;
Klick auf „Report Datasources“. Es öffnet sich ein Fenster, in dem die vorhandenen Datenquellen angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Fenster Klickt man auf „New“ um eine neue Datenquelle anzulegen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun wählt man „XML file datasource“ aus und klickt auf „Weiter“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Schritt wählt man einen Eindeutigen Namen aus, der auch später in dem Dropdown Menü erscheint, gibt den Dateipfad an und ändert die restlichen Einstellungen wie im Screenshot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Datasource_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Formate für Datum und Nummer müssen angegeben werden, da sonst die amerikanischen angenommen werden. Bei Locale müssen Sie &amp;amp;quot;Englisch&amp;amp;quot; angeben, weil Dezimalzahlen in den Edustore-XML-Quellen den &amp;amp;quot;.&amp;amp;quot; als Dezimaltrenner haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis: in JasperReports 3.7.1 werden trotz des korrekten Zahlenformats die Dezimalstellen von Beträgen immer mit &amp;amp;quot;,00&amp;amp;quot; wiedergegeben. Dies liegt an der &amp;amp;quot;Locale&amp;amp;quot;, man muss diese auf &amp;amp;quot;Englisch&amp;amp;quot; umstellen. Das Problem ist allerdings: sobald man das macht, kann man die XML-Datenquelle in der Datenquellenverwaltung nicht mehr ändern, d.h. man muss sie bei Änderungen löschen und neu einfügen.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Nach dem Speichern erscheint die Datenquelle im dropdown Menü und kann ausgewählt werden. Damit man die Datenquelle nutzen kann, braucht man auch noch ein Template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-erzeugen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-235&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template erzeugen ===&lt;br /&gt;
&lt;br /&gt;
Um ein leeres Template zu erzeugen, geht man wieder in die Ergebnistabelle der selben Maske, deren Datenquelle erstellt wurde, wählt im Dropdown Menü neben „Bericht entwerfen“ „Leerer Bericht“ aus und klickt auf das Icon daneben „Export als JasperReport-Template“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-leeren_Bericht_erstellen.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese Datei speichert man Lokal ab. Wenn das Ergebnis im Browser geöffnet wurde muss man sich den Quelltext der Seite anzeigen lassen, den Quelltext komplett markieren und kopieren ( Tastenkombination Strg + a und dann Strg + c), in einen UTF-8-fähigen Texteditor einfügen (Strg + v) und dann als eine jrxml Datei abspeichern. JR in der Endung jrxml steht für JasperReports. Damit können die Datenquellen und die Templates unterschieden werden und sogar den selben Dateinamen tragen (nur unterschiedliche Dateiendung).&lt;br /&gt;
&lt;br /&gt;
Sie sollten es sich nicht zumuten und versuchen über JasperReports einen neuen Bericht zu entwerfen. Nehmen Sie immer den &amp;amp;quot;leeren&amp;amp;quot; Bericht aus der entsprechende Maske, da dort sehr viele Kleinigkeiten voreingestellt sind. Sie sparen sich damit immens viel Arbeit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;template-einbinden&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;anchor-236&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Template einbinden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;reportdesign-verlinken&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-237&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reportdesign verlinken ====&lt;br /&gt;
&lt;br /&gt;
Um das erstellte Template einzubinden, muss zunächst die jrxml Datei in das Verzeichnis webapps/superx/WEB-INF/reports kopiert werden. Danach muss das Stylesheet im System bekannt gegeben werden. In Grunddaten und Basisberichte geht man dazu in „Administration“ → „Masken“ → „Stylesheet suchen“ und schickt die Maske so ab. Danach klickt man bei einem beliebigen Stylesheet auf den „bearbeiten“ Button ganz rechts in der Tabelle. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klickt dann auf „Neuen Datensatz erzeugen“.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Dateiname kommt der Dateiname der jrxml Datei rein, welche sich in dem reports Ordner befindet. Beschriftung und Beschreibung sollte eindeutig dem Stylesheet zuzuordnen sein. Für JasperReport wählt man bei „Tabelle oder Maske“ „Stylesheet für eine Ergebnistabelle“ aus. Der Dateityp stellt das default Ausgabeformat fest.&lt;br /&gt;
&lt;br /&gt;
Um dieses Stylesheet nun einer Maske zuzuordnen, geht man in die Maske „Administration“ → „Masken“ → „Maske suchen“, sucht in dem Feld „Maske“ die gewünschte Maske aus und klickt dann auf „Abschicken“. Nun klickt man auf den Button Stylesheets neben der Maske, der das neue Stylesheet zugeordnet werden soll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In dem neuen Fenster wählt man das neu erstellte Stylesheet aus und speichert diese Einstellung ab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_iReport-Stylesheet_4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit ist der Bericht der Maske zugeordnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Normal wird im Servlet direkt vom Berichtsergebnis nach JasperReports übergeben, d.h. ohne den Zwischenweg XML. Wenn aber im Dateinamen *_xmlsource.jrxml steht, wird Datenquelle XML erzwungen (für Makroberichte, Unterberichte, Subdatasets oder spezielle XPATH-Selektionen wichtig).&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;nutzung-des-upload-servlets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-238&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Nutzung des Upload Servlets ====&lt;br /&gt;
&lt;br /&gt;
Wenn Sie keinen Schreibzugriff auf den Ordner &#039;&#039;WEB-INF/reports&#039;&#039; haben, können Sie auch Templates über das [http://www.superx-projekt.de/doku/kern_modul/admin/f_Anpassungderwebxml.htm Upload Servlet ]direkt im Browser hochladen. Dazu müssen Sie in der web.xml die Dateiendungen .jrxml und (sofern benötigt) .jasper erlauben, siehe obiger Link.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie die Report Templates hochladen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload1.png]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Upload können Sie das Template zunächst registrieren:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_jr_upload2.png]]&lt;br /&gt;
&lt;br /&gt;
und dann der jew. Maske zuordnen. &amp;lt;span id=&amp;quot;anchor-239&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Beachten Sie, dass der Pfadname relativ zum Ordner WEB-INF/reports angegeben wird, also in der Regel&lt;br /&gt;
&lt;br /&gt;
../../default/custom&lt;br /&gt;
&lt;br /&gt;
bzw. beim Mandantenbetrieb&lt;br /&gt;
&lt;br /&gt;
../../Mandant-ID/custom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;probleme-beim-deployment-im-server&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-240&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Probleme beim Deployment im Server ====&lt;br /&gt;
&lt;br /&gt;
Es kann u.U. beim Deployment eines Berichts im Server das Problem auftreten, daß ein Bericht im lokalen iReport mit der XML-Datenquelle funktioniert, aber im Server für einzelne Merkmale kein Ergebnis geliefert wird. Dies hat folgende Ursache:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;feldnamen-im-berichtsdesign-weichen-vom-datenbank-feldnamen-ab&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-241&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Feldnamen im Berichtsdesign weichen vom Datenbank-Feldnamen ab  =====&lt;br /&gt;
&lt;br /&gt;
Bei der lokalen Entwicklung in iReport werden die Berichte mit der Datenquelle XML erzeugt. In den Muster-JRXML-Dateien, die man über das Feld &amp;amp;quot;Bericht erzeugen&amp;amp;quot; generiert, sind die Felder über die folgende Notation deklariert:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;field name=&amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;fieldDescription&amp;amp;gt;&amp;amp;lt;![CDATA[col[@id=&amp;amp;quot;4&amp;amp;quot; and wert!=&amp;amp;quot;&amp;amp;quot;]/wert]]&amp;amp;gt;&amp;amp;lt;/fieldDescription&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/field&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-242&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Dies bedeutet: Das Feld &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot; hat den Typ &amp;amp;quot;String&amp;amp;quot; und befindet sich im XML-Datenstrom in der vierten Spalte (col@id=4). Dabei befindet sich in Datenblattberichten im Spaltennamen immer ein &amp;amp;quot;\n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot;, um einen Zeilenumbruch im generischen Standardlayout zu erzeugen. Dieses &amp;amp;quot;\n&amp;amp;quot; wird dann für iReport und JasperReports automatisch durch ein Leerzeichen ersetzt.&lt;br /&gt;
&lt;br /&gt;
Wenn die XML-Datenquelle nicht verändert wird, dann ist das Feld immer mit dem gleichen Inhalt gefüllt. &lt;br /&gt;
&lt;br /&gt;
Wenn man den Bericht dann auf den Server kopiert und einbindet, ohne im Dateinamen &amp;amp;quot;_xmlsource&amp;amp;quot; zu verwenden, dann wird das Feld nicht über die Spaltennummer identifiziert, sondern über den Feldnamen, hier z.B. &amp;amp;quot;Fakultät/Fachbereich (Schlüssel)&amp;amp;quot;. Das bedeutet, daß der Server genau diesen Feldnamen zurückliefern muss. Das kann u.U. abweichen:&lt;br /&gt;
&lt;br /&gt;
* Der Server bzw. die zugrunde liegende Maske wurde verändert, so daß der Feldname geringfügig anders ist. Das sollte eigentlich nicht passieren, kann aber vorkommen.&lt;br /&gt;
* Beim Betrieb in HISinOne gibt es in allen Versionen bis 3.02 noch eine kleine Veränderung, wenn das Modul des zugrunde liegenden Datenblattberichts bzw. der Maske direkt per Tomcat-Start installiert wurde, und nicht in dem Edustore-Installation/Upgrade-Menü. Wenn die Module beim Tomcat Start in eine leere Datenbank installiert werden, dann werden Zeichenketten mit dem Feldinhalt &amp;amp;quot;\n&amp;amp;quot; verfremdet nach &amp;amp;quot;n&amp;amp;quot; (also der &amp;amp;quot;\&amp;amp;quot; wird entfernt). Das führt dann dazu, daß das Feld ohne den &amp;amp;quot;\&amp;amp;quot; in der jrxml-Datei deklariert wird, also z.B.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;field name=&amp;amp;quot;Fakultät/Fachbereichn(Schlüssel)&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;fieldDescription&amp;amp;gt;&amp;amp;lt;![CDATA[col[@id=&amp;amp;quot;4&amp;amp;quot; and wert!=&amp;amp;quot;&amp;amp;quot;]/wert]]&amp;amp;gt;&amp;amp;lt;/fieldDescription&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;/field&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-243&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Wenn man danach dann einen Upgrade der jew. Komponente ausführt, dann wird die Spalte in der Maske umbenannt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039;\n&#039;&#039;&#039;(Schlüssel)&amp;amp;quot; und der Feldname korrekt nach &amp;amp;quot;Fakultät/Fachbereich&#039;&#039;&#039; &#039;&#039;&#039;(Schlüssel)&amp;amp;quot; umgesetzt. Durch das &amp;amp;quot;n&amp;amp;quot; vor der Zeichenkette &amp;amp;quot;(Schlüssel)&amp;amp;quot; paßt der Feldname in der jrxml-Datei nicht mehr zum Ergebnis aus der Datenbank, und das Feld ist leer. So kann es passieren, daß ein Bericht in iReport funktioniert, im Server aber nicht. Im folgenden die Lösung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;korrektur-der-feldnamen-im-berichtsdesign&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
===== &amp;lt;span id=&amp;quot;anchor-244&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Korrektur der Feldnamen im Berichtsdesign =====&lt;br /&gt;
&lt;br /&gt;
Um sicherzustellen, dass der Feldname der jrxml-Datei mit der jeweils aktuell benutzten Datenbank-Version übereinstimmt, geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
* Erzeugen Sie in Edustore eine HTML-Ausgabe der zugrunde liegenden Abfrage, bei Datenblatt-Berichten ist dies das &amp;amp;quot;generische Standardlayout&amp;amp;quot;.&lt;br /&gt;
* Klicken Sie dann oben im Berichtskopf auf den Button &amp;amp;quot;Bericht entwerfen&amp;amp;quot; -&amp;amp;gt; &amp;amp;quot;leerer Bericht&amp;amp;quot; &lt;br /&gt;
* Im Quellcode sehen Sie die Zeilen &amp;amp;lt;field name=&amp;amp;quot;Berichtsname&amp;amp;quot; class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt; ... Hier ist jedes einzelne Feld aus der Datenbank deklariert.&lt;br /&gt;
* Markieren Sie alle Zeilen bis zum letzten &amp;amp;quot;&amp;amp;lt;field...&amp;amp;gt;&amp;amp;quot;-Element, i.d.R. ist dies das Feld &amp;amp;lt;field name=&amp;amp;quot;user&amp;amp;quot;..., und kopieren Sie dies in die Zwischenablage&lt;br /&gt;
* Öffnen Sie die jrxml-Datei mit einem UTF-8-fähigen Editor, z.B. Jedit.&lt;br /&gt;
* Ersetzen Sie genau die &amp;amp;quot;&amp;amp;lt;field...&amp;amp;quot;-Passage aus der Zwischenablage.&lt;br /&gt;
* Speichern Sie den Bericht, und testen Sie die Vorschau in JasperReports. Wahrscheinlich kommt eine Fehlermeldung &amp;amp;quot;Field ... does not exist&amp;amp;quot; o.ä., dann müssen Sie das Feld mit Suchen-&amp;amp;gt;Ersetzen umbenennen.&lt;br /&gt;
* Das machen Sie so lange, bis die Vorschau funktioniert. Danach können Sie die jrxml-Datei wieder auf den Server kopieren. Die Felddeklaration passt dann zum Server. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;zuordnung-von-default-feldbelegungen-zu-stylesheets&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-245&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Zuordnung von Default-Feldbelegungen zu Stylesheets ==&lt;br /&gt;
&lt;br /&gt;
Es können für Stylesheets Default-Feldbelegungen für Stylesheets hinterlegt werden. Hintergrund dieser Funktion ist, dass bei speziellen Stylesheets standardmäßig beliebig viele Spalten vorbelegt werden können. In Datenblattberichten gibt es z.B. das Feld &amp;amp;quot;Felder&amp;amp;quot;, in dem die auszugebenden Spalten angegeben werden. Aus Performancegründen sollten nur die Spalten ausgegeben werden, die auch benötigt werden. So kann dann z.B.für JasperReport Stylesheets hinterlegt werden können, welche Spalten auf jeden Fall benötigt werden. Der Anwender weiß nicht welche Spalten benötigt werden und würde im Normalfall alle Spalten ausgeben lassen um keine Fehlermeldung zu erhalten. Dadurch würde aber wiederum der Bericht unnötig lange dauern, da alle Spalten berechnet werden müssen, auch die, welche nicht benötigt werden.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie ein Stylesheet erstellt haben und dieses in SuperX eingebunden haben gehen Sie wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Sie gehen in die Maske &amp;amp;quot;Administration -&amp;amp;gt; Tabelle suchen&amp;amp;quot;, geben dort bei Stichwort &amp;amp;quot;stylesheet_field&amp;amp;quot; ein und schicken die Maske ab.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_maske.png]]&lt;br /&gt;
&lt;br /&gt;
In der folgenden Ergebnistabelle klicken Sie bei &amp;amp;quot;stylesheet_field_list&amp;amp;quot; auf den &amp;amp;quot;Bearbeiten&amp;amp;quot; Button.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_tabelle.png]]&lt;br /&gt;
&lt;br /&gt;
In dem nun geöffneten Fenster sehen Sie alle Zuordnungen, welche bereits eingetragen sind. Hier wird aber lediglich das Stylesheet ausgegeben und nicht die Tabellen und Federzugehörigkeit. Dies hätte wegen der vielen Auswahlmöglichkeiten jeden Browser gekillt. Um Einzelheiten zu erfahren müssen Sie daher auf den Details-Button klicken. Auch wenn Sie eine neue Zuordnung erstellen möchten klicken Sie zunächst auf den Detail-Button eines beliebigen Stylesheets.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_list.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt können Sie die Zugehörigkeit des Stylesheets zu Tabelle und Feld ändern oder eine neue Zuordnung erstellen. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn ein Tabellenname ausgewählt und abgespeichert wurde, können nur Spalten dieser Tabelle ausgewählt werden. Wenn Sie die Tabelle ändern wollen, müssten Sie zunächst die Tabelle ändern, abspeichern und dieses Formular erneut aufrufen. Erst dann würden die Spalten der ausgewählten Tabelle in der Listbox Fieldname erscheinen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field_edit.png]]&lt;br /&gt;
&lt;br /&gt;
Um eine neue Verknüpfung zu erstellen klicken Sie zuerst auf den + Button oben rechts. Danach erscheint das gleiche Formular nur ohne ausgefüllte Felder. Hier können Sie das Stylesheet und den Tabellennamen auswählen und die dazu passende Spalte der Tabelle die Sie zuvor ausgewählt haben. Achten Sie darauf die Tabelle zu nehmen, welche im Datenblatt verwendet wird. Danach nur noch über das Diskettensymbol oben rechts abspeichern und eine Spalten-Stylesheet-Verknüpfung ist fertig. Diesen Schritt wiederholen Sie für jede Spalte, die Sie in dem JasperReport Bericht benötigen.&lt;br /&gt;
&lt;br /&gt;
Ab Kernmodul 4.2 bzw. HISinOne 5.1 geht es noch komfortabler, Sie können hier auf einzelne Stylesheets filtern : Administration → Masken → Stylesheet suchen &lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst den Bericht aus, und klicken Sie dann rechts beim Bearbeiten-Button in der Spalte Felder-Vorbelegungen bearbeiten: &lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_stylesheet_field.png]]&lt;br /&gt;
&lt;br /&gt;
In dem Bearbeitungsformular können Sie Datensätze erzeuge, löschen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kurzanleitung-direktaufruf-von-jasper-berichten-von-der-maske&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-246&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span id=&amp;quot;anchor-247&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kurzanleitung Direktaufruf von Jasper-Berichten von der Maske ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Abschicken der Maske kann man auch direkt auf den entsprechenden Jasper-Bericht umgeleitet werden. Es muss dazu in der Maske ein Feld geben mit dem Namen&lt;br /&gt;
&lt;br /&gt;
tablestylesheet&lt;br /&gt;
&lt;br /&gt;
und der relation &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-248&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;amp;gt; select distinct filename,X.caption from sx_stylesheetsX,&amp;lt;br /&amp;gt;&lt;br /&gt;
sx_mask_style S where X.tid=S.stylesheet_id and S.maskeninfo_id=23880&lt;br /&gt;
&lt;br /&gt;
und zum Beispiel für Default der Maske 23880&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;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=23880 and S.ord=2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für die Anzeige des Feldes tablestylesheet im Browser wird eine Berschriftung caption hinterlegt, damit auf der Maske &amp;amp;quot;Bericht&amp;amp;quot; erscheint. Im neuen Kern-Modul passiert dies automatisch.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich einen manuellen Eintrag in die Tabelle &#039;&#039;sx_captions&#039;&#039; einzufügen (siehe Maske Administration -&amp;amp;gt; Maske -&amp;amp;gt; Beschriftung suchen).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| tid&lt;br /&gt;
| table_name&lt;br /&gt;
| field_name&lt;br /&gt;
| locale&lt;br /&gt;
| contents_short&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;&amp;amp;lt;wird automat. vergeben&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
| felderinfo&lt;br /&gt;
| tablestylesheet&lt;br /&gt;
| de&lt;br /&gt;
| Bericht&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Außerdem muss man die Maske um ein Feld Ausgabeformat ergänzen, das die Art=1 hat und folgende relation:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span id=&amp;quot;anchor-249&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and nature::smallint&amp;amp;lt;100 order by nature::smallint&lt;br /&gt;
&lt;br /&gt;
Beispiel für Default Excel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-250&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;amp;lt;&amp;amp;lt;SQL&amp;amp;gt;&amp;amp;gt; select element_value,description from menu_element where element=&#039;Ausgabeformat&#039; and description=&#039;Excel&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Achtung: Hier kommen erst Ergebnisse, wenn Sie das Kernmodul 4.1 / HISinOne 3.0 oder höher installieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;spezielle-variablen&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-251&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Spezielle Variablen ==&lt;br /&gt;
&lt;br /&gt;
Im Berichtsdesign können neben den Feldern der Ergebnistabelle auch z.B. der Berichtsname, Erleuterung, user und standdatum benutzt werden. Zu finden sind diese im &amp;amp;quot;Report Inspector&amp;amp;quot; unter Fields. Um auch Hochschulspezifische Informationen wie Hochschulname oder Hochschul-Webadresse in einen Bericht importieren zu können wurden unter anderem die sx_captions Variablen &amp;amp;quot;REPORT_HEADING_INSTITUTION&amp;amp;quot; und &amp;amp;quot;REPORT_HEADING_URL&amp;amp;quot; integriert. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_sx_captions_markiert.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese können genau wie die anderen Fields in den Bericht per Drag&amp;amp;amp;Drop gezogen werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;makroberichte-als-datenquelle-für-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-252&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Makroberichte als Datenquelle für JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Sie können als Datenquelle für JR nicht nur einzelne Masken nehmen, sondern auch die Ausgabe von Makro-Masken. Dadurch können die verschiedenartigsten Informationen aus den normalen Masken für übergreifende Berichte genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt, wie im KLR-Bericht &amp;amp;quot;Berichtsblatt: Kennzahlen aus der Kostenrechnung&amp;amp;quot; Teile verwendet werden, um einen eigenen JR zu erzeugen, der wiederum Elemente des Makroberichts als Unterbericht nutzt. &lt;br /&gt;
&lt;br /&gt;
Zunächst rufen Sie den Makrobericht auf:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_html.png]]&lt;br /&gt;
&lt;br /&gt;
Das Bild zeigt die ersten drei Elemente des Makros, sie werden mit einer Ordnungsnummer durchnummeriert.&lt;br /&gt;
&lt;br /&gt;
Wir laden dazu die XML-Datenquelle herunter, die XML-Datenquelle binden wir wie [[#3.1.2.Datenquelle erzeugen|outline|gewohnt]] in JasperReports ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_datenquelle.png]]&lt;br /&gt;
&lt;br /&gt;
Dann klicken wir im Browser über den Tabellen den Button rechts von &amp;amp;quot;Bericht entwerfen&amp;amp;quot; → Leerer Bericht. Die JRXML-Datei speichern wir wie [[#3.1.3.Template erzeugen|outline|gewohnt]].&lt;br /&gt;
&lt;br /&gt;
Im Designer sehen wir nun bei den Feldern eine erweiterte Liste:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_jrxml.png]]&lt;br /&gt;
&lt;br /&gt;
Wir sehen also, daß die Ergebnisspalten mit einem Präfix für die Tabellennummer versehen sind, z.B. &amp;amp;quot;tab_0&amp;amp;quot;. Dadurch können wir die Tabellen und somit auch die jew. Spalten eindeutig identifizieren. Dies ist gleichzeitig der Hauptbericht. Das Detail-Band löschen wir (ist nicht nutzbar), stattdessen aktivieren wir ein Summary Band. &lt;br /&gt;
&lt;br /&gt;
Dann erzeugen wir den [[#2.5.Unterberichte |outline|Unterbericht]] für Studierenden-VZÄ. Dazu speichern wir die obige jrxml-Datei z.B. mit dem Namen makro_beispiel_ub_stud.jrxml und entfernen das Titel-Band und Seitenfuß-Band. Dann fügen wir im Designer einen Parameter &amp;amp;quot;ordnr&amp;amp;quot; hinzu:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_param.png]]&lt;br /&gt;
&lt;br /&gt;
Der Unterbericht bekommt dann in der Report Query folgende Änderung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_report_query.png]]&lt;br /&gt;
&lt;br /&gt;
Die Ordnungsnummer wird vom Hauptbericht übergeben und dient dazu, in der XML-Datenquelle auf die einzelne Tabelle zu filtern.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich geben wir noch einen weiteren Filter ein, damit die Summenzeilen aus der Originaltabelle nicht in die Kreuztabelle aufgenommen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_filter.png]]&lt;br /&gt;
&lt;br /&gt;
Damit der Unterbericht auch &amp;amp;quot;stand-alone&amp;amp;quot; ausführbar ist, können Sie dem Parameter &amp;amp;quot;ordnr&amp;amp;quot; auch einen Standardwert zuweisen, hier z.B. &amp;amp;quot;2&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_ordnr_default.png]]&lt;br /&gt;
&lt;br /&gt;
Nun können wir die [[#2.5.Unterberichte |outline|Kreuztabelle]] mit dem Assistenten erzeugen. Für unser Beispiel enthält die Kreuztabelle Studierenden-VZÄ nach Studiengang und Fachkennzeichen:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_ub_crosstab.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir speichern den Unterbericht und binden ihn in den Hauptbericht im Summary Band ein. Dabei vergeben wir wie gewohnt die Parameter XML_LOCALE und XML_NUMBER_PATTERN. Außerdem erzeugen wir den Parameter &amp;amp;quot;ordnr&amp;amp;quot;, und weisen diesem den Wert 2 zu, weil die Studierenden-Tabelle die Ordnungsnummer 2 hat (s.o.):&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hauptbericht_ub_params.png]]&lt;br /&gt;
&lt;br /&gt;
Damit ist die Konfiguration beendet, der Bericht sieht so aus:&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_makro_hb_erg.png]]&lt;br /&gt;
&lt;br /&gt;
Weitere Unterberichte lassen sich analog hinzufügen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Hinweis zum Einbinden im Servlet: Unterberichte arbeiten nur mit der Datenquelle XML, daher müssen Sie die Datei des Hauptberichts mit dem Suffix &amp;amp;quot;_xmlsource&amp;amp;quot; versehen. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;kompatibilität-von-ireport-mit-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-253&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Kompatibilität von iReport mit JasperReports ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mit iReport Berichte erzeugen, sollte wie gesagt die iReport-Versionsnr. mit der JasperReports-Version übereinstimmen, die der jew. Server nutzt. In Edustore ist dies derzeit die Version 5.1.0. Wenn die Versionsnummern nicht übereinstimmen, dürfen Sie keinesfalls die *.jasper-Dateien von dem lokalen Arbeitsplatz zum Tomcat Server kopieren.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus kann es auch weitere Abhängigkeiten geben, iReport bringt ein paar mehr Bibliotheken mit, als JasperReports. Wenn Sie dann eine jrxml-Datei auf den Server kopieren, könnte es eine Fehlermeldung geben in dem Stil&lt;br /&gt;
&lt;br /&gt;
java.lang.NoSuchMethodError:...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Das Vorgehen ist hier wie folgt:&lt;br /&gt;
&lt;br /&gt;
* Prüfen Sie zunächst, ob Sie die jeweilige Bibliothek wirklich brauchen. &lt;br /&gt;
* Wenn ja, dann ermitteln Sie aus dem Namen der fehlenden Klasse den Namen der *.jar-Datei. Meist reicht es, wenn Sie den Klassennamen in einer Suchmaschine eingeben, oder in einer speziellen Java-Suchmaschine wie http://www.jarfinder.com/&lt;br /&gt;
* Wenn Sie die jar-Datei identifiziert haben, können Sie diese von iReport-xxx/ireport/modules/ext/ in das webapps/superx/WEB-INF/lib Verzeichns kopieren. &lt;br /&gt;
* Danach müssen Sie Tomcat neu starten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Achtung: gehen Sie beim Kopieren in den WEB-INF/lib Ordner möglichst &#039;&#039;&#039;sparsam&#039;&#039;&#039; um: manchmal gibt es zwischen einzelnen Bibliotheken unerwünschte und unvorhersehbare Querabhängigkeiten, z.B. nutzt eine iReport-Bibliothek xy.jar eine andere Bibliothek vz.jar, welche bereits im Tomcat Server vorhanden ist – aber mit einer anderen Versionsnummer. In diesem Falle kann es zu seltsamen Phänomenen kommen, die sehr schwer zu diagnostizieren sind, bis hin zu einer Instabilität des Servers. Man muss solche Kopiermaßnahmen auf jeden Fall gründlich testen!&amp;lt;br /&amp;gt;&lt;br /&gt;
Unter uns: Wir nennen Probleme, die dadurch entstehen können, die &amp;amp;quot;jar-Hölle&amp;amp;quot;...&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Im folgenden sammeln wir ein paar Beispiele für gefahrlose Kopieraktionen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ireport-grafiken-in-jasperreports&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-254&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;iReport Grafiken in JasperReports ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;anchor-255&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Bitte vermeiden Sie, iReport-spezifische &amp;amp;quot;Themes&amp;amp;quot; zu benutzen (z.B. &amp;amp;quot;aegean&amp;amp;quot;), denn dafür würden weitere Bibliotheken benötigt. Wenn Sie z.B. die folgende Fehlermeldung bekommen, wurde ein Theme benutzt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_grafik_theme_error.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dann sollten Sie die Einstellung für das Objekt (hier das Theme der Grafik) wieder auf default setzen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-bibliotheken-von-ireport&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== &amp;lt;span id=&amp;quot;anchor-256&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Bibliotheken von iReport ====&lt;br /&gt;
&lt;br /&gt;
Bei der Meldung&lt;br /&gt;
&lt;br /&gt;
java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter&lt;br /&gt;
&lt;br /&gt;
sollten Sie die Bibliotheken &lt;br /&gt;
&lt;br /&gt;
iReport-xxx/ireport/modules/ext/asm.jar &lt;br /&gt;
&lt;br /&gt;
und zur Sicherheit auch&lt;br /&gt;
&lt;br /&gt;
asm-attrs.jar&lt;br /&gt;
&lt;br /&gt;
in den WEB-INF/lib-Ordner kopieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;troubleshooting&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-257&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;report-problem-class-not-set-for-bucket-variable&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-258&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Report Problem: Class not set for bucket: &amp;amp;lt;&amp;amp;lt;Variable&amp;amp;gt;&amp;amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Das Problem tritt in iReport 4.1.1 u.a. bei Kreuztabellen auf. Bei diesem Fehler fehlt in der jrxml-datei im Element &amp;amp;lt;bucketExpression&amp;amp;gt; Z.B.: class=&amp;amp;quot;java.lang.String&amp;amp;quot;. Diese einfach im Editor ergänzen und es funktioniert. Beispiel:&lt;br /&gt;
&lt;br /&gt;
Aus :&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;bucketExpression&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;bucketExpression class=&amp;amp;quot;java.lang.String&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;die-jasper-datei&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-259&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Die jasper Datei ==&lt;br /&gt;
&lt;br /&gt;
Die jasper Datei ist die kompilierte jrxml. Wenn ein Bericht übertragen werden soll, z.B. von dem Entwickler auf den Server oder von dem Development System auch das Produktivsystem immer nur die jrxml Datei übertragen, da es bei Versionsunterschieden in JasperReport zu Fehlern kommt, wenn die Kompilierte Version zur Verfügung steht. Sobald der Bericht ausgeführt wird, erstellt (kompilliert) JasperReports automatisch die jasper Datei. &lt;br /&gt;
&lt;br /&gt;
Wenn die jasper Datei zur verfügung steht, wird auch nur noch diese von JasperReports verwendet und nicht mehr neu kompiliert. Falls Sie also einen Bericht weiter entwickelt haben oder eine neue Version einspielen, löschen Sie direkt die jasper Datei. Ansonsten werden die Änderungen nicht wirksam.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;im-excel-export-fehlen-felder&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-260&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Im Excel Export fehlen Felder ==&lt;br /&gt;
&lt;br /&gt;
In Excel werden überlappende Elemente nicht angezeigt. Wenn also 2 Elemente übereinander liegen wird in Excel nur das oberste (welches im Vordergrund liegt) angezeigt. Hier ist besonders drauf zu achten, dass visuell 1px Abstand zwischen den Elementen Platz ist. Wenn von beiden Elementen jeweils eine Linie zu sehen ist, ist es korrekt. Wenn nicht, zählt das schon als Überlappung. Dafür im iReport Designer am besten ganz nah heran zoomen um diesen Abstand zu prüfen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel. Die beiden oberen Elemente überlappen, die unteren nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:JasperReports-Handbuch_ireport_excel.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hinweis-für-hisinone-7.0-kompatibilität&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-261&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hinweis für HisInOne 7.0 Kompatibilität ==&lt;br /&gt;
&lt;br /&gt;
Jrxml-Dateien, die unter iReport 4.1.3 entwickelt wurden und in HisInOne 7.1 funktionieren, können in 7.0. zur Fehlermeldung führen:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
java.lang.NoClassDefFoundError: net/sf/jasperreports/compilers/GroovyEvaluator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der jasperreports5.1.0 (hisinone 7.0) ist die Klasse GroovyEvaluator nicht enthalten, für 7.1 ist die jasperreports-6.1.0.jar enthalten, die enthält den GroovyEvaluator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Workaround:&lt;br /&gt;
&lt;br /&gt;
language=&amp;amp;quot;groovy&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ändern in &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
language=&amp;amp;quot;java&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;html-export-keinen-whitespace&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-262&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;HTML Export keinen whitespace ==&lt;br /&gt;
&lt;br /&gt;
Normal macht JR bei HTML-Exporten für den „Seitenumbruch“ eine Reihe von Leerzeilen. Um dies zu vermeiden, setzen Sie die Property IgnorePagination=true:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;jasperReport xmlns=&amp;amp;quot;http://jasperreports.sourceforge.net/jasperreports&amp;amp;quot; xmlns:xsi=&amp;amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;amp;quot; xsi:schemaLocation=&amp;amp;quot;http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd&amp;amp;quot; name=&amp;amp;quot;Kaufm. Quartalsbericht&amp;amp;quot; language=&amp;amp;quot;groovy&amp;amp;quot; pageWidth=&amp;amp;quot;2925&amp;amp;quot; pageHeight=&amp;amp;quot;565&amp;amp;quot; orientation=&amp;amp;quot;Landscape&amp;amp;quot; columnWidth=&amp;amp;quot;2925&amp;amp;quot; leftMargin=&amp;amp;quot;0&amp;amp;quot; rightMargin=&amp;amp;quot;0&amp;amp;quot; topMargin=&amp;amp;quot;0&amp;amp;quot; bottomMargin=&amp;amp;quot;0&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
isIgnorePagination=&amp;amp;quot;true&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;uuids&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== &amp;lt;span id=&amp;quot;anchor-263&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;UUID&#039;s ==&lt;br /&gt;
&lt;br /&gt;
In Jaspersoft Studio wird an jedes Element eine lange UUID angehängt, in aktuellen Versionen von SuperX/ Edustore macht das keine Probleme. In älteren Versionen bzw. in iReport 4.* schon. Damit der JasperReport abwärtskompatibel ist, muss diese gelöscht werden. Bei großen Berichten taucht diese aber unter Umständen mehrere hundert Mal auf. Hier kann in JasperSoft Studio in dem &amp;amp;quot;Source&amp;amp;quot;-Reiter des Berichtsdesigners nach folgender Regular Expression gesucht werden und diese mit einem Leerzeichen ersetzt werden:&lt;br /&gt;
&lt;br /&gt;
uuid=&amp;amp;quot;[0-9a-z-]{36}&amp;amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;weitere-dokus&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= &amp;lt;span id=&amp;quot;anchor-264&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Weitere Dokus =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Ahammad, S. (2010). iReport 3.7.Learn how to use iReport to create, format, and export reports. Birmingham: Packt&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Haneke, U. et al. (2010). Open Source Business Intelligence. Möglichkeiten, Chancen und Risiken quelloffener BI-Lösungen. Wien: Hanser&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Toffoli, G. (2007). The definitive guide to iReport. Berkeley, CA: Apress&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Noch mehr Infos (nur Englisch) erhält man unter:&amp;lt;br /&amp;gt;&lt;br /&gt;
http://jasperforge.org/plugins/project/project_home.php?projectname=ireport&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;und natürlich unsere Website:&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;http://www.superx-projekt.de/doku/entwicklung/iReport-Handbuch/main.htm&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;span id=&amp;quot;anchor-265&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_007.png&amp;diff=16336</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 007.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_007.png&amp;diff=16336"/>
		<updated>2026-07-06T06:23:20Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_008.png&amp;diff=16335</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 008.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_008.png&amp;diff=16335"/>
		<updated>2026-07-06T06:23:19Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_005.png&amp;diff=16334</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 005.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_005.png&amp;diff=16334"/>
		<updated>2026-07-06T06:23:19Z</updated>

		<summary type="html">&lt;p&gt;Andrek: (Benutzername entfernt) (Logbucheinzelheiten entfernt)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_005.png&amp;diff=16333</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 005.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_005.png&amp;diff=16333"/>
		<updated>2026-07-06T06:23:19Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_002.png&amp;diff=16332</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 002.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_002.png&amp;diff=16332"/>
		<updated>2026-07-06T06:23:19Z</updated>

		<summary type="html">&lt;p&gt;Andrek: (Benutzername entfernt) (Logbucheinzelheiten entfernt)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_002.png&amp;diff=16331</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 002.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_002.png&amp;diff=16331"/>
		<updated>2026-07-06T06:23:18Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_010.png&amp;diff=16330</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 010.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_010.png&amp;diff=16330"/>
		<updated>2026-07-06T06:23:18Z</updated>

		<summary type="html">&lt;p&gt;Andrek: (Benutzername entfernt) (Logbucheinzelheiten entfernt)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_010.png&amp;diff=16329</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 010.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_010.png&amp;diff=16329"/>
		<updated>2026-07-06T06:23:18Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_009.png&amp;diff=16328</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 009.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_009.png&amp;diff=16328"/>
		<updated>2026-07-06T06:23:18Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_014.png&amp;diff=16327</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 014.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_014.png&amp;diff=16327"/>
		<updated>2026-07-06T06:23:18Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_013.png&amp;diff=16326</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 013.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_013.png&amp;diff=16326"/>
		<updated>2026-07-06T06:23:17Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_012.png&amp;diff=16325</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 012.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_012.png&amp;diff=16325"/>
		<updated>2026-07-06T06:23:17Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_012.png&amp;diff=16324</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 012.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_012.png&amp;diff=16324"/>
		<updated>2026-07-06T06:23:17Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_011.png&amp;diff=16323</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 011.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_011.png&amp;diff=16323"/>
		<updated>2026-07-06T06:23:17Z</updated>

		<summary type="html">&lt;p&gt;Andrek: (Benutzername entfernt) (Logbucheinzelheiten entfernt)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_006.png&amp;diff=16322</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 006.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_006.png&amp;diff=16322"/>
		<updated>2026-07-06T06:23:17Z</updated>

		<summary type="html">&lt;p&gt;Andrek: (Benutzername entfernt) (Logbucheinzelheiten entfernt)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_011.png&amp;diff=16321</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 011.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_011.png&amp;diff=16321"/>
		<updated>2026-07-06T06:23:17Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_006.png&amp;diff=16320</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 006.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_006.png&amp;diff=16320"/>
		<updated>2026-07-06T06:23:16Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_004.png&amp;diff=16319</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 004.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_004.png&amp;diff=16319"/>
		<updated>2026-07-06T06:23:16Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_003.png&amp;diff=16318</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 003.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_003.png&amp;diff=16318"/>
		<updated>2026-07-06T06:23:16Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_001.png&amp;diff=16317</id>
		<title>Datei:JasperReports-Handbuch Eingebettet 001.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_Eingebettet_001.png&amp;diff=16317"/>
		<updated>2026-07-06T06:23:16Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „Kategorie:JasperReports-Handbuch“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JasperReports-Handbuch]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_booklet_cover1.png&amp;diff=16316</id>
		<title>Datei:JasperReports-Handbuch booklet cover1.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_booklet_cover1.png&amp;diff=16316"/>
		<updated>2026-07-06T06:22:33Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_styleref_design_folie.png&amp;diff=16315</id>
		<title>Datei:JasperReports-Handbuch styleref design folie.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_styleref_design_folie.png&amp;diff=16315"/>
		<updated>2026-07-06T06:22:32Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jaspersoft_designer.png&amp;diff=16314</id>
		<title>Datei:JasperReports-Handbuch jaspersoft designer.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jaspersoft_designer.png&amp;diff=16314"/>
		<updated>2026-07-06T06:22:32Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_booklet_preview1.png&amp;diff=16313</id>
		<title>Datei:JasperReports-Handbuch booklet preview1.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_booklet_preview1.png&amp;diff=16313"/>
		<updated>2026-07-06T06:22:32Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jaspersoft_design_properties.png&amp;diff=16312</id>
		<title>Datei:JasperReports-Handbuch jaspersoft design properties.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jaspersoft_design_properties.png&amp;diff=16312"/>
		<updated>2026-07-06T06:22:32Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_designer_ueberblick.png&amp;diff=16311</id>
		<title>Datei:JasperReports-Handbuch designer ueberblick.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_designer_ueberblick.png&amp;diff=16311"/>
		<updated>2026-07-06T06:22:31Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_notenschnitt_design1.png&amp;diff=16310</id>
		<title>Datei:JasperReports-Handbuch notenschnitt design1.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_notenschnitt_design1.png&amp;diff=16310"/>
		<updated>2026-07-06T06:22:31Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_makro_jrxml.png&amp;diff=16309</id>
		<title>Datei:JasperReports-Handbuch makro jrxml.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_makro_jrxml.png&amp;diff=16309"/>
		<updated>2026-07-06T06:22:31Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_style_def_folie.png&amp;diff=16308</id>
		<title>Datei:JasperReports-Handbuch style def folie.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_style_def_folie.png&amp;diff=16308"/>
		<updated>2026-07-06T06:22:30Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_kreuztabelle_manuell_2.jpg&amp;diff=16307</id>
		<title>Datei:JasperReports-Handbuch kreuztabelle manuell 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_kreuztabelle_manuell_2.jpg&amp;diff=16307"/>
		<updated>2026-07-06T06:22:30Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_kreuztabelle_manuell_1.jpg&amp;diff=16306</id>
		<title>Datei:JasperReports-Handbuch kreuztabelle manuell 1.jpg</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_kreuztabelle_manuell_1.jpg&amp;diff=16306"/>
		<updated>2026-07-06T06:22:30Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_properties2.png&amp;diff=16305</id>
		<title>Datei:JasperReports-Handbuch jss-ir properties2.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_properties2.png&amp;diff=16305"/>
		<updated>2026-07-06T06:22:29Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_properties1.png&amp;diff=16304</id>
		<title>Datei:JasperReports-Handbuch jss-ir properties1.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_properties1.png&amp;diff=16304"/>
		<updated>2026-07-06T06:22:29Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_preview2.png&amp;diff=16303</id>
		<title>Datei:JasperReports-Handbuch jss-ir preview2.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_preview2.png&amp;diff=16303"/>
		<updated>2026-07-06T06:22:29Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_palette2.png&amp;diff=16302</id>
		<title>Datei:JasperReports-Handbuch jss-ir palette2.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jss-ir_palette2.png&amp;diff=16302"/>
		<updated>2026-07-06T06:22:29Z</updated>

		<summary type="html">&lt;p&gt;Andrek: JasperReports-Handbuch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JasperReports-Handbuch&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard4.png&amp;diff=16301</id>
		<title>Datei:JasperReports-Handbuch jaspersoft design chart wizard4.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:JasperReports-Handbuch_jaspersoft_design_chart_wizard4.png&amp;diff=16301"/>
		<updated>2026-07-06T06:22:28Z</updated>

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