Lotus Notes / Domino Sonstiges > Tipps und Tricks
Formel Libraries
cgorni:
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
Glombi:
Hallo Christian,
das ist aber ein starker Einstieg hier ins Forum :D
Vielen Dank und herzlich willkommen!
Wenn ich Zeit habe, sehe ich mir das gerne an. Mal sehen, ob es auch für die Best Practices interessant ist.
Andreas
eknori (retired):
:o 8) hatte ich nicht erst hier ( http://www.atnotes.de/index.php?topic=14798.msg134893#msg134893 ) so etwas herbeigefleht ?.
@Eval ist der missing link, der mir da nicht in den Sinn kam.
Danke für das Augenöffnen !! :D und herzlich willkommen im Forum
Thomas Schulte:
Ich glaub da werden wir bald ein noch neueres Release des Helpdesk erleben.
eknori (retired):
Habe es gerade eingebaut; funzt prima ;D 8) 8) 8)
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln