Lotus Notes / Domino Sonstiges > Tipps und Tricks

Formel Libraries

(1/4) > >>

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