dnug35 ak-dev.071111-cookbook

Post on 08-Dec-2014

1.421 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

In loser Folge werden Tipps und Tricks aus allen Bereichen der Programmierung in Lotus Notes/Domino vorgestellt. @Formula, LotusScript, XPages, LS2CApi.Wie konfiguriere ich den Domino Designer?Welche kostenlosen Tools können mir meine Arbeit erleichtern?Warum ist es wichtig, richtig zu "dimmen"?Richtext kann mit LotusScript im Backend nicht in Richtext eingefügt werden. Oder etwa doch? @Transform / @Sort. Was kann man denn damit machen?8.5.3, was gibt es Neues im Bereich @Formula / LotusScript.Zielgruppe sind alle, die sich mit Applikationsentwicklung beschäftigen. Anfänger und "alte Hasen"; es ist für jeden etwas dabei.Kenntnisse: Grundlagen der Entwicklung in Lotus Notes/Domino

TRANSCRIPT

DNUG Konferenz: Wie werden wir morgen arbeiten? Social Business becomes real.

Wie werden wir morgen arbeiten? The Lotus Code Cookbook

7. bis 9. November 2011 Welcome Kongresshotel Bamberg

Ulrich Krause, is@web, industrial services AG

35. DNUG Konferenz

Mit freundlicher Unterstützung von:

DNUG Konferenz: Wie werden wir morgen arbeiten?

Lotus Notes / Domino Administrator & Entwickler seit 1993 Business Application Developer

bei is@web, Niederlassung Ratingen OpenNTF http://openntf.org

• !!HELP!!, Cebulon, Trigger Happy• diverse XPages Custom Controls

IBM Champion 2011• https://www-304.ibm.com/connections/blogs/socialbusiness/entry/

announcing_the_2011_ibm_champions_for_collaboration_solutions4?lang=de

Blog http://www.eknori.de Notes Forum (http://www.atnotes.de)

About: Ulrich Krause

DNUG Konferenz: Wie werden wir morgen arbeiten?

Allgemeines Optionen des Designers Tools @Formeln LotusScript Bearbeitung von Richtext ( C-Api / LS2CAPI ) Javascript (Frameworks) XPages

Agenda

DNUG Konferenz: Wie werden wir morgen arbeiten?

Alle Sprachen verwenden die gleichen Kernfunktionen Bei gleicher Funktionalität sind Formeln performanter Nicht alle Formeln können in XPages verwendet werden.

• Nur 97 der insgesamt 274 Formeln• http://www-10.lotus.com/ldd/ddwiki.nsf/dx/List_of_Formula_Not_Supported_In_XPages

Warum @Formeln verwenden ?

LotusScript Java @Formula

ByteCode Interpreter FormulaEngine

Notes Core API

DNUG Konferenz: Wie werden wir morgen arbeiten?

Wichtigste Codezeile in LotusScript Option Declare “zwingt” zum Deklarieren aller Variablen und

erspart das Beseitigen von schwer auffindbaren Fehlern Alle Fehler sind runtime Fehler

Option Declare

DNUG Konferenz: Wie werden wir morgen arbeiten?

Ohne Option Declare

Mit Option Declare

Option Declare

DNUG Konferenz: Wie werden wir morgen arbeiten?

Der wichtigste Grund, warum wir „Option Declare“ verwenden MÜSSEN, ist …

Option Declare

DNUG Konferenz: Wie werden wir morgen arbeiten?

Every time you don‘t use „Option Declare“, God will kill a kitten !!

Option Declare

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

DNUG Konferenz: Wie werden wir morgen arbeiten?

Ausführungszeiten messen mit Getthreadinfo Wird z.B. ein Integerwert in einem Variant gespeichert, so

muss Notes intern eine Typumwandlung vornehmen. Das kostet Zeit !!

Dim Statement und Performance

DNUG Konferenz: Wie werden wir morgen arbeiten?

16.260 Dokumente 10 Testläufe / Methode Tabelle zeigt die Durchschnittswerte

GetNextDocument vs. GetNthDocument

DNUG Konferenz: Wie werden wir morgen arbeiten?

113.610 Dokumente 4 Testläufe / Methode Tabelle zeigt die Durchschnittswerte

GetNextDocument vs. GetNthDocument

DNUG Konferenz: Wie werden wir morgen arbeiten?

Script / Comment Templates

DNUG Konferenz: Wie werden wir morgen arbeiten?

Fonts / Colors

Individuelle Einstellungen für bessere Lesbarkeit

http://web.nickshanks.com/fonts/microsoft-core-web-fonts

DNUG Konferenz: Wie werden wir morgen arbeiten?

Zeilennummern einblenden

DNUG Konferenz: Wie werden wir morgen arbeiten?

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.

Soft-Coded Field Names

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

Logging

DNUG Konferenz: Wie werden wir morgen arbeiten?

OpenLog

DNUG Konferenz: Wie werden wir morgen arbeiten?

Domino Designer extension Sucht in einer oder meheren Anwendungen Unterstützt

• Java, • Javascript, • Lotusscript,• @Formula,• Xpages

Source Sniffer

http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=Source%20Sniffer

DNUG Konferenz: Wie werden wir morgen arbeiten?

NotesHound

http://domino-80.prominic.net/A55BE4/NotesHoundWeb.nsf/webpages/index.html

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

NotesView.AutoUpdate = false

DNUG Konferenz: Wie werden wir morgen arbeiten?

Neu ab 8.5.1 Nur in Ansichtsspalten zu verwenden Option „Maintain folder unread

information“ muß aktiviert sein Option „ Don't maintain

Unread marks“ darf nicht aktiviert sein“

@WhichFolders

DNUG Konferenz: Wie werden wir morgen arbeiten?

db.FolderReferencesEnabled = True $FolderInfo und $FolderRefInfo

– Ansichten können aus der Mailschablone kopiert werden

@WhichFolders in LotusScript I

DNUG Konferenz: Wie werden wir morgen arbeiten?

CreateViewNavFrom Keine zusätzlichen Designelemente erforderlich Aber langsam bei einer großen Ordneranzahl

@WhichFolders in LotusScript II

DNUG Konferenz: Wie werden wir morgen arbeiten?

Wie @WhichFolders mit zusätzlichen Möglichkeiten, um die Ordnereigenschaften eines Dokuments zu ändern.

Uncheck „Don‘t maintain unread marks“

@Command( [DiscoverFolders];title)

DNUG Konferenz: Wie werden wir morgen arbeiten?

Seit Version 6 Entspricht LotusScript statement ForAll 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

DNUG Konferenz: Wie werden wir morgen arbeiten?

Names.nsf - People\By Client Version Unübersichtlich, da alle

Versionen dargestellt werden.

@Transform (Sample)

DNUG Konferenz: Wie werden wir morgen arbeiten?

Mit wenigen Handgriffen Ordnung schaffen

People\By Client Version (new)

DNUG Konferenz: Wie werden wir morgen arbeiten?

@Transform + @DocFields

http://www.eknori.de/2011-07-23/formula-magic/

DNUG Konferenz: Wie werden wir morgen arbeiten?

Seit Version 6 Lt. Designer Hilfe nur mit @Transform zu verwendbar ( „not

valid in other context“ ) Funktioniert aber z.B auch in View Selection

@Nothing

DNUG Konferenz: Wie werden wir morgen arbeiten?

Sortiert eine Liste– [ACCENTSENSITIVE]– [ACCENTINSENSITIVE]– [ASCENDING]– [CASESENSITIVE]– [CASEINSENSITIVE]– [CUSTOMSORT]– [DESCENDING]– [PITCHSENSITIVE]– [PITCHINSENSITiVE]

Dies lässt sich auch kombinieren– [ASCENDING]:[CASESENSITIVE]

@Sort

DNUG Konferenz: Wie werden wir morgen arbeiten?

@Sort kann aber noch mehr – [CustomSort]

@Sort

DNUG Konferenz: Wie werden wir morgen arbeiten?

Ändert den Kontext einer Formel Nachfolgende Befehle werden

im neuen Kontext ausgeführt

@UpdateFormulaContext

DNUG Konferenz: Wie werden wir morgen arbeiten?

@LocationGetInfo• @LocationGetInfo([HomeServer])• @LocationGetInfo([InternetMailAddress])• @LocationGetInfo([NamePreference])• @LocationGetInfo([BookmarksFilename])• @LocationGetInfo([SametimeServer])

@LocationGetInfo([UNID])• http://www.thenorth.com/apblog4.nsf/0/60C5A5C6540A2D648525719F0012BDE

Get the current location name

DNUG Konferenz: Wie werden wir morgen arbeiten?

@LocationGetInfo([FullName])• @LocationGetInfo([AbbreviatedName])

Damit erhalten wir Zugriff auf JEDES beliebige Feld in der aktuellen Arbeitsumgebung

Get the current location name

DNUG Konferenz: Wie werden wir morgen arbeiten?

New @Function to support Machine Specific Policy Settings as of Notes / Domino 8.5.3

@GetMachineInfo (8.5.3)

DNUG Konferenz: Wie werden wir morgen arbeiten?

@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

@GetMachineInfo vs. @Environment

