Amtliche Schulverwaltung
Sie befinden sich hier: start » bers » berichte » groovy

Programmierung mit Groovy (für Experten)

Diese Seite richtet sich nur an Anwender mit tiefgreifender Erfahrung im Bereich Informatik und Anwendungsentwicklung.

Das ASV-Team, die LTMs und die MULTIs leisten hierzu keinen technischen Support!

Überblick: Datenzugriff in ASV

Zum technischen Verständnis: die Daten in ASV sind bei der Enterprise-Installation in einer relationalen Datenbank abgelegt. Der Zugriff auf die Datenschicht erfolgt ausschließlich (!) über die Business-Objekte in Form von Klassen, z.B. die Klasse Schueler, Lehrer, Unterricht oder SchuelerSchuljahr, SchuelerStamm usw. Ein Zugriff direkt auf die ASV-Datenkbank ist nicht vorgesehen und kann, bedingt durch die mehrschichte Systemarchitektur, zur Lieferung falscher Daten führen. Damit der Datenzugriff dennoch möglich ist, arbeitet die ASV mit einem Mehr-Schicht-Datenzugriffs-Modell:

Schicht Bezeichnung Zugriff möglich für Anwendung
Schicht 0 Datenbank-Ebene nur ASV-Kernteam
und NUR im Supportfall auf Zuspielung einer schulscharfen Sicherung durch die Schule
nicht möglich (u.A. wegen Datenschutz)
Schicht 1 Java-Ebene nur ASV-Kernteam, Anwendungsentwicklung nicht möglich
Schicht 2 Java-Ebene nur ASV-Kernteam, Berichte-Ersteller Jasper-Reports
Schicht 3 Business-Objekt-Ebene Erfahrene Benutzer (z.B. Zugriff auf item.schuelerStamm.geschlecht()) Textfeld mit OnLoad-Event (Syntax: Groovy)
im Serienbrief-, Listen-, Etiketten-Generator und im Exportformat
Schicht 4 Virtuelle Felder jeder Benutzer Virtuelle Felder (= Datenfeld)
im Serienbrief-, Listen-, Etiketten-Generator und im Exportformat
Schicht 5 ASV-Anwendung jeder Benutzer (= das, was man in der Oberfläche sieht) Anwendung der ASV (= das, was man in den Modulen sieht)
  • mit Groovy greifen Sie auf Schicht 3 zu
  • normale Berichte, Listen, usw., die den Assistenten für Datenfelder nutzen, sind Schicht 3
  • zentral bereitgestellte, komplexe Berichte, greifen auf Schicht 1 und 2 zu

Vorgehensweise: Programmierung mit Groovy

Weitere Beispiele für Skripting (Serienbriefe, Listengenerator)

  • Schüler Straße und Hausnummer ausgeben:
    def st = obj?.schuelerStamm;
    return st.schStrasse + " " + st.schHausnummer + "\n";
  • Betrieb Straße und Hausnummer ausgeben:
    def stb = obj?.schuelerStamm?.ausbildungBetrieb;
    String strReturn = "";
    if (stb != null) {
    	if (stb?.betriebName1 != null) {
    		strReturn = stb?.anschrStrasse + " " + stb?.anschriftHausnr + "\n";
    	} 
    }
  • Aktuelles Datum ausgeben:
    return new Date().format("dd.MM.yyyy")
  • Aktuelles Datum + 10 Tage ausgeben:
    datum = new Date()
    datum = datum + 10
    return datum.format("dd.MM.yyyy")
  • Schüler > Ein-Austritt > Höchster allgemeinbildender Schulabschluss
