Sie sind auf Seite 1von 45

Formelsprache in Lotus Notes

EC 2013 Track 2 Session 1

Formelsprache in Lotus Notes


Einfhrung Allgemeiner Teil
Ein bisschen Geschichte Pro und Contra Funktionen und Befehle Wo kann ich Formelsprache benutzen? Debugging Undokumentierte Features Einfhrung Listen Validierung / Umsetzung Ntzliche Funktionen @Matches und @Transform

Programmierung

Los gehts! Einfhrung


ber WieLis.com / die Notes-Werkstatt
Gegrndet 2002 5 Mitarbeiter

Domino-Entwicklung
Workflows Schnittstellen Intranetlsungen

Web-Entwicklung
Intra-/Extranets Shop/Community/Schnittstellenlsungen Workflow /

Support/Operations
Serverbetrieb und Hosting (Windows, Linux, Domino) Netzwerksupport Analyse und Konzeption
3

Los geht's! - Einfhrung


Ihre Referentin - Mit wem haben Sie es zu tun?
Anne Wiesmann, aw@wielis.com Studierte Diplom-Ingenieurin (FH) Technische Informatik IT-Erfahrung seit 1995 Grnderin und Mitinhaberin von WieLis.com seit 2002

Geschichte der Formelsprache


Formelsprache ist immer schon im Notes Client (R1, 1989, Ray Ozzie) 1999 kompletter Rewrite des Codes fr R6 (Damien Katz) Neue Features fr R7

Neue Funktionen in R5
@AddToFolder @BrowserInfo @FontList @FormLanguage @HardDeleteDocument @IsAppInstalled @LanguagePreference @LaunchApp @Locale @NameLookup @Narrow @PasswordQuality @RegQueryValue @SetTargetFrame

@UndeleteDocument @UserNameLanguage @ValidateInternetAddress @Wide

Neue Befehle in R5
AddBookmark Directories EmptyTrash MoveToTrash OpenFrameset OpenPage RefreshParentNote

Neue Funktionen in R6
@AttachmentModifiedTime @GetCurrentTimeZone @GetField s @BusinessDays @GetFocusTable @CheckFormulaSyntax @GetHTTPHeader @Compare @GetIMContactListGroupN @ConfigFile ames (6.5) @DbCommand @GetViewInfo @DocLock @HashPassword @DocOmittedLength @IfError (nur in R6) @DoWhile @IsVirtualizedDirectory @Eval @LDAPServer @FileDir @Max @FloatEq @Name @For @Nothing @GetAddressBooks

Neue Funktionen in R6(2)


@OrgDir @ReplicaID @ServerAccess @ServerName @SetHTTPHeader @SetViewInfo @Sort @StatusBar @TemplateVersion (6.5) @ThisName @ThisValue @TimeMerge @ToNumber @ToTime @Transform

@UpdateFormulaContext @URLDecode @UrlQueryString @VerifyPassword @ViewShowThisUnread (6.5) @WebDbName @While

Neue Befehle in R6
AddToIMContactList Clear CloseWindow ComposeWithReference DatabaseDelete EditProfileDocument EditQuoteSelection EditRestoreDocument ExitNotes NavNext NavNextMain NavNextSelected NavNextUnread NavPrev NavPrevMain

NavPrevSelected NavPrevUnread RefreshFrame RefreshWindow RemoteDebugLotusScript RunAgent RunScheduledAgents SendInstantMessage (6.5) ShowHideIMContactList (6.5) SwitchForm SwitchView WindowCascade WindowNext WindowTile

10

Neue Funktionen und Befehle in R7/R8


R7
@AdminECLIsLocked @DB2Schema @IsDB2 @IsEmbeddedInsideWCT @PolicyIsFieldLocked DiscoverFolders

R8
@AbstractSimple @GetComponentViewPreference @IsInCompositeApp CopySelectedAsTable OpenInNewWindow
11

Pro und Contra


Vorteile
Sehr kompakt Mchtige Funktionen fr UI und Listen

Nachteile
Batch-Logik Nicht objektorientiert Debugging schwierig

12

Funktionen und Befehle


Warum gibt es beides?
Funktionen eher fr Formeln Befehle eher fr UI Funktionen Unterscheidung ist nicht durchgngig Befehle sind grtenteils lter als R5 Befehle werden immer fter durch Funktionen ersetzt oder ergnzt.

13

Wo kann man Formeln anwenden?


Im klassischen Notes Client
Masken Auswahlformeln fr Ansichten Eingabe-Validierung Buttons Agenten

