The Lotus Code Cookbook
Upcoming SlideShare
Loading in...5
×
 

The Lotus Code Cookbook

on

  • 6,723 views

The Lotus Code Cookbook - Ulrich Krause...

The Lotus Code Cookbook - Ulrich Krause

Tipps, Tipps, Tipps ... Die Session behandelt kein zentrales Thema. In loser Folge werden Tipps und Tricks aus allen Bereichen der Programmierung in Lotus Notes / Domino vorgestellt. @Formula, LotusScript, Java, JavaScript, LS2CApi.

Zielgruppe sind Alle, die sich mit Applikationsentwicklung beschäftigen. Anfänger und "alte Hasen"; es ist für jeden etwas dabei.

Statistics

Views

Total Views
6,723
Views on SlideShare
6,419
Embed Views
304

Actions

Likes
0
Downloads
125
Comments
0

1 Embed 304

http://www.eknori.de 304

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    The Lotus Code Cookbook The Lotus Code Cookbook Presentation Transcript

    • The Lotus Code Cookbook
      Ulrich Krause
      EntwicklerCamp, 21. – 23.02.2011,
      Gelsenkirchen, Deutschland
    • Agenda
      Allgemeines
      Optionen des Designers
      Tools
      @Formeln
      LotusScript
      Bearbeitung von Richtext ( C-Api / LS2CAPI )
      Javascript (Frameworks)
      XPages
    • Warum sollten wir @Formeln verwenden?
      Alle Sprachen verwenden die gleichen Kernfunktionen
      Bei gleicher Funktionalität sind Formeln IMMER performanter
      Formeln sind Performance optimiert
      Lesenswert: Damien Katz, http://damienkatz.net/2005/01/formula-engine-rewrite.html
    • Option Declare
      WichtigsteCodezeile in LotusScript
      Option Declare “zwingt” zumDeklarierenallerVariablen und erspart das Beseitigen von schwerauffindbarenFehlern
      AlleFehlersind runtime Fehler
    • Option Declare
      OHNE „Option Declare“
      MIT„OptionDeclare“
    • Option Declare
      Der wichtigste Grund, warum wir „Option Declare“ verwenden MÜSSEN, ist …
    • Option Declare
      Every time you don‘t
      use „Option Declare“,
      God will kill a kitten !!
    • Option Base
      Sets the default lower bound for array subscripts to 0 or 1
    • Dim Statement
      Erstellt eine Referenz zu einem Objekt, ohne das Objekt zu erstellen
      Achtung: Dim i, j, k As Integer
      Dim i As Integer, j As Integer, k As Integer
    • Dim Statement und Performance
      Ausführungszeiten messen mit Getthreadinfo
      Wird z.B. ein Integerwert in einem Variant gespeichert, so muss Notes intern eine Typumwandlung vornehmen. Das kostet Zeit !!
      DEMO: DIM - Zeitschleife
    • GetNextDocument vs. GetNthDocument
      16.260 Dokumente
      10 Testläufe / Methode
      Tabelle zeigt die Durchschnittswerte
    • GetNextDocument vs. GetNthDocument
      113.610 Dokumente
      4 Testläufe / Methode
      Tabelle zeigt die Durchschnittswerte
      DEMO - GetNextDocument vs. GetNthDocument
    • Script / Comment Templates
      Einheitlicher Aufbau von Codesegmenten
    • Fonts / Colors
      Individuelle Einstellungen für bessere Lesbarkeit
    • Zeilennummern einblenden
    • Sessionempfehlung
      Anita DungerEinführung in die neue Designer-Umgebung ( Hands On, Dienstag 9:00 – 10:30 )
      Julian BussVersionskontrolle mit dem Domino Designer( direkt im Anschluss an diese Session )
    • Soft-Coded Field Names
      One of the worst traps in LotusScript is using hard-coded field names.
      LotusScript makes it simple to hard code field names, because of its support for extended attributes of the NotesDocument class.
      The LotusScript documentation even describes this as a feature, though you should avoid it like the plague.
    • Logging
      Kein Code ist absolut fehlerfrei!
      Auch wenn momentan keine Fehler erkennbar sind, werden Fehler auftauchen.
      Fehler erkennen, die von Usern nicht immer gemeldet werden.
      Es gibt Tools, die ein aussagekräftiges Logging mit nur wenigen Codezeilen ermöglichen.
      Julian Robichaux: OpenLog
      http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=OpenLog
    • OpenLog
    • Source Sniffer
      Domino Designer extension
      Sucht in einer oder meheren Anwendungen
      Unterstützt
      Java,
      Javascript,
      Lotusscript,
      @Formula,
      Xpages
      http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=Source%20Sniffer
    • NotesHound
      http://domino-80.prominic.net/A55BE4/NotesHoundWeb.nsf/webpages/index.html
    • LotusScript.doc
      Erstellt eine Dokumentationvon LotusScript in einer Datenbank.
      Syntax wieJavadoc
      LotusScript.doc API
      http://blog.lsdoc.org/
      LSDoc Support to DDE
      http://blog.mindoo.com/web/blog.nsf/dx/22.07.2010223240KLES4H.htm?opendocument&comments, Karsten Lehmann
    • Hide Design
      In kommerziellen Anwendungen
      Template „Hide Design“
      Problem: keine Anpassungen von Ansichten durch den Anwender
      Besser ist es daher, nur Teile der Anwendung zu verbergen.
      In der Regel enthalten Script Bibliotheken den schützenswerten Code.
      %Include „xyz.lss“
    • Hide Design
      Der lesbare Quelltext befindet sich im item $ScriptLib
    • Hide Design
      kann
      Den Text im item $ScriptLib kann man löschen oder durch ein freundliches „Hello“ ersetzen. Nach dem Speichern ist der Quelltext nicht mehr sichtbar.
    • NotesView.AutoUpdate = false
      Performancegewinn, da die Ansicht nicht kontinuierlich aktualisiert wird.
      Zu den technischen Hintergründen; Bob Balaban, http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-10-autoupdating-in-views
      http://www-10.lotus.com/ldd/ddwiki.nsf/dx/View.AutoUpdate_
      Bei der Verwendung von NotesViewNavigator können Fehler auftreten, wenn AutoUpdate = true („Entry not found in Index“)
      Andre Guirard, http://www-10.lotus.com/ldd/bpmpblog.nsf/dx/autoupdate-false
    • @WhichFolders
      Neu ab 8.5.1
      Nur in Ansichtsspalten zu verwenden
      Option „Maintainfolderunreadinformation“ muß aktiviert sein
      Option „ Don'tmaintainUnreadmarks“ darf nicht aktiviert sein“
    • @WhichFolders in LotusScript I
      db.FolderReferencesEnabled = True
      $FolderInfo und $FolderRefInfo
      Ansichten können aus der Mailschablone kopiert werden
      Demo: @WhichFolders in LS I
    • @WhichFolders in LotusScript II
      CreateViewNavFrom
      Keine zusätzlichen Designelemente erforderlich
      Aber langsam bei einer großen Ordneranzahl
      Demo: @WhichFolders in LS II
    • @Command( [DiscoverFolders];title)
      Wie @WhichFolders mit zusätzlichen Möglichkeiten, um die Ordnereigenschaften eines Dokuments zu ändern.
      Uncheck „Don‘tmaintainunreadmarks“
    • @Transform
      Seit Version 6
      Entspricht LotusScriptstatementForAll x in Liste
      Führt eine Formel für jedes Element der Liste aus.
      @Transform(list ; variableName ; formula )
      Rückgabewert ist die durch die Formel modifizierte Liste
      Kann in Ansichtenspalten verwendet werden
    • @Transform (Sample)
      Names.nsf - PeopleBy Client Version
      Unübersichtlich, da alle Versionen dargestellt werden.
    • PeopleBy Client Version (new)
      Mit wenigen Handgriffen Ordnung schaffen
    • @Nothing
      Seit Version 6
      Lt. Designer Hilfe nur mit @Transform zu verwendbar ( „not valid in othercontext“ )
      Funktioniert aber z.B auch in View Selection
    • @Sort
      Sortiert eine Liste
      [ACCENTSENSITIVE]
      [ACCENTINSENSITIVE]
      [ASCENDING]
      [CASESENSITIVE]
      [CASEINSENSITIVE]
      [CUSTOMSORT]
      [DESCENDING]
      [PITCHSENSITIVE]
      [PITCHINSENSITiVE]
      Dies lässt sich auch kombinieren
      [ASCENDING]:[CASESENSITIVE]
    • @Sort
      @Sort kann aber noch mehr – [CustomSort]
    • @UpdateFormulaContext
      Ändert den Kontext einer Formel
      Nachfolgende Befehle werden im neuen Kontext ausgeführt
    • @Now + [NoCache]
      [SERVERTIME] ermöglicht die Abfrage von @Now für einen Server oder eine Liste von Servern.
      Problem: Änderung der Systemzeit
      @Now fragt die Zeit beim ersten Aufruf ab und cached diesen Wert. Bei weiteren Aufrufen wird nur die Zeit seit dem ersten Aufruf zum Wert im Cache addiert.
      [NOCACHE] umgeht dieses Problem
      Nicht dokumentiert; noch nicht
    • Get the current location name
      @LocationGetInfo
      @LocationGetInfo([HomeServer])
      @LocationGetInfo([InternetMailAddress])
      @LocationGetInfo([NamePreference])
      @LocationGetInfo([BookmarksFilename])
      @LocationGetInfo([SametimeServer])
      @LocationGetInfo([UNID])
      http://www.thenorth.com/apblog4.nsf/0/60C5A5C6540A2D648525719F0012BDED
    • Get the current location name
      @LocationGetInfo([FullName])
      @LocationGetInfo([AbbreviatedName])
      Damit erhalten wir Zugriff auf JEDES beliebige Feld in der aktuellen Arbeitsumgebung
    • @GetMachineInfo (8.5.3)
      New @Function to support MachineSpecificPolicy Settings asof Notes / Domino 8.5.3
    • @GetMachineInfo vs. @Environment
      @GetMachineInfo([EnvVariable];"Location");
      Liefert den gewünschten Wert für alle Variablen in der notes.ini zurück
      Egal ob mit „$“ oder ohne
      Kann keine Werte setzen
      @Environment(„Location“)
      Liefert nur Variablen mit „$“ zurück ($DDM_SERVER)
      Kann auch Werte in der notes.ini setzen
    • @CheckFormulaSyntax
      Überprüft Formeln
      Zeigt den Fehler konkret an
    • @CheckFormulaSyntax (LotusScript)
      Verwendet LotusScript EVALUATE
      DEMO - CheckFormula
    • @BusinessDays
      Ermittelt die Anzahl von Werktagen in einem Datumsbereich
      Bestimmte Tage können als Werktage ausgeschlossen werden
      Ebenso lassen sich Feiertage als Werktage ausschließen
      Beispiel: Der Wert eines Items soll auf einen Wert @Today + 3 Tage gesetzt werden.
      Dabei sollen die Wochenenden und bestimmte Datumswerte nicht als Werktage gelten.
      @BusinessDays wird in XPages nicht unterstützt
    • @BusinessDays (LS)
      Evaluate zur Einbindung von @BusinessDays in LS
    • @DbLookup + [FailSilent]
      Keine Fehlermeldung, wenn keine Entsprechung in der Ansicht gefunden wird
      @DbLookup(""; ""; "All"; Source; 2;[FailSilent])
    • [ReturnDocumentUniqueID]
      Gibt die DocumentUNID eines @DBLookup Ergebnisses zurück
      @DbLookup(""; ""; "All"; “test”; 1; [FailSilent]:[ReturnDocumentUniqueID]);
      Macht eine zusätzlicheAnsichtmit einer Spaltenformel@Text(@DocumentUniqueID) überflüssig
    • @ConfigFile
      Wo ist die notes.ini?
      @Prompt([OK];“notes.ini path“;@configfile)
      Notes.ini bearbeiten
      @Command([Execute];"notepad"; @configfile)
    • Programmatic Use
      Wozu ist die Eigenschaft „Programmatic Use“ da?
      Keine Redundanz komplizierterSpaltenformeln. Das Ergebnis einer Berechnung kann in einer anderen Spalte verwendet werden
      Andre Guirard  http://www-10.lotus.com/ldd/ddwiki.nsf/dx/colprognames.htm
    • Permutation Comparison In HideFormulas
      Element nicht anzeigen, wenn User nicht mindestens eine der Rollen hat.
      @IsNotMember("[GloAdmin]"; @UserRoles) & @IsNotMember("[GloEditor]"; @UserRoles)
      Läßt sich kürzen auf:
      @IsNotMember("[GloAdmin]" : "[GloEditor]"; @UserRoles)
      Noch kürzer
      !("[GloAdmin]" : "[GloEditor]" *= @UserRoles)
    • Get Rules From Users Mailfile
      User mögen Regeln, aber nicht unsere.
      User erstellen Regel, viele, sehr viele Regeln.
      Aber welche Regeln haben die User denn erstellt?
      http://www.eknori.de/2007-02-13/get-rules-from-users-mailfile/
    • Mail Rules Extended
      Regelnhabenstarre, vorgegebeneBedingungen
    • Mail Rules Extended
      Der Client speichert die Regeln im Kalenderprofil
      Auf dem Server werden die Regeln in “mailrule” Dokumenten gespeichert
    • Mail Rules Extended
      Mehr Möglichkeiten bei der Regelerstellung
      Erfordert Änderung an names.nsf
      Kein grosser Aufwand beim Upgrade
    • Tweak Auto-Populated Groups
      EinfacheErweiterung in names.nsf
      Create a new subform
      Create a new field on the subform ( SelectionCriteria, Text, Editable )
      Give it the name Custom and an alias starting with $AutoPopulate followed by a number of your choice ( i.e. 9999)
      Save the subform
      http://www.eknori.de/2008-06-10/tweak-the-auto-populated-groups-feature-in-domino-85/
    • How to get rid of $UpdatedBy?
      Unter Umständen sollen die Bearbeiter eines Dokuments nicht sichtbar sein.
    • @AdminDelegateMailFile
      Erstellt Administrationsprocess
      Unterzeichner muss Owner der Maildatei sein (!)
    • Custom Administration Process
      Fehlende Funktionen hinzufügen
      Z.B. : User aus Gruppe entfernen
      Verlagerung administrativer Aufgaben in den Servicedesk
      NotesAdministrationProcessclass
      Seit Release 6
      AddGroupMembersmethod
      aber keine RemoveGroupMembersmethod
    • Custom Administration Process
    • Custom Administration Process
      admin4.nsf anpassen ( neue Maske )
    • Custom Administration Process
      admin4.nsf anpassen ( Ansichten )
      Neue Ansicht erstellen oder
      Spalte „Action“ anpassen
    • Zip and Unzip
      Verwendung von ZIP/UNZIP mitLotusScript
      Kostenlos
      http://www.vcode.no/vcode.nsf/downloads/VCZIPSUP
    • Auto-Zip Mail Attachments
      Anhänge werden beim Versenden automatisch gepackt
      Genaue Beschreibung der Anpassungen im Lotus Notes & Domino Wiki
      http://www-10.lotus.com/ldd/dominowiki.nsf/page.xsp?documentId=7963EB58BAD528FB852577AE0062A72A&action=openDocument&mode=original
    • XLS ohne Excel erstellen
      Reports sollen auf einem Server erstellt werden, auf dem kein Excel installiert ist. ( Linux )
      http://jxls.sourceforge.net/index.html
      Support for Excel 2007 OOXML (.xlsx) fileformat
    • XLS ohne Excel erstellen
    • Lotus SymphonyToolkit
      %Include"symphonylsx.lss„
      OpenNTF.org Contacts Experience
      http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=OpenNTF.org%20Contacts%20Experience
      MailMerge
      Letter
      Export Contacts
      Symphony
      MS Office
    • Wurde das Dokument gelesen?
      doc.GetRead([username])
      Ab Release 8.5
      Gibt „true“ zurück, wenn das Dokument vom aktuellen User gelesen wurde
      Wird ein Username angegeben, wird der Lesestatus dieses Users zurückgegeben
    • @Midas Lookups
      Ben Langhinrichs ( geniisoftware )
      Auslesen von Daten aus RichText
      Syntax wie @DBColumn und @DBLookup
      Free download: http://www.geniisoft.com/showcase.nsf/MidasLookups
    • @Midas Lookups
      Erweiterte Möglichkeiten
      Beispiel: Sortierte Ausgabe aller Listenpunkte
    • Ist RichText Item leer??
      @Length(@Text(body))-1
      @Attachments
      rtitem.ValueLength
      rtitem.EmbeddedObjects
      Attachments OK
      Aber: Doclinks, Inline Images, Hotspots (Button)
    • Ist RichText Item leer?
      DEMO - Is Item empty?
    • Arbeiten mit RichText
      C/C++ API oder LS2CAPI
      NormundsKalbernzin
      LotusScript to Lotus C API Programming Guide ( ls2capi.com )
      Lee Powell
      LotusScriptor'sPlain Simple Guide to the Lotus Notes C++ API
      Download : http://www.eknori.de/downloads/capibook.pdf
      EthannCastell
      Gettingstartedwith the C-API
      Controlrichtextcontentwithprecisionusing the C-API
      The View, 09 / 11 , 2007
    • Einordnung der C-API
      Lotus Script
      Visual Basic (COM)
      JAVA
      JNI
      Notes Object Interface (NOI)
      C++ API
      Notes Core ( C API )
      Betriebssystem
    • Ist RichText Item leer?
      LS2CAPI to the rescue!
      Leeres RTI besitzt nur einen CDRecord von Typ Text
    • Header / Footer
      Erstellen / Ändern
      Anwendungseigenschaften ( global )
      Dokumenteneigenschaften
      Keine Möglichkeit über @Formel oder LotusScript
    • Header / Footer
      Informationen sind in RichText item gespeichert
    • Header / Footer
      LotusScript Library / LS2CAPI
    • Inline Images
      Auf Inline Images kann nicht über die embedded objects Eigenschaft zugegriffen werden
      Inline Images werden z.B. nicht bei DAOS berücksichtigt.
      Es gibt keine Methoden, um Inline Images mit LotusScript so umzuwandeln, daß sie als Anhang im Dokument gespeichert werden.
    • Inline Images
      Wie ist ein Inline Image gespeichert ?
    • Inline Images
      Andre Guirard
      http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=LotusScript%20Gold%20Collection
    • Inline Images
      rtLib: framework of LotusScript classes to work with Notes Rich Text on 32-bit versions of Domino on AIX, Solaris (SPARC), Linux, MacOS, OS X (currently PowerPC only) and Windows.
      NormundsKalnberzins
      http://www.rtlib.com/
    • ReplaceInline Image
      Bilder, die aus der Zwischenablage in ein Dokument eingefügt werden, werden bei DAOS nicht berücksichtigt.
      Methoden zum Umwandeln in ein Attachment gibt es in Lotus Notes nicht.
      Funktion muss folgende Voraussetzungen erfüllen
      Umwandeln des inline image in ein Attachment
      Ersetzen des inline image durch das Attachment
      Beibehalten der Position
    • ReplaceInline Image
      Das Attachment wird an die
      Position des Inline Image gesetzt.
    • ReplaceInline Images
    • Insert RichtextintoRichtext
      notesRichTextRange.FindAndReplace( target$ , replacement$ , [ options& ] )
      Damit lässt sich aber nur Text innerhalb von RichText finden und ersetzen
      Für das Einfügen eines kompletten RichText Items oder Teile davon an eine definierte Stelle in einem anderen RichText Item gibt es keine Methode.
    • Insert RichtextintoRichtext
    • Insert RichtextintoRichtext
    • JW Player - Mediaplayer
      JW Player: Ein paar Zeilen Code für einen Mediaplayer für Flash und HTML5 support
      Skins, Plugins und Playlists
      http://www.longtailvideo.com/players/
    • JW Player - Mediaplayer
    • jQuery
      freie, umfangreiche JavaScript-Klassenbibliothek, welche komfortable Funktionen zur DOM-Manipulation und -Navigation zur Verfügung stellt
      http://www.reizkraft.com/content/die-43-sch%C3%B6nsten-jquery-plugins-f%C3%BCr-webdesign
      Animatedgifcreatedwith http://picasion.com/
    • UIZE – JavaScript Framework
      „You Eyes“
      OpenSource, MIT oder GNU GPL
      Unterstützung von …
      Widgets,
      Ajax,
      DOM,
      Templates

      Mobile Devices
      http://www.uize.com/
    • UIZE – JavaScript Framework
      Sample : Resizer
    • Xpages und @Formula
      Nur 97 der 274 @Formeln können in SSJS verwendet werden
      http://www-10.lotus.com/ldd/ddwiki.nsf/dx/List_of_Formula_Not_Supported_In_XPages
      Michael Gollmick hat ein paar Formeln umgesetzt
      @WebDBName
      http://blog.gollmick.de/mgoblog.nsf/40f2c735481f54dd80256d650047636c/0687660450ad65bdc125754a008357ce?OpenDocument
      @URLEncode, @URLDecode
      http://blog.gollmick.de/mgoblog.nsf/dx/some-more-Functions-for-XPages-URLEncode-URLDecode.htm
    • Q + A
      Mail: eknori@eknori.de
      Blog: http://www.eknori.de
      Sametime: Bleedyellow.com
      Twitter: Eknori