SnTT: Konfigurationsdokumente - schnell und zuverlässig

von Thomas Bahn,
assono GmbH, Standort Kiel,

Um die Konfiguration einer Notes-Anwendung zu speichern, gibt es zwei offensichtliche Möglichkeiten und eine dritte, nicht ganz so offensichtliche, die die Vorteile der anderen beiden Alternativen in sich vereint, in zwei Varianten:

Erste Alternative: Profil-Dokumente
Für diese Methode erstellt man ein oder mehrere Masken, aber keine Ansichten. Die Konfigurationsdokumente erstellt man dann nicht mit @Compose, sondern mittels @EditProfileDocument. Für den Zugriff auf die gespeicherten Werte benutzt man dann @GetProfileField oder NotesDatabase.GetProfileDocument. Der Hauptvorteil ist Geschwindigkeit: Man kann sehr effizient auf Profil-Dokumente zugreifen und sie werden im Speicher des Notes-Clients gecacht. Das ist aber auch schon gleich ein Nachteil: Wenn ein Profil-Dokument durch einen anderen Benutzer geändert wird, erhält man solange noch die alten Werte, bis man die Notes-Anwendung geschlossen und wieder neu geöffnet hat. Ein anderer Nachteil ist die Zuverlässigkeit: Es passiert hin und wieder mal (nur in alten Notes-Versionen?), dass das Profil-Dokument plötzlich komplett leer ist. Das kann zum Beispiel passieren, wenn es Repliken gibt, in denen das Profil-Dokument - aus welchen Gründen auch immer - nicht existiert. Beim (lesenden !) Zugriff darauf wird dann ein neues erstellt. Und da es neuer ist, wird es bei der nächsten Replikation auch auf andere Repliken verteilt.

Zweite Alternative: normale Dokumente und Ansicht
Hier erstellt man eine oder mehrere Masken und mindestens eine Ansicht. Die Konfigurationsdokumente werden mittels @Compose oder über Ansicht - Erstellen erzeugt. Um auf die gespeicherten Werte zuzugreifen, benutzt man @DbColumn und @DbLookup bzw, NotesView.GetDocumentByKey und NotesView.GetAllDocumentsByKey. Vorteile: Die Dokumente sind "sichtbarer", Änderungen wirken sich sofort aus (außer bei Verwendung von [Cache] bei den @-Formeln) und die Lösung ist zuverlässiger. Diese Vorteile erkauft man sich aber mit einer deutlich schlechteren Performance, da das Suchen des Konfigurationsdokuments in der Ansicht wesentlich länger dauert.

Dritte Alternative: Kombination
Hier versucht man die Vorteile beider Methoden zu kombinieren. Dazu gibt es zwei verschiedene Ansätze:

Variante 1: Doppelte Datenspeicherung
Wie bei der zweiten Alternative erstellt man Masken und Ansichten und erstellt normale Dokumente, um die Konfiguration zuverlässig zu speichern. Aber zusätzlich erstellt man beim Speichern eines Konfigurationsdokuments (z. B. im PostSave-Ereignis) ein Profil-Dokument bzw. aktualisiert es. Zum Zugriff auf die Daten benutzt man dann das Profil-Dokument, also @GetProfileField und NotesDatabase.GetProfileDocument. Wenn das Profil-Dokument mal verloren geht, muss man nur das normale Dokument noch einmal speichern, und das Profil-Dokument wird automatisch wieder mit den richtigen Werten neu erstellt. Es bleibt allerdings der Nachteil durch das Cache des Profil-Dokuments.

Variante 2: "Zeiger" auf normales Dokument cachen
Auch hier gibt es wieder Masken, Ansichten und normale Dokumente für die zuverlässige Speicherung der Konfiguration. Im Unterschied zur vorigen Variante speichert man jetzt beim Speichern eines Konfigurationsdokuments aber nicht das ganze Dokument noch einmal als Profil-Dokument, sondern lediglich die UNID (@DocumentUniqueID bzw, NotesDocument.UniversalID) in einem Profil-Dokument. Um auf gespeicherte Werte zuzugreifen, holt man sich mit @GetProfileField oder NotesDatabase.GetProfileDocument erst einmal die UNID des richtigen Dokuments und dann mit @GetDocField bzw. NotesDatabase.GetDocumentByUNID den Wert bzw. das Konfigurationsdokument selbst.

Diese Variante ist fast so schnell wie die erste Alternative, da kein Suchen in einer Ansicht notwendig ist, aber die Werte werden sicher und zuverlässig in normalen Dokumenten gespeichert. Außerdem wirken sich Änderungen an Konfigurationsdokumenten sofort aus, da nur deren UNID, nicht aber die Werte selbst gecacht werden.

Geht das Profil-Dokument mit der UNID einmal verloren, kann man im Code, der versucht darauf zuzugreifen, ein Fallback einbauen: das normale Dokument in der Ansicht suchen und natürlich seine UNID wieder ins Profil-Dokument eintragen (für das nächste Mal). Das kann dann sogar vollautomatisch passieren und erfordert nicht wie bei der ersten Variante einen manuellen Eingriff eines entsprechend berechtigten Benutzers.

Fachbeitrag IBM Notes IBM Notes Traveler Tipp Entwicklung

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie wollen eine individuelle Lösung? Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen? Wir sind für Sie da.

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Sie können uns auf verschiedene Weisen für eine unverbindliche Erstberatung erreichen:

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de