Zeile 3: | Zeile 3: | ||
Berichte werden in der Datenbank abgelegt<br> | Berichte werden in der Datenbank abgelegt<br> | ||
[[Datei:Berichte in der Datenbank.png|800px]] | [[Datei:Berichte in der Datenbank.png|800px]] | ||
== Webanwendungsmanager == | |||
Unten im Themenbaum, "Maskensicherung" -> zum Sichern, aber auch Einspielen | |||
Meldung (in rot) unkritisch: | |||
Keine Fehler aufgefallen (09:30:46) | |||
HINWEIS: Kein Inhalt für maskeninfo select_stmt tid=77770000 (vor CDATA kein Leerzeichen o Umbruch!) | |||
xupdate-Format enthält auch Themenbaumeintrag, klassische Form 5 Dateien nicht | |||
== Ein erster minimaler Bericht == | |||
Anzahl Studierende (Fälle) für ein festes Semester ausgeben | |||
select_stmt | |||
<pre> select sum(summe) from sos_stg_aggr where stichtag=6 and sem_rueck_beur_ein=20201; </pre> | |||
== Dynamische Generierung von SQL == | == Dynamische Generierung von SQL == | ||
===1. Klassische Verarbeitung ohne Freemarker=== | ===1. Klassische Verarbeitung ohne Freemarker=== |
Version vom 17. November 2022, 08:36 Uhr
Allgemeine Themen
Berichtstabellen
Berichte werden in der Datenbank abgelegt
Webanwendungsmanager
Unten im Themenbaum, "Maskensicherung" -> zum Sichern, aber auch Einspielen Meldung (in rot) unkritisch: Keine Fehler aufgefallen (09:30:46) HINWEIS: Kein Inhalt für maskeninfo select_stmt tid=77770000 (vor CDATA kein Leerzeichen o Umbruch!)
xupdate-Format enthält auch Themenbaumeintrag, klassische Form 5 Dateien nicht
Ein erster minimaler Bericht
Anzahl Studierende (Fälle) für ein festes Semester ausgeben select_stmt
select sum(summe) from sos_stg_aggr where stichtag=6 and sem_rueck_beur_ein=20201;
Dynamische Generierung von SQL
1. Klassische Verarbeitung ohne Freemarker
Die einzelnen Abfragen (auch synonym Masken genannt) enthalten Platzhalter, wie beispielsweise:
select monat,sum(betrag) from cob_busa where monat=<<Monat>>;
Auf der Maske gibt es ein Feld Monat. Vorm Abschicken des SQL wird <<Monat>> durch den gewählten Wert ersetzt. Falls eine Maske Felder enthält, welche optional gefüllt werden können, so wird der Ausdruck zwischen /* und */ gesetzt. Das hat zur Folge, dass dieser entfernt wird, falls kein Wert ausgewählt wurde. Aus beispielsweise
select monat,sum(betrag) from cob_busa where monat=<<Monat>> /* and gege=<<Geldgeber>> */;
wird, falls kein Geldgeber ausgewählt wurde z. B.
select monat,sum(betrag) from cob_busa where monat=1;
, aber falls ein Geldgeber ausgewählt wurde z. B.
select monat,sum(betrag) from cob_busa where monat=1 and gege=3;
Detail:
Der Ausdruck in <<XXX>> darf nur einmal in dem optionalen Block vorkommen. Falls er zweimal benötigt wird, müssen diese auf zwei Blöcke aufgeteilt werden. Z. B.:
/* and (dr in (<<Deckungsring>>) */
/* or dr2 in (<<Deckungsring>>) )*/
2. FreeMarker-Transformation
Nach der klassischen Transformation mit generateSql folgt ggfs. die FreeMarker Transformation. FreeMarker transformiert eine Vorlage (template) mit Hilfe eines Datenmodells (mit Java Objekten) zu einem Ausgabetext.
Sehr oft wird es zur Erzeugung von HTML benutzt, wir produzieren stattdessen SQL. Die Java-Objekte im Datenmodell sind die Felder, die auf der Maske zur Auswahl stehen.
Als einfachsten Anwendungsfall könnten wir also für eine Maske mit einem Monatsfeld statt des klassischen SuperX-Tags
select monat,sum(betrag) from tmp_busa where monat=<<Monat>>
auch die FreeMarker Notation nehmen.
select monat,sum(betrag) from tmp_busa where monat=${Monat}
Innerhalb von Freemarker kann ${} entfallen:
<#if Monat=1> ... </#if>
Ein komplexes Beispiel:
SQLVars
--freemarker template <sqlvars> <sqlvar name="countstudis"> select count(*) from sos_stg_aggr where stichtag=6 and sem_rueck_beur_ein=<<Semester>> </sqlvar> </sqlvars> <#if countstudis>0> BLOCK 1 <#else> BLOCK 2 </#if>
1. (klassische) Transformation macht aus SQL in der SQLVar z.B.
a) select count(*) from sos_stg_aggr where stichtag=6 and sem_rueck_beur_ein=20201 oder b) select count(*) from sos_stg_aggr where stichtag=6 and sem_rueck_beur_ein=20501
2. SQL wird ausgeführt und Ergebnis in Freemarker-Variable countstudis gespeichert
3. reguläre Freemarker Transformation wird durchgeführt, bei 1a) wird BLOCK1 ausgeführt, bei 1b) BLOCK2.
4. Entsprechender Teil wird ausgeführt.
Hinweise:
- Statt <<Semester>> hätte man auch ${Semester} nehmen können
- Wenn nach der klassischen Transformation < oder > Zeichen vorhanden sind, wird um den Text ein CDATA-Block benötigt, z.B.
<sqlvar name="counter"><![CDATA[select count(*) from .. where anzahl>0; ]]></sqlvar> - Weitere Möglichkeiten unter https://super-ics.de/superx/doku/entwicklerhandbuch/f_Variablen.htm
Freemarker Spickzettel
- Innerhalb von SQL Zugrif auf Variabeln mit ${Varname} z.B. ${Semester}, in Befehlen ohne z.B. <#if Geschlecht=1>
- Sind in Variabelnnamen Leer- oder Sonderzeichen enthalten Zugriff mit
- ${.vars["Köpfe oder Fälle?"]} oder in Befehlen
- <#if .vars["Köpfe oder Fälle?"]="xy">
- Variablen zuweisen mit assign, z.B. <#assign sortnr=0/> <#assign sortnr=sortnr+1/>
- IF-Befehle
- <#if "<<Aggregierung>>"="stark">
- insert into .. select ...
- <#elseif "<<Aggregierung>>="mittel">
- insert into .. select ...
- <#else>
- insert into .. select ...
- </#if>
- Innerhalb von IF Größer- und Kleinerzeichen darstellen mit > und < z.B. <#if anzahl > 0 >
- switch - statt vieler IF/ELSE-Bedinungen switch
- in SQLVars : wenn nach der klassischen Transformation < oder > Zeichen vorhanden sind, wird um den Text ein CDATA-Block benötigt, z.B. <sqlvar name="counter"><![CDATA[select count(*) from .. where anzahl>0; ]]></sqlvar>
- Schleifen
- einfach 10x durchführen <#list 1..10 as i> select ${i} .. </#list>
- über Ausgewählte Objekte <#foreach stg in Studiengang> </#foreach>
- Für Feldart 1 (Einfache Auswahlboxen) Zugriff auf das JavaObjekt und damit Methoden
- <#if AggregierungObject.containsElements> oder ${AggregierungObject.allNeededKeys}
Repository
Im Repository können SQL-Codeschnipsel hinterlegt werden, die in Berichten dynamisch eingesetzt werden.
Beispiel: Studierende, Prüfungen | Administration Stud.Prüf.| Prüfprotkoll Studierende - Weitere Einstellungen: Filter Studierende
Nur 1-4. HS Semester
Beispiel für Feldart 1 - Auswahl von Filter Studierende
<<SQL>> SELECT id,caption from sx_repository where aktiv =1 and today() between gueltig_seit and gueltig_bis and art='SOS_STUD_FILTER' order by 2;
Im select_stmt der Maske
/* and ${<<Filter Studierende>>} */
Feld ist als optional ausgewählt, d.h. wenn auf der Maske kein Wert ausgewählt wurde, wird die Zeile entfernt. Ist z.B. wird durch die 1. klassische Transformation daraus
and ${SOS_HSSEM_1_4}
Repository-Variablen stehen automatisch in Freemarker zur Verfügung. Es wird durch den Inhalt der Variablen ersetzt, im Beispiel also
and hssem <=4
Wenn Sie eigene Repository-Variablen mit art='SOS_STUD_FILTER' definieren, können Sie diese in allen Studierendenberichten mit Filterfeld nutzen.
Captions - Felderläuterungen
Makros
Studierende/Prüfungen
Komplexe Gewichtungen
https://wiki.his.de/mediawiki/index.php/Studierendengewichtungsregeln_-_HISinOne-BI
Anpassung von Berichten:
wenn Sie im Quelltext der Vorlage etwas sehen wie
<#assign lehr_stg_ab="lehr_stg_ab"/>
<#assign quelltabelle='sos_stg_aggr'/>
<#if "<<Köpfe oder Fälle ?>>"?index_of("S.gewichtung_id=")!=-1>
<#assign lehr_stg_ab="lehr_stg_ab_gew"/>
<#assign quelltabelle='sos_stud_gewichtung'/>
</#if>
Schauen Sie sich die Anleitung an unter https://wiki.his.de/mediawiki/index.php/Aenderung_von_Abfragen_zur_erweiterten_Gewichtung_-_HISinOne-BI
Weiterführende Informationen
Datenbankmodelle / Dokumentation
http://www.superx-projekt.de/
Unter Module, dann jeweils LInk "Installations-, Upgradehinweise, Dokumentation und Versionshistorie" , Handbücher und Ressourcen, Datenbankbeschreibung
Entwicklerhandbuch
http://entwicklerhandbuch.superx-projekt.de/ bzw. ältere, aber umfangreichere Dokumentation http://www.superx-projekt.de/doku/entwicklerhandbuch/main.htm