SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
AD103 Have It Your Way: Extending IBM
Lotus® Domino® Designer
Andre Guirard | Product Developer
Xin Rang Wang ("Grace") | Software Engineer
Agenda
●   Eclipse-based Domino® Designer Architecture

●   What you will need

●   The Designer Extensibility API

●   Example applications

●   Demonstration

●   Q&A




             2
Extensibility in Domino Designer
●   Extend Domino Designer.
     ▬   Use Eclipse development skills to create plug-in in Java™.
     ▬   Or, integrate existing Eclipse based plug-in
     ▬   Create
●   Publish your Designer plug-in to OpenNTF.org
     ▬   Please!
●   Or sell them for $$$
Designer and Eclipse
●   Eclipse: Lotus rich client technology




         Lotus             Lotus            Lotus Expeditor   Domino
         Notes           Sametime            (standalone)     Designer


                       Lotus Expeditor


                    Eclipse 3.4 Foundation
What You Will Need
●   Eclipse 3.4 or later development environment (FREE!)
●   Eclipse plugin development skills
●   Domino Designer 8.5.1 or later
Capabilities of Designer Extensibility API
●   Let custom plugins tell what's selected
     ▬   Which Notes application
     ▬   Which design elements
     ▬   (if no design elements) which navigator heading or design list
     ▬   Whether a core editor window has focus
●   Get / set basic properties (title, alias, template name, etc.)
●   Combine with Notes Java API (lotus.domino.*) and DXL, to manipulate
    design elements in other ways.
Other Things You Can Do Just Because
it's Eclipse
●   Combine with Eclipse standard interfaces, listeners and extension points
    to build onto the UI.
     ▬   e.g. Register code to run when selection changes, or when something is saved.
●   Get the project path of a database and open it on screen.
●   Get / set the “contents” of a file-based design element
●   Get / set DXL of other design elements
●   Open a design element for editing using its resource path
●   Add preference page to control the configuration of your new plugin
●   ... whatever else you know how to do with
    Iresource/IFile/IProject/ViewPart/EditorPart.
●   Integration with other, non-Domino related plugins.
●   Etcetera
Limitations of new API
●   Only gives access to subset of design element & database properties.
     ▬   Use lotus.domino.* classes, DXL for other properties.
●   Can’t detect selection in "core windows" below design element level
     ▬   E.g. can’t tell which column is selected while editing a view.
     ▬   But you can tell you’re editing a view, and which one.
Core Window
●   The "old style" design element editors
Eclipse-based Editor
●   The newer design elements and new LotusScript editor
Demo Use Cases
●   Selection tracker
●   Assign Comment on Multiple Design Elements
     ▬   etc...
●   Create View From Form
●   Refactor plugin for Domino Designer
●   References validation plugin for Domino Designer
●   Import/Export plugin for Domino Designer




                  11
Extensibility API Classes/Interfaces
●   Class DesignerResource
     ▬   Static methods for working with Designer selections and objects
●   Interface DesignerDesignElementSelection
     ▬   The description of “what Domino- based elements are selected”.
●   Interface DesignerProject
     ▬   IProject object representing “Notes Database”
●   Interface DesignerDesignElement
     ▬   Object representing “Notes design element”
●   Class DesignerException
     ▬   Exception object for all problems using methods of DesignerDesignElement and DesignerProject
●   Property tester com.ibm.designer.domino.ui.commons.extensions.*
     ▬   What sort of thing is selected?




                   12
Context Menu extension – Design Element
Context Menu extension – Design Element




org.eclipse.ui.popupMenus
                            org.eclipse.core.resources.IFile
Context Menu extension – Application
Context Menu Extension – Application




org.eclipse.ui.popupMenus
                            org.eclipse.core.resources.IProject
To Make Menu Appear (only) in Designer




<extension
    point="org.eclipse.ui.perspectiveExtensions">
  <perspectiveExtension
      targetID="com.ibm.designer.domino.perspective">
    <actionSet
        id="ID of your action set which is defined elsewhere">
    </actionSet>
  </perspectiveExtension>
