In der Programmier-Umgebung von Lotus Notes, “Designer” genannt, kann man Daten-Eingabemasken, sogenannte “Formulare”, erstellen. Ausserdem kann man im Designer Teil-Formulare erstellen. Ein Formular kann beliebig viele Teil-Formulare enthalten.
Teil-Formulare clever nutzen
Die Möglichkeit, Teil-Formulare zu erstellen und einzubinden, hat zwei Vorteile. Einen offensichtlichen und einen weniger offensichtlichen.
Der offensichtliche Vorteil ist die Möglichkeit, wiederkehrende Abschnitte zu kapseln. Wenn ich erkenne, dass ein gewisser Bereich in mehreren Formularen vorkommt, dann verschiebe ich diesen Bereich in ein Teil-Formular und entferne ihn aus den entsprechenden Formularen. An der Leerstelle setze ich jeweils das Teil-Formular ein. Das spart Schreibarbeit und folgt dem guten Muster “Don’t Repeat Yourself”. Wenn ich das Teil-Formular ändere, dann wirkt sich das auf alle Formulare aus, die das Teil-Formular verwenden.
Weniger offensichtlich ist dies: Ein Teil-Formular kann als Interface dienen. Seine Feldwerte werden dazu durch einen Event-Handler im Formular gesetzt, beispielsweise durch das Exiting-Event eines zugehörenden Feldes oder das QuerySave-Event des Formulars. Dadurch, dass ein Formular ein Teil-Formular einbindet, codifiziert das Formular, dass es das Interface des Teil-Formluars implementiert – um java-ähnlich zu sprechen.
Teil-Formulare auflisten
Die Notes-Pogrammierung, die ich von meinen Vorgängern geerbt habe, ist voll von Teilmasken und schlecht dokumentiert. Wie erkenne ich, welche Teil-Formulare in einem Formular eingebunden sind? Anders formuliert: Wie erkenne ich, welche Interfaces ein Formluar implementiert? Mit den Bordmitteln des Designer kommt man leider nicht weiter. Das Notes-eigene XML und eine Transformation beenden die Not.
Zum Glück hat jedes (Teil-)Formular eine XML-Repräsentation in einem Dialekt namens dxl. Und der Designer kann eine XML-Transformation auf auswählbare Elemente anwenden. Fehlt nur die passende Transformation. Hier ist sie:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:dxl="http://www.lotus.com/dxl"> <xsl:output method="text" indent="yes"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="dxl:*"> <xsl:apply-templates select="dxl:*"/> </xsl:template> <xsl:template match="dxl:subformref"> <xsl:value-of select="@name"/> </xsl:template> </xsl:stylesheet> |
Grafische Tools, wie der Designer eins ist, beschleunigen die Schaffung der Benutzeroberfläche enorm. Aber der gute alte Quelltext wird weiterhin seine Daseinberechtigung haben. Beruhigend.