EC13 Formelsprache

Preview:

Citation preview

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, aw@wielis.com

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 – 21aw@wielis.com