</extension>
Controlling Menu/Control Enablement
●   Enable when selection is anywhere in a Domino application:
     ▬   <enablement>
           <reference definitionId="com.ibm.designer.domino.ui.commons.extensions.designerProjectSelected" />
         </enablement>
●   Enable when exactly one form is selected:
     ▬   <enablement>
         <with variable="selection">
           <test
            property="com.ibm.designer.domino.ui.commons.extensions.numAndType"
            value="1,forms" />
         </with>
         </enablement>
com.ibm.designer.domino.ui.commons.extensions
DesignerResource
      static DesignerDesignElement getDesignElement(IResource resource)
                                        Convert IResource to Notes design element.
              static DesignerProject getDesignerProject(IProject project)

                            static getDesignerSelection(ISelection selection)
   DesignerDesignElementSelection Returns object with info about everything Domino-related in
                                   current selection.
                      static IResource getResourceFromEditor(IEditorPart part)
                                       Answers the question “What design element am I editing here?”
              static DesignerProject openDesignerProject(java.lang.String server, java.lang.String
                                     filepath)
                                     Kicks off a background process that adds a bookmark to the
                                     Notes application into Designer.




                 19
com.ibm.designer.domino.ui.commons.extensions
Interface DesignerDesignElementSelection
                      java.lang.String getCategory()

                                  int getDesignElementCount()

                      java.lang.String getDesignElementType()

java.util.List<DesignerDesignElement> getSelectedDesignElements()

                      DesignerProject getSelectedDesignerProject()

                             boolean isDominoProjectSelected()




                 20
com.ibm.designer.domino.ui.commons.extensions
Interface DesignerProject
             java.lang.String getDatabaseTitle()           (also set!)
             java.lang.String getServerName()
             java.lang.String getDatabaseName()
                                   The filepath of the application.
             java.lang.String getReplicaId()
                         void refresh()
                                    Update UI to reflect recent changes.
             java.lang.String getInheritTemplateName() (also set!)
                              Which template this application inherits its design from (null=none).
             java.lang.String getMasterTemplateName() (also set!)
                              If application is a template, "template name" by which other
                              applications can inherit its design (null = none).
     DesignerDesignElement getDesignElement(IPath path)
                           To get an object to work with a design element even if it's not selected.

                      boolean isMultiLingual()
                      boolean isDesignHidden()
                              ...
                 21
com.ibm.designer.domino.ide.resources.extensions
Interface DesignerDesignElement
           java.lang.String getName()            (also set!)
           java.lang.String getAlias()           (also set!)
                            Multiple aliases delimited with “|”
           java.lang.String getComment()       (also set!)
                                 The filepath of the application.
           java.lang.String getNoteId()
                    IResource getResource()
                     boolean isProhibitRefresh() (also set!)
                             Whether design element protected from design refresh/replace.
           java.lang.String getDesignElementTemplateName() (also set!)
                            If design element inherits design individually from a template, which
                            template.
           java.lang.String getDesignElementType()
                            String from IMetaModelConstants telling whether this is a form, view
                            or what.
           java.lang.String getLanguage()
                             ...


               22
you’d like to see a
 demonstration.
Click to edit the title text format
 So why don’t we just do that?
References
●   Domino Designer help contains javadoc
●   Look for upcoming article on Designer Wiki
     ▬   http://www-10.lotus.com/ldd/ddwiki.nsf
●   Download demos from openntf.org
     ▬   Search for “extensibility”
●   Eclipse help site
     ▬   http://help.eclipse.org/ganymede/index.jsp
Legal Disclaimer
© IBM Corporation 2009. All Rights Reserved.
The information contained in this publication is provided for informational purposes only. While efforts were made to verify the
completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or
implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without
notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other
materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from
IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM
software.
References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM
operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based
on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way.
Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you
will result in any specific sales, revenue growth or other results.


IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino, Quickr, Sametime, WebSphere, UC2, PartnerWorld and Lotusphere are
trademarks of International Business Machines Corporation in the United States, other countries, or both. Unyte is a trademark of
WebDialogs, Inc., in the United States, other countries, or both.


Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.




                         25

Mais conteúdo relacionado

Mais procurados

J2EE vs JavaEE
J2EE vs JavaEEJ2EE vs JavaEE
J2EE vs JavaEE
eanimou
 
Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpike
os890
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
Vikas Goyal
 
Java for Recruiters
Java for RecruitersJava for Recruiters
Java for Recruiters
ph7 -
 

Mais procurados (20)

J2EE vs JavaEE
J2EE vs JavaEEJ2EE vs JavaEE
J2EE vs JavaEE
 
JavaFX in Action Part I
JavaFX in Action Part IJavaFX in Action Part I
JavaFX in Action Part I
 
Java for XPages Development
Java for XPages DevelopmentJava for XPages Development
Java for XPages Development
 
Hinkmond's JavaFX Mobile Dojo
Hinkmond's JavaFX Mobile DojoHinkmond's JavaFX Mobile Dojo
Hinkmond's JavaFX Mobile Dojo
 
Java fx
Java fx Java fx
Java fx
 
J2EE Struts with Hibernate Framework
J2EE Struts with Hibernate FrameworkJ2EE Struts with Hibernate Framework
J2EE Struts with Hibernate Framework
 
Domino java
Domino javaDomino java
Domino java
 
Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpike
 
Java & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate FrameworkJava & J2EE Struts with Hibernate Framework
Java & J2EE Struts with Hibernate Framework
 
Modular Java
Modular JavaModular Java
Modular Java
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
 
Java modularization
Java modularizationJava modularization
Java modularization
 
Java FX Part2
Java FX Part2Java FX Part2
Java FX Part2
 
Training on java niit (sahil gupta 9068557926)
Training on java niit (sahil gupta 9068557926)Training on java niit (sahil gupta 9068557926)
Training on java niit (sahil gupta 9068557926)
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introduction
 
Lecture java basics
Lecture   java basicsLecture   java basics
Lecture java basics
 
Introduction to Java
Introduction to Java Introduction to Java
Introduction to Java
 
Java for Recruiters
Java for RecruitersJava for Recruiters
Java for Recruiters
 
Java EE Introduction
Java EE IntroductionJava EE Introduction
Java EE Introduction
 
Visage Android - Cleaner APIs, Cleaner UIs
Visage Android - Cleaner APIs, Cleaner UIsVisage Android - Cleaner APIs, Cleaner UIs
Visage Android - Cleaner APIs, Cleaner UIs
 

Semelhante a Ad103 - Have it Your Way: Extending IBM Lotus Domino Designer

Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax PluginsHnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
dominion
 
react-slides.pdf gives information about react library
react-slides.pdf gives information about react libraryreact-slides.pdf gives information about react library
react-slides.pdf gives information about react library
janet736113
 
Ujjwalreverseengineeringppptfinal
UjjwalreverseengineeringppptfinalUjjwalreverseengineeringppptfinal
Ujjwalreverseengineeringppptfinal
ujjwalchauhan87
 
Matteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break editionMatteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break edition
DuckMa
 

Semelhante a Ad103 - Have it Your Way: Extending IBM Lotus Domino Designer (20)

Lec005 android start_program
Lec005 android start_programLec005 android start_program
Lec005 android start_program
 
Game Studio
Game StudioGame Studio
Game Studio
 
Final ppt
Final pptFinal ppt
Final ppt
 
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax PluginsHnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
 
Eclipse 2011 Hot Topics
Eclipse 2011 Hot TopicsEclipse 2011 Hot Topics
Eclipse 2011 Hot Topics
 
Advanced Techniques for Ext Designer
Advanced Techniques for Ext DesignerAdvanced Techniques for Ext Designer
Advanced Techniques for Ext Designer
 
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
Matteo Gazzurelli - Andorid introduction - Google Dev Fest 2013
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
 
react-slides.pdf
react-slides.pdfreact-slides.pdf
react-slides.pdf
 
react-slides.pdf gives information about react library
react-slides.pdf gives information about react libraryreact-slides.pdf gives information about react library
react-slides.pdf gives information about react library
 
Eclipse e4
Eclipse e4Eclipse e4
Eclipse e4
 
