45
1 Formelsprache in Lotus Notes EC 2013 Track 2 Session 1

EC13 Formelsprache

  • Upload
    wielis

  • View
    194

  • Download
    2

Embed Size (px)

Citation preview

Page 1: EC13 Formelsprache

1

Formelsprache in Lotus NotesEC 2013 Track 2 Session 1

Page 2: EC13 Formelsprache

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

Page 3: EC13 Formelsprache

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

Page 4: EC13 Formelsprache

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

Page 5: EC13 Formelsprache

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

Page 6: EC13 Formelsprache

6

Neue Funktionen in R5

●@AddToFolder●@BrowserInfo●@FontList●@FormLanguage●@HardDeleteDocument●@IsAppInstalled●@LanguagePreference●@LaunchApp●@Locale●@NameLookup●@Narrow●@PasswordQuality●@RegQueryValue●@SetTargetFrame

●@UndeleteDocument●@UserNameLanguage●@ValidateInternetAddress●@Wide

Page 7: EC13 Formelsprache

7

Neue Befehle in R5

●AddBookmark●Directories●EmptyTrash●MoveToTrash●OpenFrameset●OpenPage●RefreshParentNote

Page 8: EC13 Formelsprache

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●

Page 9: EC13 Formelsprache

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

Page 10: EC13 Formelsprache

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

Page 11: EC13 Formelsprache

11

Neue Funktionen und Befehle in R7/R8

R7@AdminECLIsLocked@DB2Schema@IsDB2@IsEmbeddedInsideWCT@PolicyIsFieldLockedDiscoverFolders

R8@AbstractSimple@GetComponentViewPreference@IsInCompositeAppCopySelectedAsTableOpenInNewWindow

Page 12: EC13 Formelsprache

12

Pro und Contra

VorteileSehr kompaktMächtige Funktionen für UI und Listen

NachteileBatch-LogikNicht objektorientiertDebugging schwierig

Page 13: EC13 Formelsprache

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.

Page 14: EC13 Formelsprache

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

Page 15: EC13 Formelsprache

15

Debugging

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

Page 16: EC13 Formelsprache

16

Undokumentierte Funktionen (1)

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

Page 17: EC13 Formelsprache

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

Page 18: EC13 Formelsprache

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

Page 19: EC13 Formelsprache

19

Undokumentierte Funktionen (4)

@NetAccount@OpenCalendar@RevokedDate@ RecoverIDFile@RevokedSerialNumber@SetSoftDeleteExpireTime@ShowParentPreview@ThisNext@ThisUpdate@UpdateViewDesign@URLSubmit@WhichFolders

Ermittelt, in welchen Ordnern ein Dokument liegt@X509Certificates

Page 20: EC13 Formelsprache

20

Genug der Theorie

Mal was ausprobieren...

Page 21: EC13 Formelsprache

21

OK, ein paar einfache Beispiele

@Prompt

@DialogBox

@Command([FilePrint])

@Word

Page 22: EC13 Formelsprache

22

Eingabevalidierung

Wird für Feldwerte benutztZumeist eine @If-Abfrage, die zu @Success oder @Failure auflöst

Sehr praktisch in diesem Zusammenhang:@ThisName@IsDocBeingSaved

Page 23: EC13 Formelsprache

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.

Page 24: EC13 Formelsprache

24

Arbeiten mit Listen

„Ich brauche die Nachnamen aller Namen in diesem Feld als Liste“

Page 25: EC13 Formelsprache

25

Arbeiten mit Listen

Schleifen-Lösung mit Lotus Script

Page 26: EC13 Formelsprache

26

Arbeiten mit Listen

Schleifenlösung mit Formelsprache

Aktuelles Element am Leerzeichen teilen

Ersten und zweiten Teilan Liste anhängen

Page 27: EC13 Formelsprache

27

Arbeiten mit Listen

Implizite Lösung mit Formelsprache

Page 28: EC13 Formelsprache

28

Listen sortieren

@Sort, der AlleskönnerOhne weitere Parameter sortiert er ListenBeliebige Sortierlogik programmierbar

Page 29: EC13 Formelsprache

29

Listen sortieren (2)

So geht es:

Das Zauberwort

Page 30: EC13 Formelsprache

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

Page 31: EC13 Formelsprache

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

Page 32: EC13 Formelsprache

32

Datum und Zeit (2)

Tage zählenTage := (Datum2-Datum1)/86400;

@BusinessDaysFaktisch unbrauchbar

Page 33: EC13 Formelsprache

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)

Page 34: EC13 Formelsprache

34

Merken und Erinnern

@SetEnvironmentSetzt beliebige Parameter in der notes.ini

@EnvironmentLiest sie wieder aus

Page 35: EC13 Formelsprache

35

Die Post ist da

@MailSendWenn ohne Parameter aufgerufen: Aktuelles

Dokument als Mail ansehen und verschickenWenn mit Parametern aufgerufen: alle Parameter

einstellbar

Page 36: EC13 Formelsprache

36

@Matches

Eingabevalidierung ++Akzeptiert Wildcards ( * ? )Akzeptiert reguläre Ausdrücke

Page 37: EC13 Formelsprache

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

Page 38: EC13 Formelsprache

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}

Page 39: EC13 Formelsprache

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

Page 40: EC13 Formelsprache

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

Page 41: EC13 Formelsprache

41

Verschachtelte Gruppen auflösen (2)

Liste := @ExpandNameList(Server;Gruppe);

Page 42: EC13 Formelsprache

42

Kleine Verschnaufpause

Ihre Fragen?

Page 43: EC13 Formelsprache

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

Page 44: EC13 Formelsprache

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/

Page 45: EC13 Formelsprache

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]