DNUG Konferenz: Wie werden wir morgen arbeiten?

Überprüft Formeln

@CheckFormulaSyntax

DNUG Konferenz: Wie werden wir morgen arbeiten?

@CheckFormulaSyntax (LotusScript)

Verwendet LotusScript EVALUATE

DNUG Konferenz: Wie werden wir morgen arbeiten?

Schade

Und was macht IBM?

DNUG Konferenz: Wie werden wir morgen arbeiten?

Ermittelt die Anzahl von Werktagen in einem Datumsbereich• Bestimmte Tage können als Werktage ausgeschlossen werden• Ebenso lassen sich Feiertage als Werktage ausschließen

@BusinessDays

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

DNUG Konferenz: Wie werden wir morgen arbeiten?

Evaluate zur Einbindung von @BusinessDays in LS

@BusinessDays (LS)

DNUG Konferenz: Wie werden wir morgen arbeiten?

Keine Fehlermeldung, wenn keine Entsprechung in der Ansicht gefunden wird

@DbLookup(""; ""; "All"; Source; 2;[FailSilent])

@DbLookup + [FailSilent]

DNUG Konferenz: Wie werden wir morgen arbeiten?

Gibt die DocumentUNID eines @DBLookup Ergebnisses zurück

@DbLookup(""; ""; "All"; “test”; 1; [FailSilent]:[ReturnDocumentUniqueID]);

Macht eine zusätzliche Ansicht mit einer Spaltenformel @Text(@DocumentUniqueID) überflüssig

[ReturnDocumentUniqueID]

DNUG Konferenz: Wie werden wir morgen arbeiten?

Wo ist die notes.ini? • @Prompt([OK];“notes.ini path“;@configfile)

Notes.ini bearbeiten• @Command([Execute];"

@ConfigFile

DNUG Konferenz: Wie werden wir morgen arbeiten?

Wozu ist die Eigenschaft „Programmatic Use“ da?

Keine Redundanz komplizierterSpaltenformeln. Das Ergebnis einer Berechnung kann in einer anderen Spalte verwendet werden

Programmatic Use

DNUG Konferenz: Wie werden wir morgen arbeiten?

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)

Permutation Comparison In Hide Formulas

DNUG Konferenz: Wie werden wir morgen arbeiten?

Regeln haben starre, vorgegebene Bedingungen

Mail Rules Extended

DNUG Konferenz: Wie werden wir morgen arbeiten?

Der Client speichert die Regeln im Kalenderprofil Auf dem Server werden die Regeln in “mailrule”

Dokumenten gespeichert

Mail Rules Extended

DNUG Konferenz: Wie werden wir morgen arbeiten?

Mehr Möglichkeiten bei der Regelerstellung Erfordert Änderung an names.nsf Kein grosser Aufwand beim Upgrade

Mail Rules Extended

DNUG Konferenz: Wie werden wir morgen arbeiten?

Einfache Erweiterung 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

Tweak Auto-Populated Groups

UPDATE 8.5.3 :http://bodek.uwindsor.ca/users/b/bodek/bodekblog.nsf/d6plinks/BFRK-8MRPWN

DNUG Konferenz: Wie werden wir morgen arbeiten?

Unter Umständen sollen die Bearbeiter eines Dokuments nicht sichtbar sein.

How to get rid of $UpdatedBy?

DNUG Konferenz: Wie werden wir morgen arbeiten?

Fehlende Funktionen hinzufügen• Z.B. : User aus Gruppe entfernen

Verlagerung administrativer Aufgaben in den Servicedesk NotesAdministrationProcess class Seit Release 6 AddGroupMembers method aber keine RemoveGroupMembers method

Custom Administration Process

LotusScript Gold Collection (1.3):[*] NotesGroupManager: makes it easy to scan and manage group memberships in public and private address books, including groups with subgroups.

http://www.openntf.org/projects/pmt.nsf/ProjectLookup/LotusScript%20Gold%20Collection

DNUG Konferenz: Wie werden wir morgen arbeiten?

Custom Administration Process

DNUG Konferenz: Wie werden wir morgen arbeiten?

admin4.nsf anpassen

• Neue Ansicht erstellen oder• Spalte „Action“ anpassen

Custom Administration Process

http://www.eknori.de/2007-12-15/delete-group-members-using-the-administration-process/

DNUG Konferenz: Wie werden wir morgen arbeiten?

Verwendung von ZIP/UNZIP mit LotusScript Kostenlos

Zip / UnZip

http://www.vcode.no/vcode.nsf/downloads/VCZIPSUP

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

Auto-Zip Mail Attachments