react-slides.pptx
react-slides.pptxreact-slides.pptx
react-slides.pptx
 
Evolution of Patterns
Evolution of PatternsEvolution of Patterns
Evolution of Patterns
 
Android 101 - Introduction to Android Development
Android 101 - Introduction to Android DevelopmentAndroid 101 - Introduction to Android Development
Android 101 - Introduction to Android Development
 
Angular4 getting started
Angular4 getting startedAngular4 getting started
Angular4 getting started
 
Titanium appcelerator my first app
Titanium appcelerator my first appTitanium appcelerator my first app
Titanium appcelerator my first app
 
KAPT Annotation processing & Code generation
KAPT Annotation processing & Code generationKAPT Annotation processing & Code generation
KAPT Annotation processing & Code generation
 
Ujjwalreverseengineeringppptfinal
UjjwalreverseengineeringppptfinalUjjwalreverseengineeringppptfinal
Ujjwalreverseengineeringppptfinal
 
Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)
 
Matteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break editionMatteo Gazzurelli - Introduction to Android Development - Have a break edition
Matteo Gazzurelli - Introduction to Android Development - Have a break edition
 

Mais de ddrschiw

Traveler preview guide
Traveler preview guideTraveler preview guide
Traveler preview guide
ddrschiw
 
Traveler preview guide
Traveler preview guideTraveler preview guide
Traveler preview guide
ddrschiw
 

Mais de ddrschiw (17)

Traveler preview guide
Traveler preview guideTraveler preview guide
Traveler preview guide
 
Traveler preview guide
Traveler preview guideTraveler preview guide
Traveler preview guide
 
Ad111
Ad111Ad111
Ad111
 
AD114 -- Beyond the Mobile Browser? Building Rich Mobile Applications for IBM...
AD114 -- Beyond the Mobile Browser? Building Rich Mobile Applications for IBM...AD114 -- Beyond the Mobile Browser? Building Rich Mobile Applications for IBM...
AD114 -- Beyond the Mobile Browser? Building Rich Mobile Applications for IBM...
 
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
 
Ad109 - XPages Performance and Scalability
Ad109 - XPages Performance and ScalabilityAd109 - XPages Performance and Scalability
Ad109 - XPages Performance and Scalability
 
Ad107 - Enhance Your Existing Applications with XPages
Ad107 - Enhance Your Existing Applications with XPagesAd107 - Enhance Your Existing Applications with XPages
Ad107 - Enhance Your Existing Applications with XPages
 
Ad101 - IBM Lotus Domino Designer: Full Speed Ahead!
Ad101 - IBM Lotus Domino Designer: Full Speed Ahead!Ad101 - IBM Lotus Domino Designer: Full Speed Ahead!
Ad101 - IBM Lotus Domino Designer: Full Speed Ahead!
 
LotusSphere 2010 - Leveraging IBM Lotus® Forms™ with IBM WebSphere® Process S...
LotusSphere 2010 - Leveraging IBM Lotus® Forms™ with IBM WebSphere® Process S...LotusSphere 2010 - Leveraging IBM Lotus® Forms™ with IBM WebSphere® Process S...
LotusSphere 2010 - Leveraging IBM Lotus® Forms™ with IBM WebSphere® Process S...
 
Webform Server 351 Architecture and Overview
Webform Server 351 Architecture and OverviewWebform Server 351 Architecture and Overview
Webform Server 351 Architecture and Overview
 
Introduction To IBM Lotus Forms Viewer
Introduction To IBM Lotus Forms ViewerIntroduction To IBM Lotus Forms Viewer
Introduction To IBM Lotus Forms Viewer
 
XPages Workshop: Concepts And Exercises
XPages Workshop:   Concepts And ExercisesXPages Workshop:   Concepts And Exercises
XPages Workshop: Concepts And Exercises
 
Building A Cool Web 2.0 Application With XPages
Building A Cool Web 2.0 Application With XPagesBuilding A Cool Web 2.0 Application With XPages
Building A Cool Web 2.0 Application With XPages
 
Domino X Pages
Domino X PagesDomino X Pages
Domino X Pages
 
