Zeitabhängige Ansichten ohne Aktualisierungssymbol

In manchen Notes/Domino Anwendungen müssen in Ansichten Dokumente ab einem bestimmten Datum oder für eine vorgegebene Zeitspanne angezeigt werden.

Da bietet es sich natürlich an, im Ansichtenfilter eine Funktion wie @Today zu verwenden, da diese immer die entsprechenden Zeitinformation zurückliefern.

Eine Selektionsformel in einer Ansicht wie

SELECT Freigabedatum <= @Today

sorgt dafür, dass nur die Dokumente angezeigt werden, die im Feld ‚Freigabedatum‘ mindestens das heutige Datum hinterlegt haben. Anders ausgedrückt: nur die Dokumente werden angezeigt, bei denen das Freigabedatum erreicht ist.

Problematik
Wenn Sie eine solche Ansicht im Notes-Client öffnen, werden Sie feststellen, dass das „Aktualisierungssymbol“ (blauer, runder Pfeil) in der Ansicht nicht mehr verschwindet, egal wie oft Sie mit der Maus auf dieses Symbol klicken bzw. alternativ die Funktionstaste ‚F9‘ drücken.


Dauerhaft angezeigtes Akualisierungssymbol in einer Ansicht, Notes R5.x

 

Warum ist das so?
Obgleich man glauben könnte, die @Today-Funktion würde nur „tages-genau“ arbeiten, muss man sich doch vor Augen halten, das ein EDV-System i.d.R. nur über einen Zeitgeber (Timer-Baustein) verfügt und eine Software unter Umständen andauernd diese Zeit überprüfen muss, um z.b. eine Aussage zu treffen, welches Datum die Funktion @Today zum Abfragezeitpunkt liefert.

Daher muss man in unserer Beispiel (Ansichtenfilter) davon ausgehen, das die angezeigten Dokumente schon unmittelbar nach der letzten Aktualisierung nicht mehr die zeitlich richtigen Dokumente sind (Beispiel: Blick in die Ansicht 1 Sekunde vor oder 1 Sekunde nach Mitternacht). Deshalb zeigt der Notes-Client konstant das Aktualisierungssymbol an.

Nachteile im Notes-Client
Wenn ein Benutzer zu einer solchen Ansicht wechselt oder eine Datenbank öffnet, in der diese Ansicht angezeigt wird, ist schon ab einer vergleichsweise kleinen Anzahl von Dokumenten eine deutliche Verzögerung bis zur Anzeige der Dokumente zu verzeichnen.

Da Notes andauernd „das Gefühl“ hat, die angezeigten Dokumente seien nicht mehr aktuell, wird für die betroffene Ansicht bei jedem Zugriff eines Client der Ansichten-Index aktualisiert. Daher kann es schon ab der Anzahl von wenigen hundert Dokumenten zu erheblichen Verzögerungen kommen. Und wenn dann noch mehrere Benutzer quasi gleichzeitig auf die Ansicht zugreifen, werden die „Antwortzeiten“ immer schlechter.

Nachteile beim Domino-Server
Auf dem Domino-Server kümmert sich grundsätzlich der Indexer-Task (unter Win32: NUPDATE.EXE) zyklisch um die Aktualisierung der Ansichten in den den Datenbanken.

Da nach dem ersten Aufbau eines Ansichten-Index die Aktualisierung inkrementell erfolgt (d.h. nur wenn neue oder geänderte Informationen angezeigt werden müssen, erfolgt auch ein Update auf den Ansichten-Index), kann der Indexer-Task diese Aufgabe i.d.R. ohne Probleme verwältigen.

Stösst der Indexer-Task aber auf eine Ansicht, in der im Ansichtenfilter zeitabhängige Funktionen verwendet werden, erfogt eine Aktualisierung – auch wenn in den Dokumenten selbst keine Änderung erfolgt ist und auch keine neuen Dokumente erstellt wurden. DAS kann die Server-Performance durchaus sehr negativ beeinflussen.

Abhilfe
Mit einem auf den ersten Blick ungewöhnlichen Trick kann der Anwendungsentwickler die Situation erheblich verbessern. Würde der Ansichtenfilter aus dem obigen Beispiel für einen englischen Domino-Server in der Form:

SELECT Freigabedatum <= @TextToTime( "Today" )

oder für einen deutschen Domino-Server in der Form

SELECT Freigabedatum <= @TextToTime( "Heute" )

programmiert, wären (zumindest für die aktive Nutzung im Notes-Client) alle o.g. Probleme behoben. Die Formel funktioniert, weil die Begriffe „Today“ oder „Heute“ als Argumente für die Funktion @TextToTime zulässig sind. Um die Sprachversion des verwendeten Servers zu berücksichtigen, könnte die Formel noch wie folgt erweitert werden:

Heute_DE := @TextToTime( "Heute" );
Heute_US := @TextToTime( "Today" );
Heute_FR := @TextToTime( "Aujourd\'hui" );
Heute :=
@If(
Heute_DE > [01.01.1900]; Heute_DE;
Heute_US > [01.01.1900]; Heute_US;
Heute_FR
);
SELECT Freigabedatum <= Heute

Damit funktioniert der Ansichtenfilter mit einem deutschen, englischen und französischen Domino-Server. Probieren Sie es einfach mal aus… ;-)

Probleme
Bei der Nutzung dieser Technik für das aktive Arbeiten mit einem Notes-Client in den Ansichten gibt es absolut keine Problem – die Ansicht ist „rasant schnell“ und der Anwendungsentwickler hat das Gefühl, einen „Meilenstein“ in der Domino-Entwicklung realisiert zu haben… :-)

Es gibt allerdings eine wirklich „böse Falle„, auf die ich selbst erst bei der Nutzung dieser Technik in den Datenbanken meiner Website gestossen bin:

Was geht da nicht?
Wenn Sie einen Ansichtenfilter in der obigen Form in Ansichten einsetzen, auf die von einem Notes-Client aus NICHT aktiv zugegriffen wird, erfolgt keine Aktualisierung des Ansichten-Indexes und es werden z.B. in einem Browser keine zusätzlichen Dokumente angezeigt, die eigentlich die Bedingung des Ansichtenfilters erfüllen.

Bei meiner Website konnte ich dies z.B. bei Dokumenten aus dem Bereich „Tipps&Tricks“ beobachten. Hier existiert in den Dokumenten tatsächlich ein Feld „Freigabe“, über die ich die Anzeige der Dokumente im Web steuere. Wurde z.B. ein Datum für die Anzeige eines Dokumentes in 2 Tagen festgelegt, so sind diese Dokumente leider am vorgesehenen Tag NICHT im Web angezeigt worden…

Ich kann nicht sicher erklären, was genau die Ursache für dieses Verhalten ist – ein ursächlicher Zusammenhang scheint aber in der – zugegebenermassen etwas ungewöhnlichen – Nutzung der Funktion @TextToTime( „Heute“ ) zu bestehen.

Lösung
Ich habe durch Tests herausgefunden, das eine Aktualisierung der Ansichten-Indexe via UpdAll-Task Abhilfe schafft.

Glauben Sie aber bitte nicht, dass der grundsätzlich nachts um 02:00 Uhr durchgeführte Start des UpdAll-Tasks durch die Zeile

ServerTasksAt2=UpdAll

in der NOTES.INI des Domino-Servers schon die Lösung gebracht hätte.

Erst durch den Einsatz des Parameters „-R“ (Rebuild), welcher einen kompletten Neuaufbau der Ansichten erzwingt, zeigte sich das gewünschte Verhalten. Da der Parameter „-R“ einen extrem serverbelastenden und zeitintensiven Aufbau der Ansichten nach sich zieht, sollte man den UpdAll-Task mit diesem Parameter auf keinen Fall auf alle Datenbanken anwenden.


Programmdokument, UpdAll -R für eine bestimmte Datenbank

 

Als Lösung empfieht sich ein Programmdokument, welches z.B. exakt um Mitternacht (es geht ja im Beispiel um den Ersatz für die @Today-Funktion) den UpdAll-Task mit Parameter -R nur auf eine bestimmte Datenbank bezogen startet.

Notes/Domino Version: ab 5.x, 6.x