Lotus Notes / Domino Sonstiges > Tipps und Tricks
Formel Libraries
eknori (retired):
netter Nebeneffekt, den man sich zunutze machen kann, wenn man Formeln mit "" in LS mittels evaluate ausführen will.
Einfach die benötigte Formel im Designer mit {} umschließen und die Maske abspeichern
AtGetString:=
{
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));
};
Nach erneutem Öffnen sieht der Code dann so aus
AtGetString:=
" @If(@Trim(@Middle(_SourceField; key + _seperator ;\";\"))=\"\"; @Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound )); @Trim(@Middle(_SourceField; key + _seperator ;\";\"))); ";
Die \ werden automatisch vom Designer gesetzt; damit hat man einen schönen Syntaxcheck für seine Formeln.
Man, das wird ein langer Abend ;D
Axel:
--- Zitat von: Glombi am 24.02.05 - 16:46:26 ---... ob es auch für die Best Practices interessant ist.
--- Ende Zitat ---
Hi,
ich habe das gerade mal überflogen. Das hört sich sehr interessant an. Ich glaube, dass ist auf jeden Fall was für die Best Pratices.
Axel
eknori (retired):
da kommt man aus dem Staunen gar nicht mehr raus
_SourceField:=MESSAGES;
REM {get some constants};
@Eval(F_HEADER);
REM {get message strings};
key := "msgTicketError";
_ConstErr:=@Eval(F_GETSTRING);
key := "msgTicketNotAvailable";
_ConstNotFoundInConfig:=@Eval(F_GETSTRING);
key := "msgTicketWarning";
_ConstWarning:=@Eval(F_GETSTRING);
key := "msgTicketUserNull";
_ConstUser:=@Eval(F_GETSTRING);
key := "msgTicketProbNull";
_ConstProblem:=@Eval(F_GETSTRING);
key := "msgTicketProdNull";
_ConstProdukt:=@Eval(F_GETSTRING);
key := "msgTicketParam";
_ConstParameter:=@Eval(F_GETSTRING);
REM {validate fields; throw exception if field is empty};
_Field:="user";
@Eval(F_ERR_IF_EMPTY);
_Field:="problem";
@Eval(F_ERR_IF_EMPTY);
_Field:="application";
@Eval(F_ERR_IF_EMPTY);
wobei F_ ... Computed When Displayed Felder sind, die den Code enthalten. Ich habe die Felder in eine Teilmaske gepackt.
Kleine Einschränkung:
Der vom Designer erzeugte "Code" ist nicht mehr so leicht zu überschauen ( gerade bei umfangreichen Formeln ). Das liegt weniger an den eingefügten \; vielmehr liegt es an den fehlenden CRLF
Da sieht der Code im Feld F_GETPARAMETER so aus
" @If(@IsError(@UpperCase(@DbLookup( _ConstNull : _ConstCache ; _ConstNull : _ConstNull; _ConstLUView ; _LookUpValue ; 2 ))); @Return(@Prompt([Ok];_ConstErr; _ConstParameter + _LookUpValue + _ConstNotFoundInConfig)); @UpperCase(@DbLookup( _ConstNull : _ConstCache ; _ConstNull : _ConstNull; _ConstLUView ; _LookUpValue ; 2 ))); "
Nicht gerade leicht zum pflegen. Daher sollte man seinen Code zunächst einmal gründlich testen, bevor man ihn in die FormulaLib übernimmt.
cgorni:
Freut mich, das die Idee so gut ankommt :) Ein paar Dinge sollte man bedenken, wenn man es exzessiv einsetzen will:
1) Sobald der Code-String einmal gespeichert wird (und dadurch automatisch die oben genannte Umwandlung in \" stattgefunden hat) wird es schwer den Code zu debuggen oder zu erweitern. Es empfiehlt sich überhaupt sicher zu gehen, das der Code funktioniert.
2) Ich habe keine Ahnung, ob es ein Performance Problem geben kann
3) Ich würde davor zurückschrecken "komplizierte" Formeln in @eval auszuführen (z.B. @DBLookup) Obwohl in der Theorie nichts dagegenspricht ...
4) Für diejenigen, die es ganz wild mögen, kann man mit der Methode sich slebst modifizierenden Code schreiben. Allerdings: Wartbarkeit ade ;D
Aber für kreative Ideen ist trotzdem noch genug Platz.
Gruß,
Christian
eknori (retired):
--- Zitat ---2) Ich habe keine Ahnung, ob es ein Performance Problem geben kann
--- Ende Zitat ---
Möglicherweise gibt es durch die Einbettung des Codes in die Felder eine Einbuße;ich kann mit blossem Auge keine Probleme feststellen.
Hast du eigentlich mal getestet, ob das auch mit verstecktem Design funktioniert ??
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln