Dynamische Masken

15.08.2006 von Elmar Fuchs
Eine Stärke der Entwicklung von Masken im Domino Designer ist das situationsabhängige Verbergen von ausgewählten Elementen. Die Verwendung von variablen Feldbezeichnern ist eine Alternative, wenn man eine zu hohe Zahl von Verbergen-Wenn-Regeln in einer Maske vermeiden will.

Der Domino Designer bietet eine Vielzahl von leistungsfähigen und mächtigen Funktionen zur Entwicklung von Masken. Eine häufig verwendete Möglichkeit ist das Verbergen von Maskenelementen in Abhängigkeit der aktuellen Konstellation bei der Erfassung, Bearbeitung und Anzeige von Daten. Über die Eigenschaft Verbergen- Wenn können Sie für Texte, Felder, Tabellenzellen und weitere Gestaltungselemente deren Sichtbarkeit steuern. Diese Funktionalität steht seit mehreren Versionen von Notes Domino zur Verfügung und funktioniert sehr gut.

Sind in einer Maske jedoch sehr viele Verbergen- Wenn-Regeln definiert, kann es bei der Erstellung der Maske zu Problemen kommen. Zum einen ist eine sehr gründliche Arbeitsweise erforderlich, um versehentliche Fehler bei der Definition der Verbergen-Wenn-Regeln zu vermeiden. Zur Kontrolle der korrekten Funktionsfähigkeit sind umfangreiche Tests für die einzelnen Situationen erforderlich. Zum anderen kann es im Einzelfall auch passieren, dass der Designer nicht alle Regeln sofort beim Speichern erfasst. Unter Umständen ist eine schrittweise Erstellung und Speicherung notwendig. Nachteilig ist ebenfalls, dass in jedem Dokument alle Felder gespeichert werden, obwohl unter Umständen viele gar keinen Wert enthalten.

Beispiel Kontaktmaske

Ein typisches Beispiel für diese Situation ist eine Kontaktmaske. Darin wird in der Regel die Erfassung von sehr vielen unterschiedlichen Kontaktmöglichkeiten angeboten: mehrere Telefon- und Faxnummern (Büro, Privat, Mobil), verschiedene E-Mail-Adressen und Adressen von Websites (Büro und Privat).

Bei der Erfassung der einzelnen Kontakte wird jedoch nur ein Bruchteil davon genutzt. Um die Übersichtlichkeit nicht durch zu viele leere Felder zu stören, werden in solchen Masken häufig die vom Anwender im aktuellen Dokument nicht benötigten Felder vorborgen. Dafür ist die Erstellung einer Vielzahl von Verbergen-Wenn-Regeln notwendig.

Eine Alternative dazu können in solchen Fällen variable Feldbezeichner sein. Die Anzahl der zu speichernden Felder ist dabei fest vorgegeben. Der Anwender kann jedoch bestimmen, welche Informationen abgelegt werden. In der Kontaktmaske des persönlichen Adressbuchs ist diese Möglichkeit umgesetzt. Neben einigen festen Feldern können hier die zu speichernden Feldnamenbestimmt werden.

Der folgende Artikel stellt die beiden Ansätze gegenüber. Die dabei verwendeten Masken basieren auf dem genannten Beispiel der Adressdatenbank. Die im Artikel beschriebene Beispieldatenbank steht auf der Website des Autors zum kostenlosen Download zur Verfügung.

Realisierung über Verbergen-Wenn