obj?.schuelerStamm.vorbildungSchulischM?.kurzform
  • Schüler > Schuljahr XX/YY > Ausbildung > Beschäftigungsart
    obj?.schuelerStamm.getWlStellungImBeruf().getAnzeigeform()
    obj?.schuelerStamm.getWlStellungImBeruf().getKurzform()
  • Schüler > Schuljahr XX/YY > Ausbildung > Maßnahmenträger
    obj?.schuelerStamm.wlKostentraeger.anzeigeform
    obj?.schuelerStamm.wlKostentraeger.kurzform
  • Schüler > Schuljahr XX/YY > Gastschulverhältnis
    obj?.schuelerSchuljahr.wlGastschuelerart?.anzeigeform
    obj?.schuelerSchuljahr.wlGastschuelerart?.kurzform
  • Schüler > Schuljahr XX/YY > Förderungsnummer
    obj?.schuelerStamm.foerderungsnummer
  • Ersetzung je nach Geschlecht: „Der Schüler“ bzw. „Die Schülerin“:
    return (obj.schuelerStamm.m_w.kurzform == "M") ? "Der Schüler" : "Die Schülerin"
  • Geburtsdatum des Schülers:
    return obj?.schuelerStamm?.geburtsdatum.format("dd.MM.yyyy")
  • Aktuelles Schuljahr:
    return obj.schuljahr.kurzform
  • Erster Tag des Schuljahres:
    Anmerkung: Da das Datum für den letzten (Schul-)Tag des Schuljahres in der Datenbank nicht hinterlegt ist, kann für diesen Fall kein Code erstellt werden.
    def Date ersterST = new Date()
    ersterST = obj.schuljahr.ersterSchultag
    return ersterST.format('dd.MM.yyyy')
  • Vorname und Name des Klassenleiters/der Klassenleiterin:
    return obj.klassengruppe.klasse.klassenleitungName
  • Vollständige Schüleradresse mit Umbrüchen ausgeben:
    def st = obj?.schuelerStamm;
    String strReturn = "";
    strReturn += st.familienname + "\n"
    strReturn += st.rufname + "\n"
    strReturn += st.schStrasse + " " + st.schHausnummer + "\n";
    strReturn += st.schAnschrPLZ + " " + st.schAnschrOrt + "\n";
    if (st.schStaat != null) {
    	if (st.schStaat.anzeigeform.equals("Deutschland") == true) {
    		strReturn += "\n";
    	} else {
    		strReturn += st.schStaat.anzeigeform + "\n";
    	}	
    }
    return strReturn;
  • Vollständige Betriebeadresse mit Umbrüchen ausgeben:
    String strBetriebName1 = "";
    String strBetriebeAdresse = "";
    def stb = obj?.schuelerStamm?.ausbildungBetrieb;
    if (stb != null) {
    	if (stb?.betriebName1 != null) {
    		strBetriebName1 = stb?.betriebName1;
    
    		strBetriebeAdresse = stb?.betriebName1 + "\n"
    		if (stb?.betriebName2 != null) {
    			if (stb?.betriebName2.length() > 1) {
    				strBetriebeAdresse += stb?.betriebName2 + "\n"
    			}
    		}
    		if (stb?.ansprVORNAMEN.get(0) != null) {
    			strBetriebeAdresse += "zu Hd."
    			if (stb?.ansprAkad.get(0) != null) {
    				strBetriebeAdresse += " " + stb?.ansprAkad.get(0);
    			}
    			strBetriebeAdresse += " " + stb?.ansprVORNAMEN.get(0) + " " + stb?.ansprName.get(0) + "\n";
    		}
    		strBetriebeAdresse += stb?.anschrStrasse + " " + stb?.anschriftHausnr + "\n";
    		strBetriebeAdresse += stb?.anschriftPLZ + " " + stb?.anschriftOrt + "\n";
    		if (stb?.anschriftStaat != null) {
    			if (stb?.anschriftStaat?.anzeigeform.equals("Deutschland") == false) {
    				strBetriebeAdresse += + stb?.anschriftStaat?.anzeigeform + "\n";
    			}	
    		}
    	}
    }
    return strBetriebeAdresse;