Inhaltsverzeichnis

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!

1) Ü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

2) Vorgehensweise: Programmierung mit Groovy

3) Datenzugriff auf spezielle Felder (Serienbriefe, Listengenerator)

Abhängig vom Bericht kann es sein, dass Sie
obj?.schuelerSchuljahr. durch obj?
ersetzen müssen, weil Sie sich möglicherweise schon im Datenbereich SchülerSchuljahr befinden.

ASV kann diese Code-Stücke für alle Ausgabe-Arten verarbeiten. Abhängig von der Ausgabe-Art müssen Sie aber beachten:

  • Serienbrief
    item.value = Variable_zur_Ausgabe
  • Liste, Office-Schablone, Exportformat:
    return Variable_zur_Ausgabe

4) Datenzugriff auf spezielle Felder (Exportformate)

Einfügen in Spalte „Skript“:

final SchuelerSchuljahr ssj = obj;
List<SchuelerKommunikation> skListe = ssj.getSchuelerStamm().getKommunikationen();
String ausgabe = "";       
for (SchuelerKommunikation k : skListe)
{
   if(k.getKommunikation().getWlKommunikationstyp().getSchluessel().equals("10"))
   ausgabe = k.getKommunikation().getKommunikationsadresse();
}
return (ausgabe);

5) Ersetzen, Umformatieren, Arbeiten mit Datumswerten (Serienbriefe, Listengenerator)

Eine Gute Informationsquelle über Groovy ist auch eine Online-Dokumentation.

6) Aufrufe im Globalen Scripting (Serienbriefe, Etiketten)

Serienbriefe oder Etiketten benötigen, um auf alle Felder der ASV zugreifen zu können, einige Imports im Global Scripting. Diese finden Sie im Serienbrief-Generator > Modulbezogene Funktionen > Globales Scripting.

import javax.swing.*; 
import de.isb.svp.client.ze.scripting.objects.*; 

import de.isb.svp.domain.pojo.SchuleStamm;
import de.isb.svp.domain.pojo.SchuleSchuljahr;
import de.isb.svp.domain.pojo.WlSchuljahr;
import de.isb.svp.domain.pojo.LehrerStamm;
import de.isb.svp.domain.pojo.Benutzer;
import de.isb.svp.domain.pojo.Anschrift;
import de.isb.svp.domain.pojo.Aussenstelle;
import de.isb.svp.domain.BenutzerDAO;
import de.isb.svp.domain.Schulart;
import de.isb.svp.auth.AuthUtils;
import de.isb.base.business.Locator;
import de.isb.base.utils.Strings;
import bayern.asv.api.tools.SchulnameFormatter;
import bayern.asv.reports.api.st.schulwechsel.SchulwechselHelper;
import bayern.asv.reports.api.tools.unterzeichner.UnterzeichnerDatenHelper;
import java.util.*;
import java.lang.*
import java.text.*
import javax.swing.*