Bei der Verwendung der Verbergen-Wenn-Regeln erstellen Sie in einer Maske wie gewohnt alle Felder. Zur besseren Übersichtlichkeit bietet sich die Verwendung einer Tabelle an. Um dem Anwender das Verbergen einzelner Felder zu ermöglichen, empfiehlt sich folgende Vorgehensweise: Für die Verbergen-Wenn-Regel wird für jedes anzuzeigende Feld am oberen Rand der Maske ein weiteres verborgenes Feld erstellt (Bild 1), dessen Wert bestimmt, ob ein Feld angezeigt wird oder nicht. So steuert ZeigenTel2 die Sichtbarkeit des Feldes Telefon2. Für beim Erstellen eines neuen Dokuments anzuzeigende Felder wird dem zugehörigen "Zeigen"-Feld die Zeichenkette "1" zugewiesen. Die anderen "Zeigen"-Felder bleiben leer. In den einzelnen Tabellenzellen wird in der Formel der Verbergen-Wenn-Regel das "Zeigen"-Feld verwendet, beispielsweise ZeigenTel2!="1". Achten Sie darauf, dass im Gegensatz zu einer normalen Textzeile in einer Tabelle die Verbergen-Wenn-Regel immer nur für die aktuelle Zelle wirkt. Sie müssen die Eigenschaft also sowohl für die Zelle mit dem Feldbezeichner als auch für die Zelle mit dem eigentlichen Feld einrichten.

Bild 1: Die erforderlichen verborgenen Felder für die Erstellung dynamischer Masken

Eine Schaltfläche ermöglicht das Öffnen einer zweiten Maske, in welcher der Anwender die anzuzeigenden Felder auswählen kann. Nach Abschluss der Auswahl wird die Hauptmaske aktualisiert.

@DialogBox("(KontaktAuswahl)"; [AutoVertFit]:[Auto- HorzFit]:[NoNewFields] : [SizeToTable];"Kontaktinformationen"); @Command([ViewRefreshFields])

Feldauswahlmaske

Die Feldauswahlmaske enthält für jedes Feld ein Kontrollfeld, dessen Name mit dem "Zeigen"- Feld der Hauptmaske übereinstimmt. Im Bereich Auswahl des Registers Steuerung der Feldeigenschaften wählen Sie den Eintrag Auswahl eingeben (eine pro Zeile). Definieren Sie lediglich einen Wert mit dem anzuzeigenden Text und dem Alias 1, zum Beispiel Telefon 2 | 1 (Bild 2).

Bild 2: Die Feldauswahlmaske.
Bild 3: Die Anzeige in der Anwendung.

Sind in der Anwendung nun neben dem immer verwendeten Feld Telefon die Felder Büro Fax, Büro E-Mail und Büro URL aktiviert, kann der Anwender nach einem Klick auf die Schaltfläche diese Auswahl verändern. Dabei ist es möglich, die anzuzeigenden Felder sowohl anzuzeigen als auch hinzuzufügen oder zu entfernen (Bild 3).

Nutzen variabler Feldbezeichner

Bei der Umsetzung der Aufgabe mittels variabler Feldbezeichner ist die Maske zur Erfassung der Kontaktdaten übersichtlicher (Bild 4). Auch in dieser Maske werden verborgene Felder verwendet. Als Erstes wird das gemeinsame Feld Kontaktart benötigt. Dieses Textfeld kann Mehrfachwerte aufnehmen und enthält eine Liste der möglichen Feldbezeichner, beispielsweise Telefon 2, Telefon 3, Büro Fax und Privat Fax. In Abhängigkeit von der Anzahl der möglichen Felder gibt es weiterhin für jeden anzuzeigenden Feldbezeichner ein Feld mit einem Vorgabewert. Im Beispiel sind dies die Felder Kontaktart2 (Vorgabewert "Büro Fax"), Kontaktart3 ("Büro E-Mail") und Kontaktart4 ("Büro URL"). Die Anzeige der Feldbezeichner erfolgt in der Maske durch die Felder AnsichtKontaktart2, AnsichtKontaktart3 und AnsichtKontaktart4. Diese drei Felder sind vom Typ Berechnet zur Anzeige. Als Berechnungsformel werden entsprechend die Felder Kontaktart2, Kontaktart3 und Kontaktart4 verwendet.

Bild 4: Die übersichtlichere Variante der Maske.
Bild 5: Die Festlegungen zur Feldauswahl.