Mlb Demo1
Mlb Demo1Mlb Demo1
Mlb Demo1
 
Lotus Forms Webform Server 3.0 Overview & Architecture
Lotus Forms Webform Server 3.0 Overview & ArchitectureLotus Forms Webform Server 3.0 Overview & Architecture
Lotus Forms Webform Server 3.0 Overview & Architecture
 
Lotus Forms Webform Server 3.0 Overview & Architecture
Lotus Forms Webform Server 3.0 Overview & ArchitectureLotus Forms Webform Server 3.0 Overview & Architecture
Lotus Forms Webform Server 3.0 Overview & Architecture
 

Último

Último (20)

Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

Ad103 - Have it Your Way: Extending IBM Lotus Domino Designer

  • 1. AD103 Have It Your Way: Extending IBM Lotus® Domino® Designer Andre Guirard | Product Developer Xin Rang Wang ("Grace") | Software Engineer
  • 2. Agenda ● Eclipse-based Domino® Designer Architecture ● What you will need ● The Designer Extensibility API ● Example applications ● Demonstration ● Q&A 2
  • 3. Extensibility in Domino Designer ● Extend Domino Designer. ▬ Use Eclipse development skills to create plug-in in Java™. ▬ Or, integrate existing Eclipse based plug-in ▬ Create ● Publish your Designer plug-in to OpenNTF.org ▬ Please! ● Or sell them for $$$
  • 4. Designer and Eclipse ● Eclipse: Lotus rich client technology Lotus Lotus Lotus Expeditor Domino Notes Sametime (standalone) Designer Lotus Expeditor Eclipse 3.4 Foundation
  • 5. What You Will Need ● Eclipse 3.4 or later development environment (FREE!) ● Eclipse plugin development skills ● Domino Designer 8.5.1 or later
  • 6. Capabilities of Designer Extensibility API ● Let custom plugins tell what's selected ▬ Which Notes application ▬ Which design elements ▬ (if no design elements) which navigator heading or design list ▬ Whether a core editor window has focus ● Get / set basic properties (title, alias, template name, etc.) ● Combine with Notes Java API (lotus.domino.*) and DXL, to manipulate design elements in other ways.
  • 7. Other Things You Can Do Just Because it's Eclipse ● Combine with Eclipse standard interfaces, listeners and extension points to build onto the UI. ▬ e.g. Register code to run when selection changes, or when something is saved. ● Get the project path of a database and open it on screen. ● Get / set the “contents” of a file-based design element ● Get / set DXL of other design elements ● Open a design element for editing using its resource path ● Add preference page to control the configuration of your new plugin ● ... whatever else you know how to do with Iresource/IFile/IProject/ViewPart/EditorPart. ● Integration with other, non-Domino related plugins. ● Etcetera
  • 8. Limitations of new API ● Only gives access to subset of design element & database properties. ▬ Use lotus.domino.* classes, DXL for other properties. ● Can’t detect selection in "core windows" below design element level ▬ E.g. can’t tell which column is selected while editing a view. ▬ But you can tell you’re editing a view, and which one.
  • 9. Core Window ● The "old style" design element editors
  • 10. Eclipse-based Editor ● The newer design elements and new LotusScript editor
  • 11. Demo Use Cases ● Selection tracker ● Assign Comment on Multiple Design Elements ▬ etc... ● Create View From Form ● Refactor plugin for Domino Designer ● References validation plugin for Domino Designer ● Import/Export plugin for Domino Designer 11
  • 12. Extensibility API Classes/Interfaces ● Class DesignerResource ▬ Static methods for working with Designer selections and objects ● Interface DesignerDesignElementSelection ▬ The description of “what Domino- based elements are selected”. ● Interface DesignerProject ▬ IProject object representing “Notes Database” ● Interface DesignerDesignElement ▬ Object representing “Notes design element” ● Class DesignerException ▬ Exception object for all problems using methods of DesignerDesignElement and DesignerProject ● Property tester com.ibm.designer.domino.ui.commons.extensions.* ▬ What sort of thing is selected? 12
  • 13. Context Menu extension – Design Element
  • 14. Context Menu extension – Design Element org.eclipse.ui.popupMenus org.eclipse.core.resources.IFile
  • 15. Context Menu extension – Application
  • 16. Context Menu Extension – Application org.eclipse.ui.popupMenus org.eclipse.core.resources.IProject
  • 17. To Make Menu Appear (only) in Designer <extension point="org.eclipse.ui.perspectiveExtensions"> <perspectiveExtension targetID="com.ibm.designer.domino.perspective"> <actionSet id="ID of your action set which is defined elsewhere"> </actionSet> </perspectiveExtension> </extension>
  • 18. Controlling Menu/Control Enablement ● Enable when selection is anywhere in a Domino application: ▬ <enablement> <reference definitionId="com.ibm.designer.domino.ui.commons.extensions.designerProjectSelected" /> </enablement> ● Enable when exactly one form is selected: ▬ <enablement> <with variable="selection"> <test property="com.ibm.designer.domino.ui.commons.extensions.numAndType" value="1,forms" /> </with> </enablement>
  • 19. com.ibm.designer.domino.ui.commons.extensions DesignerResource static DesignerDesignElement getDesignElement(IResource resource) Convert IResource to Notes design element. static DesignerProject getDesignerProject(IProject project) static getDesignerSelection(ISelection selection) DesignerDesignElementSelection Returns object with info about everything Domino-related in current selection. static IResource getResourceFromEditor(IEditorPart part) Answers the question “What design element am I editing here?” static DesignerProject openDesignerProject(java.lang.String server, java.lang.String filepath) Kicks off a background process that adds a bookmark to the Notes application into Designer. 19
  • 20. com.ibm.designer.domino.ui.commons.extensions Interface DesignerDesignElementSelection java.lang.String getCategory() int getDesignElementCount() java.lang.String getDesignElementType() java.util.List<DesignerDesignElement> getSelectedDesignElements() DesignerProject getSelectedDesignerProject() boolean isDominoProjectSelected() 20
  • 21. com.ibm.designer.domino.ui.commons.extensions Interface DesignerProject java.lang.String getDatabaseTitle() (also set!) java.lang.String getServerName() java.lang.String getDatabaseName() The filepath of the application. java.lang.String getReplicaId() void refresh() Update UI to reflect recent changes. java.lang.String getInheritTemplateName() (also set!) Which template this application inherits its design from (null=none). java.lang.String getMasterTemplateName() (also set!) If application is a template, "template name" by which other applications can inherit its design (null = none). DesignerDesignElement getDesignElement(IPath path) To get an object to work with a design element even if it's not selected. boolean isMultiLingual() boolean isDesignHidden() ... 21
  • 22. com.ibm.designer.domino.ide.resources.extensions Interface DesignerDesignElement java.lang.String getName() (also set!) java.lang.String getAlias() (also set!) Multiple aliases delimited with “|” java.lang.String getComment() (also set!) The filepath of the application. java.lang.String getNoteId() IResource getResource() boolean isProhibitRefresh() (also set!) Whether design element protected from design refresh/replace. java.lang.String getDesignElementTemplateName() (also set!) If design element inherits design individually from a template, which template. java.lang.String getDesignElementType() String from IMetaModelConstants telling whether this is a form, view or what. java.lang.String getLanguage() ... 22
  • 23. you’d like to see a demonstration. Click to edit the title text format So why don’t we just do that?
  • 24. References ● Domino Designer help contains javadoc ● Look for upcoming article on Designer Wiki ▬ http://www-10.lotus.com/ldd/ddwiki.nsf ● Download demos from openntf.org ▬ Search for “extensibility” ● Eclipse help site ▬ http://help.eclipse.org/ganymede/index.jsp
  • 25. Legal Disclaimer © IBM Corporation 2009. All Rights Reserved. The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBM’s current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBM’s sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results. IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino, Quickr, Sametime, WebSphere, UC2, PartnerWorld and Lotusphere are trademarks of International Business Machines Corporation in the United States, other countries, or both. Unyte is a trademark of WebDialogs, Inc., in the United States, other countries, or both. Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. 25