SlideShare ist ein Scribd-Unternehmen logo
Track 4, Session 5
Add-ons für Client/Designer auf Basis neuer
Java APIs von Lotus Notes® 8.5.1!
Karsten Lehmann | Geschäftsführer Mindoo GmbH
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Agenda
       ●   Einführung

       ●   Lotus Notes mit Java erweitern

       ●   Mehrwert für das klassische Lotus Notes

       ●   Domino Designer mit Java erweitern

       ●   Best Practices

       ●   Q&A




Entwicklercamp 2010     2
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Über uns
       ●   Mindoo ist IBM Business Partner und Notes/Domino Design Partner
       ●   Wir konzentrieren uns auf die „neuen“ Aspekte der IBM Lotus Notes-
           Entwicklung
            ▬   Eclipse/Expeditor-Plugins und Rich-Client-Anwendungen
            ▬   Composite Application Architekturen
            ▬   LiveText Erweiterungen
            ▬   Xpages-Anwendungen
       ●   Karsten Lehmann und Tammo Riedinger
            ▬   Gründer der Mindoo GmbH
            ▬   Seit 2004 Entwickler der Applikation MindPlan® für die Haus Weilgut GmbH,
                Mindmapping und Projekt-Management für Lotus Notes, IBM Award Winner 2008
       ●   Weitere Informationen:
           http://www.mindoo.de




Entwicklercamp 2010        3
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Motivation
       ●   „Notes kann auch das“ - ja, aber wieso so kompliziert?
            ▬   Eclipse Entwickler mussten bisher zu viele Workarounds nutzen, um mit der klassischen Notes
                UI interagieren zu können
            ▬   Man denke nur an “Nutzung der Notes.ini zum Datenaustausch” oder “Seiten öffnen, die sich
                selbst schließen, nur um LotusScript®-Code im QueryClose-Event auszuführen”
            ▬   Es fehlte eine Java-API zur Ansteuerung der Notes-Oberfläche. Der Sinn der neuen APIs ist,
                diese Lücke zu füllen und den Entwicklern damit das Leben zu erleichtern
       ●   Wir waren an den Diskussionen über die Features der neuen „Notes
           and Designer extensibility APIs“ beteiligt
            ▬   Diskussionen mit IBM dev über API-Entwürfe bereits auf der Lotusphere 2009 und später in
                Konferenzschaltungen
            ▬   Feedback zum Design / Berichte über Tests im Zuge des Design Partner Programms
       ●   Wie immer bei ersten Releases gibt es noch Raum für Verbesserungen
            ▬   Wir denken jedoch, dass diese APIs schon ein riesiger Schritt vorwärts sind




Entwicklercamp 2010        4
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Achtung
       ●   Die hier gezeigten Java APIs funktionieren nicht in Notes-Agenten.
           Dies is reine Eclipse-Entwicklung!

                            Ok, ich
                           bin raus!




       ●   Bitte gehen Sie noch nicht, falls Sie nur mit LotusScript entwickeln.
           Wir haben später auch noch etwas für Sie!

Entwicklercamp 2010    5
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Achtung
       ●   Wir können hier nicht alle APIs im Detail betrachten!
            ▬   Wir werden uns stattdessen auf die wichtigsten Neuerungen konzentrieren:
                die neue Java UI API und die Designer Java-API
       ●   Wir wollen Ihnen einen guten Eindruck vermitteln, was sie wirklich mit
           den Notes 8.5.1 APIs tun können
            ▬   Hoffentlich verlassen Sie diesen Vortrag bereits mit einigen eigenen Idee
            ▬   Wir haben ca. 10 Demos für Sie erstellt!
       ●   Wir versuchen Sie heute nicht mit Code zu Tode zu langweilen!
       ●   Verfolgen Sie stattdessen die kommende Serie von Artikeln mit Details
           zu den Demos in unserem Blog:
           http://blog.mindoo.com




Entwicklercamp 2010         6
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Startvorbereitungen
       ●   Die APIs und Demos basieren auf
            ▬   Eclipse 3.4.2
            ▬   Expeditor Toolkit 6.2.1
            ▬   IBM Lotus Notes 8.5.1
       ●   Installieren Sie Expeditor in Eclipse und setzen Sie Lotus Notes 8.5.1 als
           Ziel-Plattform

       ●   Erstellen Sie ein Plugin-Projekt für Ihren eigenen Code
       ●   Für die UI API müssen Sie die folgende Abhängigkeit definieren:
            ▬   com.ibm.notes.java.ui
       ●   Für die DDE API müssen Sie die folgenden Abhängigkeiten definieren:
            ▬   com.ibm.designer.domino.ui.commons
            ▬   com.ibm.designer.domino.ide.resources




Entwicklercamp 2010         7
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Agenda
       ●   Einführung

       ●   Lotus Notes mit Java erweitern

       ●   Mehrwert für das klassische Lotus Notes

       ●   Domino Designer mit Java erweitern

       ●   Best Practices

       ●   Q&A




Entwicklercamp 2010     8
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Java UI API – eine grobe Übersicht
       ●   API ist neu in 8.5.1
            ▬   Nicht supportete Vorschau bereits verfügbar in 8.5
       ●   Verbessert die Integration zwischen Eclipse und dem klassischen Lotus
           Notes Client
            ▬   Eclipse Plugins können endlich Informationen über den Zustand von Formularen und Ansichten
                des klassischen Clients bekommen
            ▬   Neue Wege der Interaktion dieser beiden Welten
       ●   Bestehende Funktionalität lässt sich nun einfacher nutzen
            ▬   Öffnen von Design-Elementen
            ▬   Drucken von Dokumenten und Ansichten aus Eclipse heraus
            ▬   Erstellen neuer Dokumente und Vorbesetzen von Werten
            ▬   Temporäre Dokumente, um Daten zu speichern und zu übertragen
            ▬   Ausführen von Notes-Code in einem Hintergrund-Thread inklusive Speicher-Management
                (NotesSessionJob)




Entwicklercamp 2010         9
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Java UI API – eine grobe Übersicht
       ●   Ergänzt neue Funktionalitäten und verkleinert die Lücke zwischen
           Eclipse und dem klassischen Lotus Notes client
            ▬   Lesen/Modifizieren von Dokumenten-Inhalt im Bearbeiten-Modus
            ▬   Document Listener (Bearbeiten-Modus an/aus, Änderungen und Schließen von Dokumenten
                verfolgen)
            ▬   Eclipse-Selection für fokussierte Felder und neue noch nicht gespeicherte Dokumente
            ▬   Datenbank zu Workspace hinzufügen
            ▬   Eingabe-Methoden von NotesUIWorkspace, z.B. um Datenbanken auszuwählen
            ▬   Viele Eclipse Property Tester (eine Art "hide when" für Eclipse-Elemente wie z.B. Actions)
            ▬   LotusScript-Agenten in UI-Thread ausführen (es können Dialoge angezeigt werden in den
                Agenten), Daten können bi-direktional übergeben und es können Callbacks installiert werden