Im Web
Masken (nur eingeschrnkt) Auswahlformeln fr Ansichten Buttons (nur eingeschrnkt) Agenten

Auf XPages
Komplett anderes Ding, nur oberflchlich hnlich
14

Debugging
Undokumentierter Formel-Debugger leider nicht mehr da :-( XFL (Link siehe Linkliste)

15

Undokumentierte Funktionen (1)


@AccountGetInfo @AddBusyTime @AdminCreateRequest @AdminDelegateMailFile @AdminPerformAction @BitAnd @BitOr @BitXor @BitNot @BitShift @CertBlobPack @CertBlobUnpack @CharSetInfo @CRLList @CRL
16

Undokumentierte Funktionen (2)


@DbAdminServer
Findet den Admin-Server zu einer Datenbank

@DbBuildVersion
Liest die Dateiversion der aktuellen Datenbank aus.

@DbUnreadCount @ExpandNameList
Ermittelt die Mitglieder einer Gruppe

@FindFreeResource @GetSoftDeleteExpireTime @GetMembers


Erhlt Mitglieder aus einer Liste

17

Undokumentierte Funktionen (3)


@IsDbPrimaryAB @IsSoftDeleteEnabled @IssuedBy @IsXACLEnabled @LocationGetInfo
Holt Werte aus dem aktuellen Location Document

@LocationGetOSTZ und @LocationGetTZ Holt Zeitzoneninfos fr die aktuelle Umgebung @MailFilterAddToFolder @MailStopProcessingFilter @ManageECL

18

Undokumentierte Funktionen (4)


@NetAccount @OpenCalendar @RevokedDate @ RecoverIDFile @RevokedSerialNumber @SetSoftDeleteExpireTime @ShowParentPreview @ThisNext @ThisUpdate @UpdateViewDesign @URLSubmit @WhichFolders
Ermittelt, in welchen Ordnern ein Dokument liegt

@X509Certificates
19

Genug der Theorie


Mal was ausprobieren...

20

OK, ein paar einfache Beispiele


@Prompt @DialogBox @Command([FilePrint]) @Word

21

Eingabevalidierung
Wird fr Feldwerte benutzt Zumeist eine @If-Abfrage, die zu @Success oder @Failure auflst

Sehr praktisch in diesem Zusammenhang:


@ThisName @IsDocBeingSaved

22

Eingabeumsetzung
Ideal als Vertipper-Korrektur Eine Formel gibt den Feldwert zurck, der ins Feld geschrieben wird und das ersetzt, was der Benutzer eingegeben hat.

23

Arbeiten mit Listen


Ich brauche die Nachnamen aller Namen in diesem Feld als Liste

24

Arbeiten mit Listen


Schleifen-Lsung mit Lotus Script

25

Arbeiten mit Listen


Schleifenlsung mit Formelsprache

Aktuelles Element am Leerzeichen teilen Ersten und zweiten Teil an Liste anhngen

26

Arbeiten mit Listen


Implizite Lsung mit Formelsprache

27

Listen sortieren
@Sort, der Allesknner
Ohne weitere Parameter sortiert er Listen Beliebige Sortierlogik programmierbar

28

Listen sortieren (2)


So geht es:
Das Zauberwort

29

Ersetzen
@Replace
Ersetzt Werte in einer Liste durch andere Werte Sehr mchtig Ersetzungen werden gleichzeitig durchgefhrt

@ReplaceSubstring
Ersetzt Teilstrings in einem String durch andere Strings Ersetzungen werden nacheinander ausgefhrt

30

Datum und Zeit


@Adjust
Beliebige nderung an einem Datum Auch komplexe nderungen mglich
bermorgen: @Adjust(Datum;0;0;2;0;0;0); In 10 Minuten: @Adjust(Datum; 0;0;0;0;10;0);

@Date
Ermglicht praktische Berechnungen
Erster Tag des aktuellen Monats: @Date(@Year(@Now);@Month(@Now);1) Erster Tag des nchsten Monats: @Adjust(@Date(@Year(@Now);@Month(@Now);1); 0;1;0;0;0;0)

@Weekday
Gibt den aktuellen Tag als Zahl zurck
31

Datum und Zeit (2)


Tage zhlen
Tage := (Datum2-Datum1)/86400;

@BusinessDays
Faktisch unbrauchbar

32

Textverarbeitung
@Text
Wandelt irgend etwas in Text Formatiert

@Abstract
Holt den Textanteil aus einem Rich Text Feld Auf Wunsch werden berzhlige Zeichen entfernt Dokument muss gespeichert sein!

@AbstractSimple
Wie @Abstract, aber ohne die vielen Schalter Holt 100 Bytes oder die ersten 2 Abstze (je nachdem was krzer ist)

33

Merken und Erinnern


@SetEnvironment
Setzt beliebige Parameter in der notes.ini

@Environment
Liest sie wieder aus

34

Die Post ist da


@MailSend
Wenn ohne Parameter aufgerufen: Aktuelles Dokument als Mail ansehen und verschicken Wenn mit Parametern aufgerufen: alle Parameter einstellbar

35

@Matches
Eingabevalidierung ++
Akzeptiert Wildcards ( * ? ) Akzeptiert regulre Ausdrcke

36

@Matches (2)
Eingabevalidierung mit Wildcards
? ein Zeichen
@Matches("Extwicklercamp";"En?wicklercamp")

ergibt @True

@Matches("Extwicklercamp";"E?wicklercamp")

ergibt @False

* beliebig viele Zeichen


@Matches("Entwicklercamp";"E*camp") ergibt @Matches("Admincamp";"E*camp") ergibt @False

@True

37

@Matches (3)
Eingabevalidierung mit Regulren Ausdrcken
Auf Buchstaben prfen * Gltige Mailadresse Gltiges Datum
@Matches(Hallo;"+{A-Za-z}") ergibt @True @Matches(NaIhr2;"+{A-Za-z}") ergibt @False +{A-Za-z0-9._%+-}@+{A-Za-z0-9.-}\.+{A-Za-z} {0-3}{0-9}.{0-1}{0-9}.{1-2}{09}{0-9}{0-9}

38

@Transform
Fast alle Formeln wirken auf Listen
@Sqrt(Liste) berechnet die Wurzel jedes

Listenelements Fehler bei negativen Werten

@Transform erlaubt dagegen Formelcode als Rechenvorschrift


@Transform(Liste;x;@If(x>=0;@Sqrt(x);0 )) fngt Fehler ab

Alternative:

@Transform(Liste;x;@If(x>=0;@Sqrt(x) ;@Nothing)) gibt fr negative Werte gar keine

Ergebnisse zurck

39

Beispiel: Verschachtelte Gruppen auflsen


Liste := @DbLookup("":"NoCache";Server: db; Liste holen "($VIMGroups)"; Gruppe; 3); @For(n := 1; n <= @Elements(Liste); n := n + 1; @If( (@Left(Liste[n] ; 2) = "CN") ; Jedes Element auflsen bei Bedarf temp := temp :@Name([CN] ; Liste[n]); temp := temp :@Name([CN] ; @DbLookup("":"NoCache";Server:db;"($VIMGroups)"; Liste[n] ; 3;[FailSilent])) ) );

40

Verschachtelte Gruppen auflsen (2)


Liste := @ExpandNameList(Server;Gruppe);

41

Kleine Verschnaufpause
Ihre Fragen?

42

Ausblick / Weiterlesen
Historie
http://en.wikipedia.org/wiki/Formula_language

Sehr grobe bersicht

http://damienkatz.net/2005/01/formula-engine-rewrite.html

Blog-Eintrag mit allen Details zum Rewrite fr R6

Lotus Notes Historie Allgemein

http://www.ibm.com/developerworks/lotus/library/ls-NDHistory/

http://www-12.lotus.com/ldd/doc/uafiles.nsf/docs/designer65poster/$File/FormulaPoster.pdf

Formelposter (Stand 6.5) Undokumentierte Funktionen


http://www.devinolson.net/devin/SpankysPlace.nsf/d6plinks/DOLN-8G4NBJ http://lotus-blogs.blogspot.de/2009/01/interesting-and-undocumented-formulas.html

Debugging
http://www.nappz.de/xfl/de/

Einige andere Seiten mit Tricks


http://www.blug.be/blug.nsf/click?open&e=20110331&s=kathy&f=2011_slides_b/$file/blug_formula.pdf http://searchdomino.techtarget.com/resources/Lotus-Notes-Domino-Formula-Language
43

Ausblick / Weiterlesen (2)


Regulre Ausdrcke: Allgemeine Beispiele http://www.zytrax.com/tech/web/regex.htm Einige listige Tricks http://www.regular-expressions.info/

44

Jetzt sind Sie dran...


Vielen Dank fr Ihre Aufmerksamkeit! Ich freue mich auf Ihre Fragen.

Anne Wiesmann Technische Leitung 04153 / 55 9 41 21 aw@wielis.com

45