Ich bin neu hier und dachte ich steige mal mit einem Trick ein, den ich so noch nirgendwo gesehen habe, den ich aber schon öfter ausgenutzt habe:
Wiederverwendbare Formeln!
Die Situation
----------------
Es kommt immer wieder vor, das man in Masken ein und dieselben Formeln (vielleicht leicht abgewandelt) an verschiedenen Stellen benutzt. Als einfaches Beispiel sei hier die typische Überprüfung von "Muss"-Feldern in der Feldvalidierung genannt:
@If(Nachname = "";
@Failure("Bitte geben Sie einen Wert für das Feld 'Nachname' ein");
@Success)
Das benötigt man vielleicht 10x für verschiedene Felder (wenn man nicht LotusScript und QuerySave benutzt).
Idee
------
Eine Stelle definieren, an der die Formel ein einziges Mal steht und immer wieder an verschiedenen Stellen genutzt werden kann, also eine Art "Formel-Library".
Handwerkszeug
--------------------
Es gibt in Notes6 einige ganz nette @Formeln, die uns helfen portablen Code zu schreiben:
@ThisValue
@ThisName
@GetField(<Feldname>)
und
@Eval(...) !!
Insbesondere @Eval ist interessant: es führt Formelsprache aus, die man als String-Parameter übergeben kann.
Lösung
---------
Wir verallgemeinern zunächst die Formel, sodaß sie in jedem Feld funktioniert:
@If(@ThisValue = "";
@Failure("Bitte geben Sie einen Wert für das Feld '" + @ThisName + "' ein");
@Success)
Jetzt machen wir daraus einen String - die neue Stringbegrenzung sei Dank ganz einfach, indem man den Code mit {...} eingrenzt. Also auch keine Notwendigkeit die " mit einem Backslash zu "entwerten". Wir erhalten:
{@If(@ThisValue = "";
@Failure("Bitte geben Sie einen Wert für das Feld '" + @ThisName + "' ein");
@Success)}
Folgendes würde schon in der Validierung funktionieren:
Code := {@If(@ThisValue = "";
@Failure("Bitte geben Sie einen Wert für das Feld '" + @ThisName + "' ein");
@Success)};
@Eval(Code)
Und jetzt machen wir das ganze zu einer "Library", ganz einfach dadurch, das wir den Code-String in einem "Shared Field" speichern, das wir F_Validation nennen ("F" für "Funktion") und das "Computed for display" ist.
Der Aufruf in der Validierung lautet jetzt einfach @Eval(F_Validation) und kann in jeder Maske benutzt werden, wo man das gemeinsame Feld einbaut.
Fertig ist der erste Teil der Formel-Library!
Erweiterung
----------------
Natürlich kann man das Beispiel (und damit die Möglichkeiten der Formel-Library) erweitern, in dem man unserer Validerung eine Parameter mitgibt. Das könnte man zum Beispiel erreichen, indem man die Parameter in ein spezielles Feld schreibt (F_Parameter, editierbar und verborgen) und die Funktion so umändert, das das Feld F_Parameter anstelle eines festen Textes benutzt wird. Ungefähr so:
FIELD F_Parameter := "Sie Nase."
@Eval(F_Validation)
und F_Validation ist
{@If(@ThisValue = "";
@Failure("Bitte geben Sie einen Wert für das Feld '" + @ThisName + "' ein." + F_Parameter);
@Success)}
So weit der Einstieg. Ich wäre natürlich jederzeit interessiert an Erweiterungen oder Verbesserungen dieser Idee.
Viel Spaß beim ausprobieren
Gruß
Christian