Entwicklercamp 2010        10
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Wo ist die Dokumentation?




Entwicklercamp 2010   11
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Klein anfangen – Ihr erstes Beispiel
       ●   Toolbar-Aktion zum Ändern eines Feldes in einem geöffneten Formular
       ●   Nutzen Sie diesen Code in einer standard Eclipse Toolbar-Aktion:

           NotesUIWorkspace ws = new NotesUIWorkspace();
           NotesUIDocument uidoc = ws.getCurrentDocument();
           if (uidoc != null) {
              NotesUIField field = uidoc.getField("Subject");
              if (field != null)
                 field.setText("Hello World!");
           }




Entwicklercamp 2010   12
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Klein anfangen – Ihr erstes Beispiel
       ●   Für Felder in Backend-Dokumenten:

           NotesUIWorkspace ws = new NotesUIWorkspace();
           NotesUIDocument uidoc = ws.getCurrentDocument();
           if (uidoc != null) {
              NotesBEDocument beDoc = uidoc.getBEDocument();
              String oldValue = beDoc.getItemString("Flag");
              // do something here
              beDoc.setItemValue("Flag", "1");
              //optional to see your changes in the UI:
              uidoc.reload();
           }

       ●   Kein voller Zugriff auf das Dokument durch technische Restriktionen

Entwicklercamp 2010   13
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




                                     Demo
              ●   Mit Eclipse-Aktionen auf ein UI-Dokument zugreifen und
                  dieses modifizieren:
                   ▬  Alternativer Address Picker für Mail-Adressaten
                   ▬  Ausfüllhilfe für Felder




Entwicklercamp 2010   14
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1


      Tiefer einsteigen -
      NotesUIWorkspace erkunden
       ●   Ein neues Dokument mit vorbesetzten Feldern erstellen


           NotesUIWorkspace ws = new NotesUIWorkspace();
           NotesDatabaseData dbData =
              new NotesDatabaseData("Server/Org", "main/jdoe.nsf");
           NotesFormData formData =
              new NotesFormData(dbData, "Memo");
           formData.addComposeItem("SendTo", "Peter Smith/Org");

           ws.composeDocument(formData);




Entwicklercamp 2010   15
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1


      Tiefer einsteigen -
      NotesUIWorkspace erkunden
       ●   Daten-Klassen werden in der API genutzt, um Daten zwischen Notes-
           Sessions im Speicher zu halten
       ●   Daten können sicher zwischen API-Aufrufen übergeben und lokal
           gesichert werden
       ●   In einigen Fällen fehlen einige Daten-Werte (z.B. der Pfad zu einer
           Datenbank)
            ▬   Ist eine technische Beschränkung der API
            ▬   Es können dann „open“-Methoden genutzt werden, um diese Daten zu laden
            ▬   z.B. NotesDatabaseData.open(Session)
                                                NotesDatabaseData


                     NotesFormData              NotesFramesetData            NotesPageData



                  NotesDocumentData          NotesDocumentKeyData            NotesViewData



Entwicklercamp 2010        16
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1


      Tiefer einsteigen -
      NotesUIWorkspace erkunden
       ●   Datenbank zum Workspace hinzufügen


           NotesUIWorkspace ws = new NotesUIWorkspace();
           NotesDatabaseData dbData =
              new NotesDatabaseData("Server/Org", "path/db.nsf");
           ws.addDatabase(dbData);


       ●   Wenn eine Datenbank bereits auf dem Workspace existiert, wird Ihre
           Kachel fokussiert




Entwicklercamp 2010   17
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




                                       Demo
                      ●   Erstellung von Dokumenten mit vorbesetzten Feldern
                      ●   Bookmark/Workspace Add-on




Entwicklercamp 2010       18
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1


      Tiefer einsteigen -
      Agent in der UI aufrufen
       ●   Bisher konnten LotusScript-Agenten nur im Backend ausgeführt
           werden
            ▬   Keine Möglichkeit, UI-Änderungen von einem Agenten aus durchzuführen
       ●   Neuheit in der API in 8.5.1
            ▬   Neue Funktion, um einen Agent in der Notes UI auszuführen
            ▬   z.B. um auf das aktuelle Dokument/die aktuelle Ansicht zuzugreifen und Dialoge anzuzeigen
            ▬   Man kann sogar Agenten anderer Datenbanken ausführen!
       ●   Nützlich für Funktionen, die bisher nicht Teil der API sind
            ▬   Code in einen Lotusscript-Agenten schreiben
            ▬   NotesUIWorkspace.runAgent aufrufen
            ▬   Callback-Listener nutzen, um bei Abschluss des Agenten benachrichtigt zu werden
            ▬   Daten-Austausch zwischen Eclipse und LotusScript




Entwicklercamp 2010        19
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Verbesserte Eclipse-Selektion
       ●   In 8.5: Eclipse-Selektion begrenzt auf bereits gespeicherte Dokumente
           aus Ansichten
            ▬   Es wurden hauptsächlich Notes-URLs übergeben
            ▬   Kein Zugriff auf "in-memory"-Dokumente
       ●   In 8.5.1: Informationen auch über noch nicht gespeicherte Dokumente
           und sogar fokussierte Felder eines Formulars
            ▬   Es kann verfolgt werden, was der Nutzer editiert
            ▬   Einführung von Klassen, die mehr Informationen liefern als nur die Notes-URL (z.B.
                NotesUIElement, NotesUIDocument und NotesUIField)
            ▬   Nutzt standard Eclipse-Konzept (Adapter), um zusätzliche Daten zu liefern!




Entwicklercamp 2010        20
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Verbesserte Eclipse-Selektion
       ●   Verwendung von IAdaptable auf Selektionen

           // iterate over a selection and print the form-name
           for(Iterator<?> i=((IStructuredSelection)
             selection).iterator(); i.hasNext(); ) {
              Object item=i.next();
              if (item instanceof IAdaptable) {
                 NotesUIDocument doc=(NotesUIDocument)((IAdaptable)
                   item).getAdapter(NotesUIDocument.class);

                   if (doc!=null)
                      System.out.println(doc.getForm());
               }
           }


Entwicklercamp 2010   21
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




                                        Demo
                      ●    Universelles kontext-basiertes Online Hilfe-System
                      ●    Aufruf von Agenten von Eclipse und Transfer von
                           Daten




