FormServer

Es ist ein Programm, mit dem der eigentlicher Endbenutzer der Datenbank zu tun hat. Dieses Programm kann die Formularbeschreibungen, die von Formular-Editor stammen, richtig auswerten und die Formulare darstellen. Dieses Programm muss die Manipulationen auf den Formularen richtig in in die SQL Anweisungen umsetzten und an die Datenbank quittieren. Dabei werden folgende Funktionen unterstützt:

Durch die Formular-Links ist auch eine Navigation durch Dateninhalte entlang der Verknüpfungspfaden möglich. Der Benutzer kann ähnlich wie in Hypertext-Dokumenten navigieren und jede Information auf verschiedenen Wegen erreichen. Vor allem ist die Frage, was ist mit dem Objekt überhaupt verknüpft ist, schnell ohne der Kenntnis des Schemas beantwortet.

Die Formulare selbst unterstützen direkt höhere Abstraktionskonzepte wie Assoziation, Aggregation und Spezialisierung. Die Kenntnisse über die Konzepte der relationalen Modellierung wie Fremdschlüssel und Primärschlüssel müssen nicht vorhanden sein. Der Benutzer kann die verständliche und allgemeinere Konzepte wie Aggregation und Assoziation wahrnehmen, ohne auf die besondere Techniken der relationalen Modell eingehen zu müssen.

Navigieren mit Formularen

Die Benutzung der Formulare zum Navigieren durch eine Daten-Bank war die Idee, die mich zur Entwicklung des System verleitet hat. Mit dem s.g Formular-Links (Verweisen) kann man in einer Datenbank wie in Hypertextdokumenten navigieren. Die Idee der Hyperlinks sollte inzwischen jedem Benutzter bekannt sein. Die Links entstehen entlang der Assoziation-Pfaden.

Abbildung 6. Assoziation der Kardinalität 3 mit einem Attribut

Die Abbildung 6 zeigt eine Assoziation zwischen Drei Objekten (Student, Vorlesung, Professor). Die entspreche Tabellen-Struktur ist wie folgt:
Professor     {PersNr,Rang,Raum}
Student       {MatrNr,Name,Semester}
Vorlesung     {VorlesungNr,Titel,SWS,PersNr}
pruefen       {MatrNr},VorlesungNr,PersNr,Note}
Diese Assoziation (Beziehung, Relationship) entsteht durch das Faktum, dass die drei Objekte durch eine Prüfung zueinander assoziiert werden. Die Grundidee war, dass man aus dem Student-Formular einfach nachschauen kann (durch ein Klick) bei welchen Prüfungen der Student teilnimmt. Zusätzlich kann man durch die Formular-Links die Datenbank erforschen, ohne die genaue Datenstruktur zu kennen. Man sieht unmittelbar, dass ein Student an Assoziation Prüfung teilnimmt.

Die Assoziationen haben aber eine komplexere Semantik als Hypertext-Links. Die Assoziation ist immer transitiv (zweiseitig). Die Hyper-Links haben nur einen einseitigen Verweis-Charakter. Die Assoziationen können zwischen mehren Objekten bestehen. Man sagt, die Granuliät der Assoziation kann größer als 2 sein. Ein Hyper-Link verbindet nur 2 Dokumente. Die Kardinalität der Assoziation kann mehr als 1 betragen. Ein Student nimmt an mehreren Prüfungen teil.

Abbildung 7. Navigieren mit Formular-Links

Die Abbildung 7 zeigt wie ein Link (Prüfen) aus Formular Student ausgeführt werden kann. Es gibt mehrere Typen von Formular-Link, die auch den Assoziation-Typen in ER-Modell entsprechen.

1:N

Die Beziehung wird durch eine veränderbare Referenz dargestellt und deckt sich mit Fremdschlüssel-Attributen der Tabelle. Mit einem Doppelt-Klick kann das Formular des Objekts geöffnet werden, auf das die Referenz Verweis.

N:1

Die Beziehung wird als eine einfache Schaltfläche dargestellt. Es ist die andere Seite der 1:N Beziehung. Die Fragestellung lautet: Suche die Objekte die auf das Objekt zeigen.

N:N oder N:M:O:...

Die Beziehung wird durch einen Menü-Button dargestellt. Der erste Menüpunkt zeigt immer auf die N:1 Beziehung auf die Referenz-Tabellen (Tabellen, die N:M modellieren, und meistens nur Fremdschlüssel haben). Die nächsten Menüpunkte, zeigen die eigentliche Objekte der N:M:.. Beziehungen. Die Fragestellung: Suche die Objekte die durch die Referenz-Tabelle mit dem Objekt in der Beziehung stehen.

Die Formulare bleiben nach dem Öffnen durch die Links verbunden und passen sich automatisch dem ersten Formular an. Es entsteht eine Link-Kette durch die geöffnete Formulare. Problematisch ist es, dass auch eine Schnittstelle zur Veränderung der Assoziationen angeboten werden muss. Um Missverständnisse zu Vermeiden, werden bei N:M Formular-Links die Funktionen Objekt-Einlegen oder Löschen abgeschaltet. Um Assoziationen zwischen Objekten anzulegen oder zu löschen, muss an der Referenzen (1:N) gearbeitet werden. In diesem Fall, um einen Student eine weitere Prüfung zuzuweisen, muss ein neuer Datensatz in Formular Prüfung angelegt werden.

