Als ich vor kurzem eine neue Anwendung
bei einem Kunden installiert hatte, konnte ich beim Öffnen der installierten
Datenbank einen nicht alltäglichen Fehler beobachten:
Ein Blick ins Fehlerprotokoll brachte
die folgende Zeile als Ursache des Fehlers zum Vorschein:
workspace.EditDocument(false, doc, true)
Anwendungen auf Basis des assono
Framework erlauben dem Verwalter
der Datenbank, durchgeführte Änderungen und Erweiterungen mit Hilfe eines
Dokuments "Letzten Nachrichten" zu hinterlegen. Beim Öffnen der
Datenbank wird dann jeder Benutzer einmalig (nach jeder Änderung des Dokuments)
über die Neuerungen informiert. Hierbei wird mit workspace.EditDocument
das Dokument im Notes-Client geöffnet und angezeigt.
Es handelte sich hier um eine Notes-Datenbank,
die mit dem Domino Designer 6.5 entwickelt wurde. Hierbei gab es bisher
keinerlei Probleme, da diese Funktion bereits bei mehreren Kunden eingesetzt
wird. Insofern stutzte ich ein wenig darüber, wie es zu diesem Fehler denn
kommen konnte. Der Kunde hat Lotus Notes 8.5 Standard-Clients im Einsatz.
Und in der Tat, ein kurzer Test mit einem 7er Notes-Client brachte
die Erkenntnis, dass das Problem nur von dem 8.5er Standard-Client verursacht
werden konnte.
Das Problem tritt in der folgenden Konstellation
auf: Wenn beim Öffnen einer Datenbank in einer Rahmengruppe eine weitere
Rahmengruppe mit einer dort hinterlegten Ansicht geöffnet wird und gleichzeitig
im Datenbank-Script im Event PostOpen
versucht wird, ein Dokument mit workspace.EditDocument
zu öffnen, dann kommt der 8.5er Client ins Straucheln. Offenbar ein Problem
der konkurrierenden Tabs, in der das Dokument und der Rahmen mit der Ansicht
geöffnet wird. Die Suche nach einer Lösung im Web und der Lotus Knowledge
Base brachte keinen Erfolg. Mein Ansatz war, nach dem Öffnen der Ansicht,
verzögert das Dokument zu öffnen. Also bediente ich mich der Klasse NotesTimer.
Hiermit war es mir möglich, das Öffnen der Startansicht in der Rahmengruppe
und des Dokumentes voneinander zu entkoppeln. Und siehe da, es funktionierte
tatsächlich.
Zum Ausprobieren habe ich eine kleine
Testdatenbank erstellt (siehe unten), mit der der Fehler im Notes 8.5er
Standard-Client reproduziert werden kann. Aus Gründen der Übersicht habe
auf das Error-Handling und eine schöne Optik in dem Beispiel verzichtet.
Im Fokus stand nur das Problem und die Lösung.
Hinweise zur Beispiel-Datenbank:
Die Datenbank öffnet im Lotus Notes
8.5 Standard-Client mit der oben gezeigten Fehlermeldung. Für die Lösung
mit dem NotesTimer ist
im Datenbank-Script die Funktion openLatestNews
und die Script-Bibliothek OpenLatestNews
auszukommentieren und unter Options
die Script-Bibliothek OpenLatestNewsWithTimer
einzubinden.
Im Datenbank-Script wurde bisher im
Event Postopen
aus der Script-Bibliothek OpenLatestNews
die Funktion openLatestNews
aufgerufen. Diese öffnete das Dokument mit den letzten Nachrichten. Durch
die Ergänzung mit dem Timer wird jetzt nur im Datenbank-Script die Script-Bibliothek
OpenLatestNewsWithTimer
eingebunden. Durch Öffnen der Datenbank wird im Initalize
der Bibliothek der Timer mit einer Laufzeit von 1 Sekunde initialisiert.
Nach Ablauf dieser Zeit wird dann die Funktion openLatestNews
wie gewohnt aufgerufen. Hierbei darf (auch im Fehlerfall) nicht vergessen
werden, den Timer wieder zu deaktivieren.
latest-news-error.zip