Entwicklercamp 2010       22
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Agenda
       ●   Einführung

       ●   Lotus Notes mit Java erweitern

       ●   Mehrwert für das klassische Lotus Notes

       ●   Domino Designer mit Java erweitern

       ●   Best Practices

       ●   Q&A




Entwicklercamp 2010     23
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Grenzen der API
       ●   Klingt toll! Und wo ist der Haken?
            ▬   Wir wollen nicht nur zeigen, was möglich ist, sondern auch was nicht möglich ist
       ●   Nur ein kleiner Teil der LotusScript API
            ▬   Neue Features werden mit künftigen Releases integriert
       ●   Event Listener blockieren nicht bei Form/View-Events
            ▬   Kein Ersatz für LotusScript Events, z.B. QuerySave
       ●   Richtung nur Eclipse => klassisches Notes
            ▬   Hilft nur der Eclipse-Welt, keine Verbesserungen für die Welt des klassischen Clients




       Was können wir tun, um beide Welten enger zusammen zu bringen?
            ▬   Wie können wir Eclipse-Funktionen von LotusScript aus nutzen?
            ▬   Drei mögliche Lösungen, um Eclipse vom klassischen Notes Client aus anzusprechen




Entwicklercamp 2010        24
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Verbindung beider Welten
       Lösung 1: Der Property Broker

       ●   Einen String von LotusScript zum Property Broker senden
       ●   Eclipse-Plugin ist beim Broker registriert und empfängt den String
       ●   Asynchrone Lösung
            ▬   Kein direkte Antwort, nur mittels Composite Application Wire
       ●   Arbeitet lediglich in einer Composite Application




                   NSF                          Property                  Eclipse
                Komponente                       Broker                 Komponente




Entwicklercamp 2010        25
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Verbindung beider Welten
       Lösung 2: Erstelle eigenen URL Handler

       ●   Undokumentiertes / nicht supportetes Feature seit 8.5
       ●   Eigenen URL-Typ registrieren z.B. „myprotocol://”
       ●   Java Handler wird aufgerufen, wenn eine URL geöffnet werden soll
            ▬   Funktioniert für NotesUIWorkspace.URLOpen, @UrlOpen, Links im Richtext und der Adress-
                Zeile
            ▬   Interessant auch für andere Einsatzzwecke
       ●   Länge der URL ist begrenzt
            ▬   Mehrfach aufrufen für größere Datenmengen
       ●   Asynchrone Lösung
            ▬   Arbeitet jedoch außerhalb von Composite Application




Entwicklercamp 2010        26
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




                                        Demo
                           ●   Eigener URL Handler in Lotus Notes




Entwicklercamp 2010   27
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Verbindung beider Welten
       Lösung 3: Eigene Brücke bauen!
       Idee:

       ●   Zwei JVMs: Eclipse JVM und klassische Notes JVM
            ▬   Keine direkte Verbindung zwischen Eclipse-Plugins und Notes-Agenten
       ●   Benutze lokale Netzwerk-Kommunikation zwischen beiden
            ▬   Öffne einen Server-Port in Eclipse, verbinde darauf von der klassischen JVM
       ●   Benutze eigenes Protokoll oder Industrie-Standard wie z.B. Java RMI
            ▬   Und rufe remote Eclipse-Plugin-Code vom klassischen Notes auf
       ●   Optional: Nutze LS2J für den Zugriff auf die Remote-API in LotusScript




Entwicklercamp 2010        28
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Verbindung beider Welten
       Lösung 3: Eigene Brücke erstellen!

       ●   Das Resultat ist beeindruckend
            ▬    Kombination von LotusScript und Eclipse-Plugins eröffnet neue Entwurfs-Muster
            ▬    Z.B. Hintergrund-Threads für lang andauernden LotusScript-Code oder
                 Erzeugung von Eclipse-Reitern und Layouts von LotusScript on-the-fly

                                                                   Eclipse/Expeditor


                Eclipse    TCP/IP                    LS2J
                                         Notes
                 JVM -                                          Lotus-
                                          JVM
                Plugin                                          Script
                                         Client
                Server


                                                    klassisches Notes



Entwicklercamp 2010         29
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




                                     Demo
                  ●   Multi-Threading in LotusScript-Anwendung
                  ●   LotusScript-Zugriff auf die Eclipse-Workbench
                  ●   LotusScript erstellt neue Eclipse-Reiter-Layouts on-
                      the-fly (Eclipse Perspective)




Entwicklercamp 2010   30
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Agenda
       ●   Einführung

       ●   Lotus Notes mit Java erweitern

       ●   Mehrwert für das klassische Lotus Notes

       ●   Domino Designer mit Java erweitern

       ●   Best Practices

       ●   Q&A




Entwicklercamp 2010     31
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Domino Designer Extensibility API
       ●   Die DDE API ermöglicht Programmierung von Java Erweiterungen der
           Domino Designer IDE
            ▬   Haupteinsatzzweck:
            ▬   Reagieren auf Nutzer-Selektion -
                z.B. Anzeige zusätzlicher Daten in eigenen Ansichts-Bereichen (Eclipse Views)
            ▬   Automatische Verarbeitung von Daten anbieten, z.B. Flags für alle selektierten Bilder setzen
                oder Code-Generatoren, die Design-Elemente erzeugen
       ●   Einführung neuer Funktionalität
            ▬   Design-Element Informationen der aktuellen Eclipse-Selektion
            ▬   Basis-Daten von Design-Elementen oder Datenbanken setzen
            ▬   Aktualisieren von Projekten/einzelnen Design-Elementen nach einer Änderung im Hintergrund (z.B.
                durch einen DXL-Import)
            ▬   Datenbanken im DDE-Navigator öffnen
       ●   Zusätzliche Erweiterbarkeit gewinnen durch Nutzung von
           Standard Eclipse APIs
            ▬   Ein NSF-Projekt ist nur eine Erweiterung von Eclipse IProject




Entwicklercamp 2010        32
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1


      Eclipse-Selektion in DDE API
      Objekten umwandeln
       ●   Konvertiert ein Eclipse IProject in ein DesignerProject
            ▬   Ein IProject ist ein generisches Enwicklungs-Projekt in der Eclipse IDE


       DesignerProject nsfProject =
          DesignerResource.getDesignerProject(iproject);
       String dbServer = nsfProject.getServerName();
       String dbPath = nsfProject.getDatabaseName();

       //
       //modify db design here, then notify DDE about changes
       //
       nsfProject.refresh();



Entwicklercamp 2010        33
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1


      Eclipse-Selektion in DDE API
      Objekten umwandeln
       ●   Konvertiert eine Eclipse IResource in ein DesignerDesignElement
            ▬   Eine IResource ist ein generisches Unterelement eines Eclipse IProjects


       DesignerDesignElement de =
          DesignerResource.getDesignElement(iresource);
       String oldName = de.getName();

       //
       //modify design element here, then notify DDE about changes
       //
       de.refresh();