Das Konzept der Formular-Links kann auf dem ersten Moment sehr kompliziert erscheinen, ist allerdings intuitiv sehr schnell erlernbar und kann sogar durch die Möglichkeit von Links-Ketten sehr schnell zu Lösung von komplexen Fragen angewendet werden. Z.b. es kann schnell herausgefunden werden, mit welchen anderen Studenten ein Student einer Vorlesung zuhört. Die Fragestellungen. Wie heißen die Assistenten von Professoren, bei denen ein Student ein Prüfung ablegt, sind durch zwei Formular-Links zu lösen. Eine Frage, die bereits einer relativ komplexen SQL-Abfrage benötigt hätte.

Eigene Makros in Formularen

FormularServer besitzt eine Schnittstelle, die es erlaubt, die Funktionalitäten der Formulare um eigene Prozeduren zu erweitern. Dazu können gehören:

Eigene Überprüfung der Integrität-Regel
Besondere Behandlung von Attributen, z.B Formatierung bei Datenspeicherung oder Daten-Visualisierung
Berechnung von abgeleiteten Attributen
Selbstdefinierte Aktionen

Der FormularServer ist vollständig im Tcl (mit Erweiterungen) programmiert, weil Tcl eine interprative Sprache ist, erlaubt es, das Verhalten von FormularServer dynamisch zu ändern. Das wird durch Laden von zusätzlichen Tcl-Prozeduren zur Laufzeit erreicht. Es wurde eine Schnittstelle programmiert, die es ermöglicht die Standard-Prozeduren von FormServer zu beeinflussen.

Die Makros (Selbstdefinierte Prozeduren) werden in XOTcl als eine abgeleitete Klasse von FormEngine geschrieben. Der Name der Klasse muss mit dem Namen des Formulars übereinstimmen. Die Makros gelten nur für dieses Formular. Sie werden von FormServer geladen und als ein Teil des Programm benutzt. Hier eine Unterlage die für die eigenen Makros benutzt werden kann. (für Formular myform)

 
Class myform -superclass FormEngine
myform instproc update_check klvalues_ref {
    return 1
}
myform instproc delete_check {} {
    return 1
}
myform instproc insert_check klvalues_ref {
    return 1
}
myform instproc after_delete {} {
}
myform instproc reload_form {} {
}
myform instproc position_check {pos} {
    return 1
}
FormEngine instproc filling_form klvalues_ref {
}
Die Methoden-Parametern klvalues_ref sind Referenzen auf TclX keyd list; mehr dazu in TclX Dokumentation. Durch _check Prozeduren kann man eine bestimmte Aktion verhindern (return 0).

Sehen sie das Beispiel accountancy das vollständig mit Makros implementiert ist.

Hier wurden Makros benutzt um folgende Eigenschaften zu garantieren

Sehen sie die Datei sample/accountancy.tcl für die Realisierung (z.B wie sql-Abfragen gebildet werden).

Programm-Parameter

Beim Start von FormServer kann einer Reihe von Programm-Parameter angegeben werden. Es spart die Klick-Arbeit wenn das Programm aus Skripten ausgeführt wurde.

Warnung

Bei der Starkit variante können keine Parameter spezifiziert werden.

FormServer -- [-help] [-debug] [-viewonly] [-ignorexmlpar | -noconnectdialog | -connect connectpar | -loadmacros macrofile | -openform formname | xmlfile]

-debug

Aktiviert Menüs für debugging: SQL-Monitor, XOtcl Klassen-Browser, Tk-Window Browser, Interaktiver Modus

-viewonly

Die Datenbankinhalten können nur angeschaut werden. Kein Löschen, Einfügen und Modifizieren von Tupeln

-ignorexmlpar

Die Parameter, die in XML-Datei kodiert werden (Datenbankanbindung, Makros), werden nicht beachtet (sinvoll mit -connect parameter)

-noconnectdialog

Es wird versucht eine Datenbankverbindung ohne Befragungs der Benutzer durchzuführen die Verbindungsparameter können entweder in XML oder durch -connect Parameter spezifiziert werden.

-loadmacros

Lädt automatisch ein Tcl-Skript. Sinnvoll um eigene Makros zu programmieren.

-connect

Angeben von Datenbank Verbindungs-Parameter. Wenn keine -ignorexmlpar angeschaltet wurde, werden die XML-codierte Parameter überschrieben. Die Parameter werden in Form einer TclX keyed list angegeben. Die Namen der Parameter hängen von benutzten DB-Schnittstelle z.B. für mysql wäre das.

-connect "{interface mysql} {user root} {dbank test} {password geheim} {socket /var/lib/mysql/mysql.sock}"

-openform

Das Programm versucht ein Formular nach dem Start sofort zu öffnen. Voraussetzung die Formulare wurden erfolgreich geladen und die Datenbankverbindung steht.

Warnung

Alle FormServer Parameter müssen durch -- von Tcl-Parametern getrennt werden.

Beispiel (alles in einer Zeile)
./FormServer.tcl -- -debug -viewonly
 -connect "{interface mysql} {dbank uni} 
           {user root} {socket /var/lib/mysql/mysql.sock}" 
 -noconnectdialog -openform Student uni.xmlforms