Im zweiten Teil des Tipps geht es um die Aktionsschaltfläche „Speichern und schliessen“. Naja – werden Sie denken – wo ist da ein Problem? Zwei @Command- Anweisungen und die Sache ist erledigt…
Problematik bei dieser Art von Aktionsschaltflächen
Die meisten Entwickler würden wohl spontan folgende Formel verwenden:
@Command([FileSave]); @Command([FileCloseWindow])
Das sieht auf den ersten Blick richtig aus und wird wohl auch in den meisten Fällen funktionieren. Problematisch wird es allerdings, wenn in der Maske für einige Felder Validierungsformeln verwendet wurden, und der Benutzer die betroffenen Felder nicht vollständig und/oder richtig ausgefüllt hat.
Bei z.B. einem gerade neu erstellten Dokument reagiert Notes dann je nach eingesetzter Version so:
R4.x
Bedingt durch die nicht gültige Validierung in einem oder mehreren Feldern kann der Notes-Client dieses Dokument nicht speichern. Als zweite Anweisung folgt aber (quasi ohne Rücksicht auf Verluste) die Anweisung zum Schliessen des Fensters. Und das wurde vom 4er Client auch oft gnadenlos durchgeführt.Ergebnis:
Die Maske verschwindet vom Bildschirm und alle bislang eingegebenen Daten sind verloren.
R5.x und ND6.x
Der Notes-Client ist durch die ungültige Validierung ebenfalls nicht in der Lage, das Dokument zu speichern. Wenn anschliessend die Anweisung zum Schliessen des Fensters ausgeführt wird, sind die aktuelleren Versionen des Notes-Clients wenigsten so freundlich und fragen den Benutzer in Form eines Dialoges, ob er den Datensatz speichern möchte.
Ergebnis:
Der Endanwender ist verwirrt. Sollte er das Gefühl haben, "… ich habe ja soeben schon gespeichert" und wählt die Schaltfläche "Nein", schliesst der Notes-Client die Maske und wie bei R4.x sind alle eingegebenen Daten verloren. Bei der Nutzung der Schaltfläche "Ja" gerät der Benutzer in eine "Validierungsschleife" und verliert bestimmt bald die Nerven…
Lösung
Der nachfolgende Formel-Code führt den Befehl @Command([FileCloseWindow]) nur dann aus, wenn die Anweisung zum Speichern zuvor positiv verlaufen ist – also bei keinem der Felder ein Validierungsproblem existiert.
@If(@Command([FileSave]); @Command([FileCloseWindow]); "" )
Man könnte die Formel so lesen:
Wenn das Speichern erfolgreich durchgeführt werden konnte (der Befehl @Command([FileSave]) liefert in diesem Fall intern ein logisch ‚wahr‘ an die @If-Funktion zurück), dann wird auch der Befehl zum Schliessen des Fensters ausgeführt – ansonsten passiert nichts ( „“ = zwei Anführungsstriche, alternativ auch NULL).
Das Verhalten des Notes-Clients (alle Versionen):
Eine ungültige Validierung in einem Feld verhindert nach wie vor das Speichern des Dokumentes – ganz im Sinne des Entwicklers.
Nachdem der Endanwender die Meldung der Feldvalidierung (kommt i.d.R. von der verwendeten @Failure-Funktion) gelesen und mit einem Mausklick bestätigt hat, wird der Cursor in das betroffene Feld plaziert und der fehlende oder fehlerhafte Eintrag im Feld kann korrigiert werden.
Danach kann ein erneuter Versuch zum Speichern und schliessen unternommen werden.