Entwicklercamp 2010        34
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




                                                Demo
                        ●        Eigene Eigenschaften für Notes Design-Elemente
                        ●        LotusScript.doc* Integration in Domino Designer
                        ●        Design-Manipulationen




         *) Download von Lotusscript.doc V2 erhältlich unter: http://blog.lsdoc.org

Entwicklercamp 2010         35
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Agenda
       ●   Einführung

       ●   Lotus Notes mit Java erweitern

       ●   Mehrwert für das klassische Lotus Notes

       ●   Domino Designer mit Java erweitern

       ●   Best Practices

       ●   Q&A




Entwicklercamp 2010     36
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Generelle Empfehlungen
       ●   Das Arbeiten mit Threads erlernen
            ▬   Keine lang andauernden Operationen im UI-Thread ablaufen lassen!
            ▬   Dies blockiert den gesamten Client!
            ▬   Berechnungen in Hintergrund-Jobs auslagern → dann einen UIJob zum Update der UI nutzen


    NotesSessionJob job = new NotesSessionJob("BG Operation") {
       protected IStatus runInNotesThread(
           Session session, IProgressMonitor monitor)
             throws NotesException {
           //compute something here
           return Status.OK_STATUS;
       }
    };
    job.schedule();

Entwicklercamp 2010        37
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Generelle Empfehlungen
       ●   Keine Notes-Objekte cachen
            ▬   Kann zu schweren Problemen mit dem Memory-Management führen
       ●   Die Notes Java API hat nur eine begrenzte Anzahl von Handles für
           Daten-Objekte
            ▬   Und der eigene Code ist nicht alleine im Client!
            ▬   Wenn möglich stets .recycle() aufrufen
       ●   NotesSessionJob für den Notes-Zugriff nutzen
            ▬   Wird im Hintergrund ausgeführt
            ▬   Holt immer eine neue Session; ist sogar dann sicher, wenn die Notes ID geändert wurde
            ▬   Recycled automatisch alle Notes-Objekte, die innerhalb der Session erzeugt wurden
                → Kopieren der Notes-Daten in eigene Objekte zur Zwischenspeicherung
            ▬   UI API Daten-Klassen sind hingegen sicher (z.B. NotesDocumentData)




Entwicklercamp 2010         38
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




      Zusammenfassung
       ●   Eclipse-Entwickler erhalten zusätzliche Möglichkeiten, um mit der Lotus
           Notes UI interagieren zu können
            ▬   Existierender LotusScript-Code kann wiederverwendet werden (Aufruf in UI-Agenten)
            ▬   Kann für einen sanften Übergang von Notes-Code zu Java-Plugins genutzt werden
            ▬   Raum für Verbesserungen in den APIs: Fehlende Klassen/Methoden gegenüber LotusScript
            ▬   IBM-Entwicklung sollte auch weiter an den Backend APIs arbeiten (Notes.jar):
                z.B. Parameter-Übergabe an Backend-Agenten, Streaming von Anhängen und andere Features
       ●   Klassische Notes-Entwicklung kann auch von den APIs profitieren
            ▬   Durch eine Brücke zwischen LotusScript und Eclipse-Plugins können API-Funktionen auch von
                klassischen Formularen und Ansichten genutzt werden
            ▬   Interessante neue Entwurfs-Muster wie Multi-Threading in LotusScript-Anwendungen und
                Verwendung von Eclipse UI-Komponenten (Perspective, View)
       ●   DDE kann jetzt ebenso erweitert werden
            ▬   Selektion von Design-Elementen nutzen, um Design zu modifizieren und z.B. Code/Design-
                Generatoren zum DDE hinzuzufügen
       ●   Fazit: Lotus Notes ist cool :-)


Entwicklercamp 2010        39
Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1




                                  Vielen Dank!

                                Zeit für Fragen




Entwicklercamp 2010   40

Weitere ähnliche Inhalte

Ähnlich wie java apis

A1 Lotusday Acocon Notes R8 Features 2007 09 V2
A1 Lotusday Acocon Notes R8 Features 2007 09 V2A1 Lotusday Acocon Notes R8 Features 2007 09 V2
A1 Lotusday Acocon Notes R8 Features 2007 09 V2Andreas Schulte
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsAndreas Schulte
 
Upgrade auf IBM Notes9 in der Kaffeepause
Upgrade auf IBM Notes9 in der KaffeepauseUpgrade auf IBM Notes9 in der Kaffeepause
Upgrade auf IBM Notes9 in der Kaffeepausepanagenda
 
Ajax in domino web-anwendungen - der nächste schritt
Ajax in domino web-anwendungen - der nächste schrittAjax in domino web-anwendungen - der nächste schritt
Ajax in domino web-anwendungen - der nächste schrittdominion
 
Templates, Code & Tools
Templates, Code & ToolsTemplates, Code & Tools
Templates, Code & ToolsUlrich Krause
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Digicomp Academy AG
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionDnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionOliver Busse
 
Einfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EE
Einfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EEEinfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EE
Einfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EERolf Kremer
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickPhilipp Burgmer
 
Browser Plug-In Notes 9 SE
Browser Plug-In Notes 9 SEBrowser Plug-In Notes 9 SE
Browser Plug-In Notes 9 SERalph Belfiore
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsStephan Kaps
 
Einführung Team Foundation Server 2010
Einführung Team Foundation Server 2010Einführung Team Foundation Server 2010
Einführung Team Foundation Server 2010Thomas Mentzel
 
Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)NETUserGroupBern
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009Andreas Schulte
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development ToolsCadaxo GmbH
 
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)We4IT Group
 

Ähnlich wie java apis (20)

A1 Lotusday Acocon Notes R8 Features 2007 09 V2
A1 Lotusday Acocon Notes R8 Features 2007 09 V2A1 Lotusday Acocon Notes R8 Features 2007 09 V2
A1 Lotusday Acocon Notes R8 Features 2007 09 V2
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite Applications
 
Upgrade auf IBM Notes9 in der Kaffeepause
Upgrade auf IBM Notes9 in der KaffeepauseUpgrade auf IBM Notes9 in der Kaffeepause
Upgrade auf IBM Notes9 in der Kaffeepause
 
Ajax in domino web-anwendungen - der nächste schritt
Ajax in domino web-anwendungen - der nächste schrittAjax in domino web-anwendungen - der nächste schritt
Ajax in domino web-anwendungen - der nächste schritt
 
Templates, Code & Tools
Templates, Code & ToolsTemplates, Code & Tools
Templates, Code & Tools
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionDnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
 
Einfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EE
Einfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EEEinfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EE
Einfach, schnell und leistungsstark - PAVONE Espresso Workflow für Java EE
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
Browser Plug-In Notes 9 SE
Browser Plug-In Notes 9 SEBrowser Plug-In Notes 9 SE
Browser Plug-In Notes 9 SE
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
 
Einführung Team Foundation Server 2010
Einführung Team Foundation Server 2010Einführung Team Foundation Server 2010
Einführung Team Foundation Server 2010
 
Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)Text Template Transformation Toolkit (T4)
Text Template Transformation Toolkit (T4)
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development Tools
 
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
Was ist neu in Lotus Notes/Domino 8.5.3, und was kommt dann? (We4IT)
 

Mehr von dominion

What is a itil and how does it relate to your collaborative environment uklug
What is a itil and how does it relate to your collaborative environment   uklugWhat is a itil and how does it relate to your collaborative environment   uklug
What is a itil and how does it relate to your collaborative environment uklugdominion
 
iOS enterprise
iOS enterpriseiOS enterprise
iOS enterprisedominion
 
cloud session uklug
cloud session uklugcloud session uklug
cloud session uklugdominion
 
Uklug 2011 administrator development synergy
Uklug 2011 administrator development synergyUklug 2011 administrator development synergy
Uklug 2011 administrator development synergydominion
 
Uklug 2011 client management
Uklug 2011 client managementUklug 2011 client management
Uklug 2011 client managementdominion
 
JavaScript blast
JavaScript blastJavaScript blast
JavaScript blastdominion
 
Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...dominion
 
Uklug2011 Know your Notes
Uklug2011 Know your NotesUklug2011 Know your Notes
Uklug2011 Know your Notesdominion
 
Taking themes to the next level
Taking themes to the next levelTaking themes to the next level
Taking themes to the next leveldominion
 
Supersize me
Supersize meSupersize me
Supersize medominion
 
Aussie outback
Aussie outbackAussie outback
Aussie outbackdominion
 
Learning to run
Learning to runLearning to run
Learning to rundominion
 
Implementing xpages extension library
Implementing xpages extension libraryImplementing xpages extension library
Implementing xpages extension librarydominion
 
Abb presentation uklug
Abb presentation uklugAbb presentation uklug
Abb presentation uklugdominion
 
Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0dominion
 
Domino testing presentation
Domino testing presentationDomino testing presentation
Domino testing presentationdominion
 
Composite applications tutorial
Composite applications tutorialComposite applications tutorial
Composite applications tutorialdominion
 
Maximizing application performance
Maximizing application performanceMaximizing application performance
Maximizing application performancedominion
 
Error handling in XPages
Error handling in XPagesError handling in XPages
Error handling in XPagesdominion
 

Mehr von dominion (20)

What is a itil and how does it relate to your collaborative environment uklug
What is a itil and how does it relate to your collaborative environment   uklugWhat is a itil and how does it relate to your collaborative environment   uklug
What is a itil and how does it relate to your collaborative environment uklug
 
iOS enterprise
iOS enterpriseiOS enterprise
iOS enterprise
 
cloud session uklug
cloud session uklugcloud session uklug
cloud session uklug
 
Uklug 2011 administrator development synergy
Uklug 2011 administrator development synergyUklug 2011 administrator development synergy
Uklug 2011 administrator development synergy
 
Uklug 2011 client management
Uklug 2011 client managementUklug 2011 client management
Uklug 2011 client management
 
JavaScript blast
JavaScript blastJavaScript blast
JavaScript blast
 
Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...
 
Uklug2011 Know your Notes
Uklug2011 Know your NotesUklug2011 Know your Notes
Uklug2011 Know your Notes
 
Quickr
QuickrQuickr
Quickr
 
Taking themes to the next level
Taking themes to the next levelTaking themes to the next level
Taking themes to the next level
 
Supersize me
Supersize meSupersize me
Supersize me
 
Aussie outback
Aussie outbackAussie outback
Aussie outback
 
Learning to run
Learning to runLearning to run
Learning to run
 
Implementing xpages extension library
Implementing xpages extension libraryImplementing xpages extension library
Implementing xpages extension library
 
Abb presentation uklug
Abb presentation uklugAbb presentation uklug
Abb presentation uklug
 
Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0
 
Domino testing presentation
Domino testing presentationDomino testing presentation
Domino testing presentation
 
Composite applications tutorial
Composite applications tutorialComposite applications tutorial
Composite applications tutorial
 
Maximizing application performance
Maximizing application performanceMaximizing application performance
Maximizing application performance
 
Error handling in XPages
Error handling in XPagesError handling in XPages
Error handling in XPages
 

