1 Formelsprache in Lotus Notes EC 2013 Track 2 Session 1
1
Formelsprache in Lotus NotesEC 2013 Track 2 Session 1
2
Formelsprache in Lotus Notes
EinführungAllgemeiner Teil
Ein bisschen GeschichtePro und ContraFunktionen und BefehleWo kann ich Formelsprache benutzen?DebuggingUndokumentierte Features
ProgrammierungEinführungListenValidierung / UmsetzungNützliche Funktionen@Matches und @Transform
3
Los geht’s! – Einführung
Über WieLis.com / die Notes-WerkstattGegründet 20025 Mitarbeiter
Domino-EntwicklungWorkflowsSchnittstellenIntranetlösungen
Web-EntwicklungIntra-/ExtranetsShop/Community/SchnittstellenlösungenWorkflow /
Support/Operations Serverbetrieb und Hosting (Windows, Linux, Domino)NetzwerksupportAnalyse und Konzeption
4
Los geht's! - Einführung
Ihre Referentin - Mit wem haben Sie es zu tun?Anne Wiesmann, [email protected]
Studierte Diplom-Ingenieurin (FH) Technische InformatikIT-Erfahrung seit 1995Gründerin und Mitinhaberin von WieLis.com seit 2002
5
Geschichte der Formelsprache
Formelsprache ist „immer schon“ im Notes Client (R1, 1989, Ray Ozzie)1999 kompletter Rewrite des Codes für R6 (Damien Katz)Neue Features für R7
6
Neue Funktionen in R5
●@AddToFolder●@BrowserInfo●@FontList●@FormLanguage●@HardDeleteDocument●@IsAppInstalled●@LanguagePreference●@LaunchApp●@Locale●@NameLookup●@Narrow●@PasswordQuality●@RegQueryValue●@SetTargetFrame
●@UndeleteDocument●@UserNameLanguage●@ValidateInternetAddress●@Wide
7
Neue Befehle in R5
●AddBookmark●Directories●EmptyTrash●MoveToTrash●OpenFrameset●OpenPage●RefreshParentNote
8
Neue Funktionen in R6
●@AttachmentModifiedTimes●@BusinessDays●@CheckFormulaSyntax●@Compare●@ConfigFile●@DbCommand●@DocLock●@DocOmittedLength●@DoWhile●@Eval●@FileDir●@FloatEq●@For●@GetAddressBooks
●@GetCurrentTimeZone●@GetField●@GetFocusTable●@GetHTTPHeader●@GetIMContactListGroupNames (6.5)●@GetViewInfo●@HashPassword●@IfError (nur in R6)●@IsVirtualizedDirectory●@LDAPServer●@Max●@Name●@Nothing●
9
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
10
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
11
Neue Funktionen und Befehle in R7/R8
R7@AdminECLIsLocked@DB2Schema@IsDB2@IsEmbeddedInsideWCT@PolicyIsFieldLockedDiscoverFolders
R8@AbstractSimple@GetComponentViewPreference@IsInCompositeAppCopySelectedAsTableOpenInNewWindow
12
Pro und Contra
VorteileSehr kompaktMächtige Funktionen für UI und Listen
NachteileBatch-LogikNicht objektorientiertDebugging schwierig
13
Funktionen und Befehle
Warum gibt es beides?Funktionen eher für FormelnBefehle eher für UI FunktionenUnterscheidung ist nicht durchgängigBefehle sind größtenteils älter als R5Befehle werden immer öfter durch Funktionen
ersetzt oder ergänzt.
14
Wo kann man Formeln anwenden?
Im klassischen Notes ClientMaskenAuswahlformeln für AnsichtenEingabe-ValidierungButtonsAgenten
Im WebMasken (nur eingeschränkt)Auswahlformeln für AnsichtenButtons (nur eingeschränkt)Agenten
Auf XPagesKomplett anderes Ding, nur oberflächlich ähnlich
15
Debugging
Undokumentierter Formel-Debugger – leider nicht mehr da :-(XFL (Link siehe Linkliste)
16
Undokumentierte Funktionen (1)
@AccountGetInfo@AddBusyTime@AdminCreateRequest@AdminDelegateMailFile@AdminPerformAction@BitAnd @BitOr @BitXor @BitNot @BitShift@CertBlobPack@CertBlobUnpack@CharSetInfo@CRLList @CRL
17
Undokumentierte Funktionen (2)
@DbAdminServerFindet den Admin-Server zu einer Datenbank
@DbBuildVersionLiest die Dateiversion der aktuellen Datenbank aus.
@DbUnreadCount@ExpandNameList
Ermittelt die Mitglieder einer Gruppe@FindFreeResource@GetSoftDeleteExpireTime@GetMembers
Erhält Mitglieder aus einer Liste
18
Undokumentierte Funktionen (3)
@IsDbPrimaryAB@IsSoftDeleteEnabled@IssuedBy@IsXACLEnabled@LocationGetInfo
Holt Werte aus dem aktuellen Location Document@LocationGetOSTZ und @LocationGetTZ
Holt Zeitzoneninfos für die aktuelle Umgebung@MailFilterAddToFolder@MailStopProcessingFilter@ManageECL
19
Undokumentierte Funktionen (4)
@NetAccount@OpenCalendar@RevokedDate@ RecoverIDFile@RevokedSerialNumber@SetSoftDeleteExpireTime@ShowParentPreview@ThisNext@ThisUpdate@UpdateViewDesign@URLSubmit@WhichFolders
Ermittelt, in welchen Ordnern ein Dokument liegt@X509Certificates
20
Genug der Theorie
Mal was ausprobieren...
21
OK, ein paar einfache Beispiele
@Prompt
@DialogBox
@Command([FilePrint])
@Word
22
Eingabevalidierung
Wird für Feldwerte benutztZumeist eine @If-Abfrage, die zu @Success oder @Failure auflöst
Sehr praktisch in diesem Zusammenhang:@ThisName@IsDocBeingSaved
23
Eingabeumsetzung
Ideal als Vertipper-KorrekturEine Formel gibt den Feldwert zurück, der ins Feld geschrieben wird und das ersetzt, was der Benutzer eingegeben hat.
24
Arbeiten mit Listen
„Ich brauche die Nachnamen aller Namen in diesem Feld als Liste“
25
Arbeiten mit Listen
Schleifen-Lösung mit Lotus Script
26
Arbeiten mit Listen
Schleifenlösung mit Formelsprache
Aktuelles Element am Leerzeichen teilen
Ersten und zweiten Teilan Liste anhängen
27
Arbeiten mit Listen
Implizite Lösung mit Formelsprache
28
Listen sortieren
@Sort, der AlleskönnerOhne weitere Parameter sortiert er ListenBeliebige Sortierlogik programmierbar
29
Listen sortieren (2)
So geht es:
Das Zauberwort
30
Ersetzen
@ReplaceErsetzt Werte in einer Liste durch andere WerteSehr mächtigErsetzungen werden gleichzeitig durchgeführt
@ReplaceSubstringErsetzt Teilstrings in einem String durch andere
StringsErsetzungen werden nacheinander ausgeführt
31
Datum und Zeit
@AdjustBeliebige Änderung an einem DatumAuch komplexe Änderungen möglich
Übermorgen: @Adjust(Datum;0;0;2;0;0;0);In 10 Minuten: @Adjust(Datum; 0;0;0;0;10;0);
@DateErmöglicht praktische Berechnungen
Erster Tag des aktuellen Monats: @Date(@Year(@Now);@Month(@Now);1)
Erster Tag des nächsten Monats: @Adjust(@Date(@Year(@Now);@Month(@Now);1);0;1;0;0;0;0)
@WeekdayGibt den aktuellen Tag als Zahl zurück
32
Datum und Zeit (2)
Tage zählenTage := (Datum2-Datum1)/86400;
@BusinessDaysFaktisch unbrauchbar
33
Textverarbeitung
@TextWandelt irgend etwas in TextFormatiert
@AbstractHolt den Textanteil aus einem Rich Text FeldAuf Wunsch werden überzählige Zeichen entferntDokument muss gespeichert sein!
@AbstractSimpleWie @Abstract, aber ohne die vielen SchalterHolt 100 Bytes oder die ersten 2 Absätze (je
nachdem was kürzer ist)
34
Merken und Erinnern
@SetEnvironmentSetzt beliebige Parameter in der notes.ini
@EnvironmentLiest sie wieder aus
35
Die Post ist da
@MailSendWenn ohne Parameter aufgerufen: Aktuelles
Dokument als Mail ansehen und verschickenWenn mit Parametern aufgerufen: alle Parameter
einstellbar
36
@Matches
Eingabevalidierung ++Akzeptiert Wildcards ( * ? )Akzeptiert reguläre Ausdrücke
37
@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
@True@Matches("Admincamp";"E*camp") ergibt @False
38
@Matches (3)
Eingabevalidierung mit Regulären AusdrückenAuf Buchstaben prüfen
@Matches(„Hallo“;"+{A-Za-z}") ergibt @True@Matches(„NaIhr2“;"+{A-Za-z}") ergibt @False
* Gültige Mailadresse+{A-Za-z0-9._%+-}@+{A-Za-z0-9.-}\.+{A-Za-z}
Gültiges Datum{0-3}{0-9}.{0-1}{0-9}.{1-2}{09}{0-9}{0-9}
39
@Transform
Fast alle Formeln wirken auf Listen@Sqrt(Liste) berechnet die Wurzel jedes
ListenelementsFehler bei negativen Werten
@Transform erlaubt dagegen Formelcode als Rechenvorschrift
@Transform(Liste;“x“;@If(x>=0;@Sqrt(x);0)) fängt Fehler ab
Alternative: @Transform(Liste;“x“;@If(x>=0;@Sqrt(x);@Nothing)) gibt für negative Werte gar keine Ergebnisse zurück
40
Beispiel: Verschachtelte Gruppen auflösen
Liste := @DbLookup("":"NoCache";Server: db; "($VIMGroups)"; Gruppe; 3);@For(n := 1; n <= @Elements(Liste); n := n + 1;
@If( (@Left(Liste[n] ; 2) = "CN") ;temp := temp :@Name([CN] ; Liste[n]);temp := temp :@Name([CN] ;
@DbLookup("":"NoCache";Server:db;"($VIMGroups)"; Liste[n] ; 3;[FailSilent]))
));
Liste holen
Jedes Element auflösen bei Bedarf
41
Verschachtelte Gruppen auflösen (2)
Liste := @ExpandNameList(Server;Gruppe);
42
Kleine Verschnaufpause
Ihre Fragen?
43
Ausblick / Weiterlesen
Historiehttp://en.wikipedia.org/wiki/Formula_language
Sehr grobe Übersichthttp://damienkatz.net/2005/01/formula-engine-rewrite.html
Blog-Eintrag mit allen Details zum Rewrite für R6http://www.ibm.com/developerworks/lotus/library/ls-NDHistory/
Lotus Notes HistorieAllgemein
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-8G4NBJhttp://lotus-blogs.blogspot.de/2009/01/interesting-and-undocumented-formulas.html
Debugginghttp://www.nappz.de/xfl/de/
Einige andere Seiten mit Trickshttp://www.blug.be/blug.nsf/click?open&e=20110331&s=kathy&f=2011_slides_b/$file/blug_formula.pdfhttp://searchdomino.techtarget.com/resources/Lotus-Notes-Domino-Formula-Language
44
Ausblick / Weiterlesen (2)
Reguläre Ausdrücke:Allgemeine Beispiele
http://www.zytrax.com/tech/web/regex.htmEinige listige Tricks
http://www.regular-expressions.info/
45
Jetzt sind Sie dran...
Vielen Dank für Ihre Aufmerksamkeit!
Ich freue mich auf Ihre Fragen.
Anne WiesmannTechnische Leitung04153 / 55 9 41 – [email protected]