Die Auswahl der zu verwendenden Feldbezeichner nimmt der Anwender über die Schaltfläche Kontaktarten anpassen vor. Der Formelcode entspricht dem bereits weiter oben gezeigten. Abweichend ist lediglich die Bezeichnung der verwendeten Hilfsmaske.

In der Hilfsmaske ist wiederum das gemeinsame Feld Kontaktart enthalten. Die Felder zur Aufnahme der Feldbezeichner sind vom Typ Kombinationsfeld. Die Feldnamen entsprechen den verborgenen Feldern der Hauptmaske. Für die Auswahl des Wertes nutzen sie im Bereich Auswahl des Registers Steuerung unter dem Eintrag Formel für Auswahl verwenden das gemeinsame Feld Kontaktart (Bild 5).

Aktualisierung der Hauptmaske

Nach dem Schließen der Auswahlmaske wird die Hauptmaske aktualisiert. Dafür sorgt der im Formelcode der Schaltfläche enthaltene Befehl Command([ViewRefreshFields]).

Aus Anwendersicht stehen nach dem Erstellen eines neuen Dokuments wiederum zuerst die vorgegebenen Felder zur Verfügung. Betätigt er die Schaltfläche Kontaktarten anpassen, kann er die zu verwendenden Bezeichner nach seinen Vorstellungen auswählen (Bild 6). Ein Hinzufügen weiterer oder das Entfernen von Feldern ist jedoch nicht möglich. Die Anzahl ist festgeschrieben.

Bild 6: Die Anzeige der dynamischen Maske aus Anwendersicht.

Nach erfolgter Auswahl und dem Erfassen und Speichern des eigentlichen Kontaktdokuments werden die Namen der verwendeten Feldbezeichner in den Feldern Kontaktart2, Kontaktart3 und Kontaktart4 und die zugehörigen Werte in den Feldern Kontakt2, Kontakt3 und Kontakt4 gespeichert. Aus der Verwendung dieser allgemeinen Feldnamen ergibt es sich, dass immer das Feld KontaktArt2 mit betrachtet werden muss, um den Inhalt des Feldes Kontakt2 interpretieren zu können. Das Feld KontaktArt2 enthält die Bezeichnung des Wertes von Kontaktart2. Im Unterschied dazu beschreibt bei der Verwendung der Verbergen-Wenn-Regel wie gewohnt der Feldname (zum Beispiel BueroEMail) den Feldinhalt.

Vergleich der Lösungen

Die Realisierung über Verbergen-Wenn-Regeln bietet den Vorteil, dass jede Information ein eindeutig zugeordnetes Feld besitzt. Bei der Verarbeitung der Felder fällt kein Analyseaufwand an, um herauszufinden, was in den einzelnen Feldern steht. Des Weiteren ist die Anzahl der tatsächlich genutzten Felder variabel. Die Menge der zu speichernden Informationen wird vom Anwender bestimmt.

Nachteilig bei dieser Lösung ist die bereits erwähnte Fehleranfälligkeit. Daneben benötigen die gespeicherten Dokumente mehr Platz, da immer alle Felder – auch die leeren – gespeichert werden. Außerdem kann die Geschwindigkeit bei sehr großen Masken Probleme bereiten.

Bei der Umsetzung des Lösungsansatzes mittels variabler Feldbezeichner sind die Vorund Nachteile genau umgekehrt. Vorteilhaft sind die kleinere und schnellere Maske sowie das Vermeiden der vielen Verbergen-Wenn-Regeln. Die Dokumente sind kleiner, da immer nur eine bestimmte Anzahl von Feldern gespeichert wird. Von Nachteil ist, dass die verwendeten Feldbezeichner selbst in Feldern stehen. Diese müssen immer zuerst programmtechnisch analysiert werden, um herauszufinden, welche Information im zugeordneten Feld mit dem eigentlichen Wert steht. Des Weiteren ist die Anzahl der Felder vom Entwickler fest vorgegeben. Der Anwender kann pro Dokument immer nur eine beschränkte Auswahl der Felder verwenden.