java apis

  • 1. Track 4, Session 5 Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1! Karsten Lehmann | Geschäftsführer Mindoo GmbH
  • 2. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Agenda ● Einführung ● Lotus Notes mit Java erweitern ● Mehrwert für das klassische Lotus Notes ● Domino Designer mit Java erweitern ● Best Practices ● Q&A Entwicklercamp 2010 2
  • 3. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Über uns ● Mindoo ist IBM Business Partner und Notes/Domino Design Partner ● Wir konzentrieren uns auf die „neuen“ Aspekte der IBM Lotus Notes- Entwicklung ▬ Eclipse/Expeditor-Plugins und Rich-Client-Anwendungen ▬ Composite Application Architekturen ▬ LiveText Erweiterungen ▬ Xpages-Anwendungen ● Karsten Lehmann und Tammo Riedinger ▬ Gründer der Mindoo GmbH ▬ Seit 2004 Entwickler der Applikation MindPlan® für die Haus Weilgut GmbH, Mindmapping und Projekt-Management für Lotus Notes, IBM Award Winner 2008 ● Weitere Informationen: http://www.mindoo.de Entwicklercamp 2010 3
  • 4. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Motivation ● „Notes kann auch das“ - ja, aber wieso so kompliziert? ▬ Eclipse Entwickler mussten bisher zu viele Workarounds nutzen, um mit der klassischen Notes UI interagieren zu können ▬ Man denke nur an “Nutzung der Notes.ini zum Datenaustausch” oder “Seiten öffnen, die sich selbst schließen, nur um LotusScript®-Code im QueryClose-Event auszuführen” ▬ Es fehlte eine Java-API zur Ansteuerung der Notes-Oberfläche. Der Sinn der neuen APIs ist, diese Lücke zu füllen und den Entwicklern damit das Leben zu erleichtern ● Wir waren an den Diskussionen über die Features der neuen „Notes and Designer extensibility APIs“ beteiligt ▬ Diskussionen mit IBM dev über API-Entwürfe bereits auf der Lotusphere 2009 und später in Konferenzschaltungen ▬ Feedback zum Design / Berichte über Tests im Zuge des Design Partner Programms ● Wie immer bei ersten Releases gibt es noch Raum für Verbesserungen ▬ Wir denken jedoch, dass diese APIs schon ein riesiger Schritt vorwärts sind Entwicklercamp 2010 4
  • 5. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Achtung ● Die hier gezeigten Java APIs funktionieren nicht in Notes-Agenten. Dies is reine Eclipse-Entwicklung! Ok, ich bin raus! ● Bitte gehen Sie noch nicht, falls Sie nur mit LotusScript entwickeln. Wir haben später auch noch etwas für Sie! Entwicklercamp 2010 5
  • 6. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Achtung ● Wir können hier nicht alle APIs im Detail betrachten! ▬ Wir werden uns stattdessen auf die wichtigsten Neuerungen konzentrieren: die neue Java UI API und die Designer Java-API ● Wir wollen Ihnen einen guten Eindruck vermitteln, was sie wirklich mit den Notes 8.5.1 APIs tun können ▬ Hoffentlich verlassen Sie diesen Vortrag bereits mit einigen eigenen Idee ▬ Wir haben ca. 10 Demos für Sie erstellt! ● Wir versuchen Sie heute nicht mit Code zu Tode zu langweilen! ● Verfolgen Sie stattdessen die kommende Serie von Artikeln mit Details zu den Demos in unserem Blog: http://blog.mindoo.com Entwicklercamp 2010 6
  • 7. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Startvorbereitungen ● Die APIs und Demos basieren auf ▬ Eclipse 3.4.2 ▬ Expeditor Toolkit 6.2.1 ▬ IBM Lotus Notes 8.5.1 ● Installieren Sie Expeditor in Eclipse und setzen Sie Lotus Notes 8.5.1 als Ziel-Plattform ● Erstellen Sie ein Plugin-Projekt für Ihren eigenen Code ● Für die UI API müssen Sie die folgende Abhängigkeit definieren: ▬ com.ibm.notes.java.ui ● Für die DDE API müssen Sie die folgenden Abhängigkeiten definieren: ▬ com.ibm.designer.domino.ui.commons ▬ com.ibm.designer.domino.ide.resources Entwicklercamp 2010 7
  • 8. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Agenda ● Einführung ● Lotus Notes mit Java erweitern ● Mehrwert für das klassische Lotus Notes ● Domino Designer mit Java erweitern ● Best Practices ● Q&A Entwicklercamp 2010 8
  • 9. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Java UI API – eine grobe Übersicht ● API ist neu in 8.5.1 ▬ Nicht supportete Vorschau bereits verfügbar in 8.5 ● Verbessert die Integration zwischen Eclipse und dem klassischen Lotus Notes Client ▬ Eclipse Plugins können endlich Informationen über den Zustand von Formularen und Ansichten des klassischen Clients bekommen ▬ Neue Wege der Interaktion dieser beiden Welten ● Bestehende Funktionalität lässt sich nun einfacher nutzen ▬ Öffnen von Design-Elementen ▬ Drucken von Dokumenten und Ansichten aus Eclipse heraus ▬ Erstellen neuer Dokumente und Vorbesetzen von Werten ▬ Temporäre Dokumente, um Daten zu speichern und zu übertragen ▬ Ausführen von Notes-Code in einem Hintergrund-Thread inklusive Speicher-Management (NotesSessionJob) Entwicklercamp 2010 9
  • 10. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Java UI API – eine grobe Übersicht ● Ergänzt neue Funktionalitäten und verkleinert die Lücke zwischen Eclipse und dem klassischen Lotus Notes client ▬ Lesen/Modifizieren von Dokumenten-Inhalt im Bearbeiten-Modus ▬ Document Listener (Bearbeiten-Modus an/aus, Änderungen und Schließen von Dokumenten verfolgen) ▬ Eclipse-Selection für fokussierte Felder und neue noch nicht gespeicherte Dokumente ▬ Datenbank zu Workspace hinzufügen ▬ Eingabe-Methoden von NotesUIWorkspace, z.B. um Datenbanken auszuwählen ▬ Viele Eclipse Property Tester (eine Art "hide when" für Eclipse-Elemente wie z.B. Actions) ▬ LotusScript-Agenten in UI-Thread ausführen (es können Dialoge angezeigt werden in den Agenten), Daten können bi-direktional übergeben und es können Callbacks installiert werden Entwicklercamp 2010 10
  • 11. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Wo ist die Dokumentation? Entwicklercamp 2010 11
  • 12. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Klein anfangen – Ihr erstes Beispiel ● Toolbar-Aktion zum Ändern eines Feldes in einem geöffneten Formular ● Nutzen Sie diesen Code in einer standard Eclipse Toolbar-Aktion: NotesUIWorkspace ws = new NotesUIWorkspace(); NotesUIDocument uidoc = ws.getCurrentDocument(); if (uidoc != null) { NotesUIField field = uidoc.getField("Subject"); if (field != null) field.setText("Hello World!"); } Entwicklercamp 2010 12
  • 13. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Klein anfangen – Ihr erstes Beispiel ● Für Felder in Backend-Dokumenten: NotesUIWorkspace ws = new NotesUIWorkspace(); NotesUIDocument uidoc = ws.getCurrentDocument(); if (uidoc != null) { NotesBEDocument beDoc = uidoc.getBEDocument(); String oldValue = beDoc.getItemString("Flag"); // do something here beDoc.setItemValue("Flag", "1"); //optional to see your changes in the UI: uidoc.reload(); } ● Kein voller Zugriff auf das Dokument durch technische Restriktionen Entwicklercamp 2010 13
  • 14. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Demo ● Mit Eclipse-Aktionen auf ein UI-Dokument zugreifen und dieses modifizieren: ▬ Alternativer Address Picker für Mail-Adressaten ▬ Ausfüllhilfe für Felder Entwicklercamp 2010 14
  • 15. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Tiefer einsteigen - NotesUIWorkspace erkunden ● Ein neues Dokument mit vorbesetzten Feldern erstellen NotesUIWorkspace ws = new NotesUIWorkspace(); NotesDatabaseData dbData = new NotesDatabaseData("Server/Org", "main/jdoe.nsf"); NotesFormData formData = new NotesFormData(dbData, "Memo"); formData.addComposeItem("SendTo", "Peter Smith/Org"); ws.composeDocument(formData); Entwicklercamp 2010 15
  • 16. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Tiefer einsteigen - NotesUIWorkspace erkunden ● Daten-Klassen werden in der API genutzt, um Daten zwischen Notes- Sessions im Speicher zu halten ● Daten können sicher zwischen API-Aufrufen übergeben und lokal gesichert werden ● In einigen Fällen fehlen einige Daten-Werte (z.B. der Pfad zu einer Datenbank) ▬ Ist eine technische Beschränkung der API ▬ Es können dann „open“-Methoden genutzt werden, um diese Daten zu laden ▬ z.B. NotesDatabaseData.open(Session) NotesDatabaseData NotesFormData NotesFramesetData NotesPageData NotesDocumentData NotesDocumentKeyData NotesViewData Entwicklercamp 2010 16
  • 17. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Tiefer einsteigen - NotesUIWorkspace erkunden ● Datenbank zum Workspace hinzufügen NotesUIWorkspace ws = new NotesUIWorkspace(); NotesDatabaseData dbData = new NotesDatabaseData("Server/Org", "path/db.nsf"); ws.addDatabase(dbData); ● Wenn eine Datenbank bereits auf dem Workspace existiert, wird Ihre Kachel fokussiert Entwicklercamp 2010 17
  • 18. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Demo ● Erstellung von Dokumenten mit vorbesetzten Feldern ● Bookmark/Workspace Add-on Entwicklercamp 2010 18
  • 19. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Tiefer einsteigen - Agent in der UI aufrufen ● Bisher konnten LotusScript-Agenten nur im Backend ausgeführt werden ▬ Keine Möglichkeit, UI-Änderungen von einem Agenten aus durchzuführen ● Neuheit in der API in 8.5.1 ▬ Neue Funktion, um einen Agent in der Notes UI auszuführen ▬ z.B. um auf das aktuelle Dokument/die aktuelle Ansicht zuzugreifen und Dialoge anzuzeigen ▬ Man kann sogar Agenten anderer Datenbanken ausführen! ● Nützlich für Funktionen, die bisher nicht Teil der API sind ▬ Code in einen Lotusscript-Agenten schreiben ▬ NotesUIWorkspace.runAgent aufrufen ▬ Callback-Listener nutzen, um bei Abschluss des Agenten benachrichtigt zu werden ▬ Daten-Austausch zwischen Eclipse und LotusScript Entwicklercamp 2010 19
  • 20. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Verbesserte Eclipse-Selektion ● In 8.5: Eclipse-Selektion begrenzt auf bereits gespeicherte Dokumente aus Ansichten ▬ Es wurden hauptsächlich Notes-URLs übergeben ▬ Kein Zugriff auf "in-memory"-Dokumente ● In 8.5.1: Informationen auch über noch nicht gespeicherte Dokumente und sogar fokussierte Felder eines Formulars ▬ Es kann verfolgt werden, was der Nutzer editiert ▬ Einführung von Klassen, die mehr Informationen liefern als nur die Notes-URL (z.B. NotesUIElement, NotesUIDocument und NotesUIField) ▬ Nutzt standard Eclipse-Konzept (Adapter), um zusätzliche Daten zu liefern! Entwicklercamp 2010 20
  • 21. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Verbesserte Eclipse-Selektion ● Verwendung von IAdaptable auf Selektionen // iterate over a selection and print the form-name for(Iterator<?> i=((IStructuredSelection) selection).iterator(); i.hasNext(); ) { Object item=i.next(); if (item instanceof IAdaptable) { NotesUIDocument doc=(NotesUIDocument)((IAdaptable) item).getAdapter(NotesUIDocument.class); if (doc!=null) System.out.println(doc.getForm()); } } Entwicklercamp 2010 21
  • 22. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Demo ● Universelles kontext-basiertes Online Hilfe-System ● Aufruf von Agenten von Eclipse und Transfer von Daten Entwicklercamp 2010 22
  • 23. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Agenda ● Einführung ● Lotus Notes mit Java erweitern ● Mehrwert für das klassische Lotus Notes ● Domino Designer mit Java erweitern ● Best Practices ● Q&A Entwicklercamp 2010 23
  • 24. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Grenzen der API ● Klingt toll! Und wo ist der Haken? ▬ Wir wollen nicht nur zeigen, was möglich ist, sondern auch was nicht möglich ist ● Nur ein kleiner Teil der LotusScript API ▬ Neue Features werden mit künftigen Releases integriert ● Event Listener blockieren nicht bei Form/View-Events ▬ Kein Ersatz für LotusScript Events, z.B. QuerySave ● Richtung nur Eclipse => klassisches Notes ▬ Hilft nur der Eclipse-Welt, keine Verbesserungen für die Welt des klassischen Clients Was können wir tun, um beide Welten enger zusammen zu bringen? ▬ Wie können wir Eclipse-Funktionen von LotusScript aus nutzen? ▬ Drei mögliche Lösungen, um Eclipse vom klassischen Notes Client aus anzusprechen Entwicklercamp 2010 24
  • 25. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Verbindung beider Welten Lösung 1: Der Property Broker ● Einen String von LotusScript zum Property Broker senden ● Eclipse-Plugin ist beim Broker registriert und empfängt den String ● Asynchrone Lösung ▬ Kein direkte Antwort, nur mittels Composite Application Wire ● Arbeitet lediglich in einer Composite Application NSF Property Eclipse Komponente Broker Komponente Entwicklercamp 2010 25
  • 26. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Verbindung beider Welten Lösung 2: Erstelle eigenen URL Handler ● Undokumentiertes / nicht supportetes Feature seit 8.5 ● Eigenen URL-Typ registrieren z.B. „myprotocol://” ● Java Handler wird aufgerufen, wenn eine URL geöffnet werden soll ▬ Funktioniert für NotesUIWorkspace.URLOpen, @UrlOpen, Links im Richtext und der Adress- Zeile ▬ Interessant auch für andere Einsatzzwecke ● Länge der URL ist begrenzt ▬ Mehrfach aufrufen für größere Datenmengen ● Asynchrone Lösung ▬ Arbeitet jedoch außerhalb von Composite Application Entwicklercamp 2010 26
  • 27. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Demo ● Eigener URL Handler in Lotus Notes Entwicklercamp 2010 27
  • 28. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Verbindung beider Welten Lösung 3: Eigene Brücke bauen! Idee: ● Zwei JVMs: Eclipse JVM und klassische Notes JVM ▬ Keine direkte Verbindung zwischen Eclipse-Plugins und Notes-Agenten ● Benutze lokale Netzwerk-Kommunikation zwischen beiden ▬ Öffne einen Server-Port in Eclipse, verbinde darauf von der klassischen JVM ● Benutze eigenes Protokoll oder Industrie-Standard wie z.B. Java RMI ▬ Und rufe remote Eclipse-Plugin-Code vom klassischen Notes auf ● Optional: Nutze LS2J für den Zugriff auf die Remote-API in LotusScript Entwicklercamp 2010 28
  • 29. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Verbindung beider Welten Lösung 3: Eigene Brücke erstellen! ● Das Resultat ist beeindruckend ▬ Kombination von LotusScript und Eclipse-Plugins eröffnet neue Entwurfs-Muster ▬ Z.B. Hintergrund-Threads für lang andauernden LotusScript-Code oder Erzeugung von Eclipse-Reitern und Layouts von LotusScript on-the-fly Eclipse/Expeditor Eclipse TCP/IP LS2J Notes JVM - Lotus- JVM Plugin Script Client Server klassisches Notes Entwicklercamp 2010 29
  • 30. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Demo ● Multi-Threading in LotusScript-Anwendung ● LotusScript-Zugriff auf die Eclipse-Workbench ● LotusScript erstellt neue Eclipse-Reiter-Layouts on- the-fly (Eclipse Perspective) Entwicklercamp 2010 30
  • 31. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Agenda ● Einführung ● Lotus Notes mit Java erweitern ● Mehrwert für das klassische Lotus Notes ● Domino Designer mit Java erweitern ● Best Practices ● Q&A Entwicklercamp 2010 31
  • 32. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Domino Designer Extensibility API ● Die DDE API ermöglicht Programmierung von Java Erweiterungen der Domino Designer IDE ▬ Haupteinsatzzweck: ▬ Reagieren auf Nutzer-Selektion - z.B. Anzeige zusätzlicher Daten in eigenen Ansichts-Bereichen (Eclipse Views) ▬ Automatische Verarbeitung von Daten anbieten, z.B. Flags für alle selektierten Bilder setzen oder Code-Generatoren, die Design-Elemente erzeugen ● Einführung neuer Funktionalität ▬ Design-Element Informationen der aktuellen Eclipse-Selektion ▬ Basis-Daten von Design-Elementen oder Datenbanken setzen ▬ Aktualisieren von Projekten/einzelnen Design-Elementen nach einer Änderung im Hintergrund (z.B. durch einen DXL-Import) ▬ Datenbanken im DDE-Navigator öffnen ● Zusätzliche Erweiterbarkeit gewinnen durch Nutzung von Standard Eclipse APIs ▬ Ein NSF-Projekt ist nur eine Erweiterung von Eclipse IProject Entwicklercamp 2010 32
  • 33. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Eclipse-Selektion in DDE API Objekten umwandeln ● Konvertiert ein Eclipse IProject in ein DesignerProject ▬ Ein IProject ist ein generisches Enwicklungs-Projekt in der Eclipse IDE DesignerProject nsfProject = DesignerResource.getDesignerProject(iproject); String dbServer = nsfProject.getServerName(); String dbPath = nsfProject.getDatabaseName(); // //modify db design here, then notify DDE about changes // nsfProject.refresh(); Entwicklercamp 2010 33
  • 34. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Eclipse-Selektion in DDE API Objekten umwandeln ● Konvertiert eine Eclipse IResource in ein DesignerDesignElement ▬ Eine IResource ist ein generisches Unterelement eines Eclipse IProjects DesignerDesignElement de = DesignerResource.getDesignElement(iresource); String oldName = de.getName(); // //modify design element here, then notify DDE about changes // de.refresh(); Entwicklercamp 2010 34
  • 35. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Demo ● Eigene Eigenschaften für Notes Design-Elemente ● LotusScript.doc* Integration in Domino Designer ● Design-Manipulationen *) Download von Lotusscript.doc V2 erhältlich unter: http://blog.lsdoc.org Entwicklercamp 2010 35
  • 36. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Agenda ● Einführung ● Lotus Notes mit Java erweitern ● Mehrwert für das klassische Lotus Notes ● Domino Designer mit Java erweitern ● Best Practices ● Q&A Entwicklercamp 2010 36
  • 37. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Generelle Empfehlungen ● Das Arbeiten mit Threads erlernen ▬ Keine lang andauernden Operationen im UI-Thread ablaufen lassen! ▬ Dies blockiert den gesamten Client! ▬ Berechnungen in Hintergrund-Jobs auslagern → dann einen UIJob zum Update der UI nutzen NotesSessionJob job = new NotesSessionJob("BG Operation") { protected IStatus runInNotesThread( Session session, IProgressMonitor monitor) throws NotesException { //compute something here return Status.OK_STATUS; } }; job.schedule(); Entwicklercamp 2010 37
  • 38. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Generelle Empfehlungen ● Keine Notes-Objekte cachen ▬ Kann zu schweren Problemen mit dem Memory-Management führen ● Die Notes Java API hat nur eine begrenzte Anzahl von Handles für Daten-Objekte ▬ Und der eigene Code ist nicht alleine im Client! ▬ Wenn möglich stets .recycle() aufrufen ● NotesSessionJob für den Notes-Zugriff nutzen ▬ Wird im Hintergrund ausgeführt ▬ Holt immer eine neue Session; ist sogar dann sicher, wenn die Notes ID geändert wurde ▬ Recycled automatisch alle Notes-Objekte, die innerhalb der Session erzeugt wurden → Kopieren der Notes-Daten in eigene Objekte zur Zwischenspeicherung ▬ UI API Daten-Klassen sind hingegen sicher (z.B. NotesDocumentData) Entwicklercamp 2010 38
  • 39. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Zusammenfassung ● Eclipse-Entwickler erhalten zusätzliche Möglichkeiten, um mit der Lotus Notes UI interagieren zu können ▬ Existierender LotusScript-Code kann wiederverwendet werden (Aufruf in UI-Agenten) ▬ Kann für einen sanften Übergang von Notes-Code zu Java-Plugins genutzt werden ▬ Raum für Verbesserungen in den APIs: Fehlende Klassen/Methoden gegenüber LotusScript ▬ IBM-Entwicklung sollte auch weiter an den Backend APIs arbeiten (Notes.jar): z.B. Parameter-Übergabe an Backend-Agenten, Streaming von Anhängen und andere Features ● Klassische Notes-Entwicklung kann auch von den APIs profitieren ▬ Durch eine Brücke zwischen LotusScript und Eclipse-Plugins können API-Funktionen auch von klassischen Formularen und Ansichten genutzt werden ▬ Interessante neue Entwurfs-Muster wie Multi-Threading in LotusScript-Anwendungen und Verwendung von Eclipse UI-Komponenten (Perspective, View) ● DDE kann jetzt ebenso erweitert werden ▬ Selektion von Design-Elementen nutzen, um Design zu modifizieren und z.B. Code/Design- Generatoren zum DDE hinzuzufügen ● Fazit: Lotus Notes ist cool :-) Entwicklercamp 2010 39
  • 40. Add-ons für Client/Designer auf Basis neuer Java APIs von Lotus Notes® 8.5.1 Vielen Dank! Zeit für Fragen Entwicklercamp 2010 40