1. OpenNTF Domino API: Making
Domino Work The Way You Want
Paul Withers
Intec Systems Ltd
September
2. Paul Withers
• XPages Developer since 2009
• IBM Champion
• Author of XPages Extension
Library
• Co-Developer of OpenNTF
Domino API
• Notes cheat sheets
3. Agenda
• Background
• Why Bother?
• Installation and Architecture
• Using the API
• Investigating the API
6. Not Just for Java
• SSJS
• #{javascript:…} means parse this string
using SSJS rules
• Pass commands to VariableResolver
• Look for corresponding variable name
• Map to a Java object/method
• Add variable and mapping to registry
• In org.openntf.domino.xsp plugin (most)
7. Why Bother?
* See http://www.shoeboxblog.com/wp-content/uploads/2010/02/life-before-google-500x496.jpg
10. How Do You Use It?
GitHub source
Install Update
Site in DDE
OpenNTF
download
Drop JAR in
Domino JVM
(outside OSGi)
Upload Update
Site to Server
Drop JAR in
Designer JVM
(outside OSGi)
11. Installation on Server
• Upload org.openntf.domino.xsp into
Update Site Db
• “Restart task http” on console
• Sufficient for OSGi-dependent contexts
since M4
12. Installation on Server
• For non-OSGi contexts, e.g. Agents:
• Save org.openntf.domino JAR to
<domino>jvmlibext
13. Installation on Client / Designer
• Install Update Site
via Widget Catalog
or via File >
Application > Install
• For agents save
org.openntf.domino
JAR to <notes>jvm
libext
14. OpenNTF Essentials
• Also part of OpenNTF Essentials
• Only XPages / OSGi part
• Does not include jar file
• Download from http://essentials.openntf.org
• Copy Update Site database to server
• Update notes.ini
• Restart server
• Install in client (see OpenNTF webinar)
18. See Demo App
• All available in the demo application
https://github.com/paulswithers/org.op
enntf.domino-Demo-Database
19. Using Demo Database
• Download and sign
• Go to Administration page
• Create Sample DataSet
• Familiar? Sort of…
• Based on Extension Library code
• Uses org.openntf.domino
• Use Import Comparator to compare
23. Java Methods
• New#{compositeData.title}Bean &
Old#{compositeData.title}Bean
• Register in faces-config.xml
• Add public void methods
• For comparator, set
javaMethodName to method
name
• Create text files
• Copy & paste bean code
24. Reviewing the Source
• Install / open Eclipse
• Using Git
• Clone repository from GitHub
• Import projects
25. Packages
• org.openntf.domino: core code
• org.openntf.domino.designer: future Designer-specific
functionality
• org.openntf.domino.plugin: core packaged in plugin
• If you want to modify and test, build this
• org.openntf.domino.xsp: XPages-specific code
• org.openntf.domino.xsp.feature: feature project
• org.openntf.domino.xsp.update: update project
• Build All and export
26. Core API Packages
• src: main code
• test: test scripts
• tinkerpop: graph db code
• data: sample error log
• doc: JavaDoc
• resources: various
resource files
27. src Package
• org.openntf.domino
• Core interfaces
• Import these classes
• org.openntf.domino.ext
• Extension interfaces
(new methods)
• org.openntf.domino.impl
• Implementations of
interfaces - actual code
28. Enabling SSJS
• Core cannot have XPages dependencies
• Must be in org.openntf.domino.xsp
• org.openntf.domino.xsp.script
• WrapperOpenDomino.register()
• Adds objects for each class
• getMethodMap() creates map for each
method
• OpenFunction.call() calls that method
30. How We Do It?
• WRAPPED_CLASSES adds each class
required for SSJS
• Iterated to create one OpenFunction object
for each class
• Generic Code to add all public non-static
methods to Map
• generateMethodMap()
• Limitations on ellipses / generic parameters
• There are ways round this!
31. Benefits?
• If we add a new public non-static method,
it’s automatically added
• If we add a new class, we just need to add
new element in WRAPPED_CLASSES
Map
32. Recent Additions (M3, M4)
• Database Event
Listeners
• Graph Database
• Jobs and Tasks
• Email Helper
• XPages OpenLog
Logger
• New 9.0.1
methods added
33. Work in Progress
• Classes for ALL Design
Elements
• Read / write XPages,
Custom Controls, JARs
• Data Schemas
• Big Data Models
• MapPicker / ListPicker as
dataProviders
• NamePicker dataProviders
• Support
34. Thank You
• Paul Withers
• pwithers@intec.co.uk
• http://www.intec.co.uk/blog
• @paulswithers
• https://github.com/OpenNTF/
org.openntf.domino
• https://github.com/paulswithers/org.opennt
f.domino-Demo-Database