DNUG Konferenz: Wie werden wir morgen arbeiten?

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) file format

XLS ohne Excel erstellen

DNUG Konferenz: Wie werden wir morgen arbeiten?

XLS ohne Excel erstellen

DNUG Konferenz: Wie werden wir morgen arbeiten?

%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

Lotus Symphony Toolkit

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

Wurde das Dokument gelesen?

DNUG Konferenz: Wie werden wir morgen arbeiten?

Ben Langhinrichs ( genii software ) Auslesen von Daten aus RichText Syntax wie @DBColumn und @DBLookup

@Midas Lookups

Free download: http://www.geniisoft.com/showcase.nsf/MidasLookups

DNUG Konferenz: Wie werden wir morgen arbeiten?

Erweiterte Möglichkeiten Beispiel: Sortierte Ausgabe aller Listenpunkte

@Midas Lookups

DNUG Konferenz: Wie werden wir morgen arbeiten?

@Length(@Text(body))-1

@Attachments

rtitem.ValueLength

rtitem.EmbeddedObjects• Attachments OK• Aber: Doclinks, Inline Images, Hotspots (Button)

Ist RichText Item leer??

DNUG Konferenz: Wie werden wir morgen arbeiten?

Ist RichText Item leer?

DNUG Konferenz: Wie werden wir morgen arbeiten?

C/C++ API oder LS2CAPI Normunds Kalbernzin

• LotusScript to Lotus C API Programming Guide ( ls2capi.com )

Lee Powell• LotusScriptor's Plain Simple Guide to the

Lotus Notes C++ API • Download :

http://www.eknori.de/downloads/capibook.pdf

Ethann Castell• Getting started with the C-API• Control rich text content with precision using the C-API• The View, 09 / 11 , 2007

Arbeiten mit RichText

DNUG Konferenz: Wie werden wir morgen arbeiten?

Einordnung der C-API

Betriebssystem

Notes Object Interface (NOI)

Lotus Script

C++ API

Notes Core ( C API )

Visual Basic (COM)JAVA

JNI

DNUG Konferenz: Wie werden wir morgen arbeiten?

LS2CAPI to the rescue!• Leeres RTI besitzt nur einen CDRecord von Typ Text

Ist RichText Item leer?

DNUG Konferenz: Wie werden wir morgen arbeiten?

Erstellen / Ändern• Anwendungseigenschaften ( global )• Dokumenteneigenschaften

Keine Möglichkeit über @Formel oder LotusScript

Header / Footer

DNUG Konferenz: Wie werden wir morgen arbeiten?

Informationen sind in RichText item gespeichert

Header / Footer

DNUG Konferenz: Wie werden wir morgen arbeiten?

LotusScript Library / LS2CAPI

Header / Footer

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

DNUG Konferenz: Wie werden wir morgen arbeiten?

Wie ist ein Inline Image gespeichert ?

Inline Images

DNUG Konferenz: Wie werden wir morgen arbeiten?

Inline Images

Andre Guirard

http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=LotusScript%20Gold%20Collection

DNUG Konferenz: Wie werden wir morgen arbeiten?

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.

Inline Images

Normunds Kalnberzins http://www.rtlib.com/

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

Replace Inline Image

DNUG Konferenz: Wie werden wir morgen arbeiten?

Replace Inline Image

Das Attachment wird an die Position des Inline Image gesetzt.

DNUG Konferenz: Wie werden wir morgen arbeiten?

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 Richtext into Richtext

DNUG Konferenz: Wie werden wir morgen arbeiten?

Insert Richtext into Richtext

DNUG Konferenz: Wie werden wir morgen arbeiten?

Insert Richtext into Richtext

DNUG Konferenz: Wie werden wir morgen arbeiten?

JW Player: Ein paar Zeilen Code für einen Mediaplayer für Flash und HTML5 support

Skins

JW Player - Mediaplayer

http://www.longtailvideo.com/players/

DNUG Konferenz: Wie werden wir morgen arbeiten?

JW Player - Mediaplayer

DNUG Konferenz: Wie werden wir morgen arbeiten?

freie, umfangreiche JavaScript-Klassenbibliothek, welche komfortable Funktionen zur DOM-Manipulation und -Navigation zur Verfügung stellt

jQuery

http://www.reizkraft.com/content/die-43-sch%C3%B6nsten-jquery-plugins-f%C3%BCr-webdesignAnimated gif created with http://picasion.com/

DNUG Konferenz: Wie werden wir morgen arbeiten?

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

Xpages und @Formula

• Mail: eknori@eknori.de• Blog: http://www.eknori.de• Sametime: bleedyellow.com• Twitter: eknori

Q + A

top related