SlideShare a Scribd company logo
OpenNTF Domino API:
The Community API
Paul Withers – Intec Systems Ltd
Martin Jinoch
20-3-2014 @EngageUG #engageug 1
Paul Withers
• IBM Champion
• Author of XPages Extension Library
• OpenNTF Director
• Co-Developer of OpenNTF Domino
API
20-3-2014 @EngageUG #engageug 2
Martin Jinoch
• Notes developer since version 3.0
• Java/XPages
• Source control
• Test driven development
20-3-2014 @EngageUG #engageug 3
Agenda
•Why Did We Bother?
•Deployment and Configuration
•What’s Available?
•How Do I Convert My Code?
20-3-2014 @EngageUG #engageug 4
Why Bother?
20-3-2014 @EngageUG #engageug 5
* See http://www.shoeboxblog.com/wp-content/uploads/2010/02/life-before-
google-500x496.jpg
Why Java?
• One install per server
• Run contexts
• XPages
• Java / JAR Design Elements
• Agents (slightly different deployment model)
• Applets / Servlets
• Plugins (Client/Designer/OSGi)
• DOTS Tasks
• SSJS just runs Java methods
• So most classes and methods are available in SSJS as well!
20-3-2014 @EngageUG #engageug 6
Why Develop It?
• Bridge gap between LotusScript and Java developers
• Remove risk of infinite loops in DocumentCollections
• No need to recycle
• Take advantage of List and Sets (Collections)
• More intuitively named parameters
• No need to catch NotesExceptions
• Pass more Java objects to methods
• Lots of helper methods
• In context Javadocs
20-3-2014 @EngageUG #engageug 7
After?
Paul Withers: I have a checkIsUnique() method that you
pass a View, a Key, and the current Document. Would that
be a useful addition to DominoUtils?
Nathan T. Freeman: sure that looks useful
Nathan T. Freeman: BUT...
Nathan T. Freeman: you're forgetting something
Nathan T. Freeman: you own the API :)
Nathan T. Freeman: View.checkUnique(Object key,
Document doc)
20-3-2014 @EngageUG #engageug 8
Why Use It?
• Upgrading to 9.0.1 (can be forked for 9.0)
• Open source can be used
• Don’t want to work out where you need to recycle now
• Didn’t realise DateTimes and Vectors were so toxic
• You prefer beer and chocolate and User Groups!
20-3-2014 @EngageUG #engageug 9
Agenda
•Why Did We Bother?
•Deployment and Configuration
•What’s Available?
•How Do I Convert My Code?
20-3-2014 @EngageUG #engageug 10
Deployment
• Download from OpenNTF or download as part of
OpenNTF Essentials from http://essentials.openntf.org
• Upload Update Site to server
• Issue console command “restart task http”
• Sufficient for OSGi-dependent contexts since M4
20-3-2014 @EngageUG #engageug 11
Deployment to Client / Designer
• Install Update Site or
OpenNTF Essentials
via Widget Catalog
or via File > Application
> Install
• Designed for Server
and Client 9.0.1
20-3-2014 @EngageUG #engageug 12
Enable Library for Each NSF
• No draggable components, so we can’t enable it for you
• Enable on Page Generation tab of Xsp Properties
20-3-2014 @EngageUG #engageug 13
Configure Xsp Properties
• org.openntf.domino.xsp=
• godmode: session & database auto-converted to
org.openntf.domino
• marcel: always convert MIME
• raid: run in debug mode
• khan: turn on all fixes, e.g. appendItemValue()
“I am…better.”
“At what?”
“Everything.”
• e.g. org.openntf.domino.xsp=godmode,mime,khan
20-3-2014 @EngageUG #engageug 14
Configure Xsp Properties for OpenLog
•Same as in XPages OpenLog Logger
• xsp.openlog.filepath
• xsp.openlog.displayError
• xsp.openlog.genericErrorMessage
• xsp.openlog.email
• xsp.openlog.debugLevel
• xsp.openlog.suppressEventTrace
20-3-2014 @EngageUG #engageug 15
Agenda
•Why Did We Bother?
•Deployment and Configuration
•What’s Available?
•How Do I Convert My Code?
20-3-2014 @EngageUG #engageug 16
Packages
• org.openntf.domino: core code
• org.openntf.domino.designer: future DDE-specific code
• org.openntf.domino.plugin: core packaged in a plugin
• If you want to modify and test, build this
• org.openntf.domino.xsp: OSGi-specific code
• org.openntf.domino.xsp.feature: feature project
• org.openntf.domino.xsp.update: update site project
• Delete features & plugins folders, open site.xml, click Build All
and export as General > File System
20-3-2014 @EngageUG #engageug 17
Core API Packages
• org.openntf.domino
• Core Domino API interfaces
• Import classes from this package
• org.openntf.domino.ext
• Extension interfaces
• Look here for methods we’ve added
• org.openntf.domino.impl
• Implementations of interfaces
• Look here for the actual code
20-3-2014 @EngageUG #engageug 18
Key Additions
• XPages OpenLog Logger
• Transactional Processing
• Database Event Listeners
• Graph Database
• Jobs and Tasks
• Email Helper
• Sync Helper
• Document Scanner
• Index Database
20-3-2014 @EngageUG #engageug 19
Work in Progress
• Classes for ALL Design Elements
• Data Schemas
• Name / Value Picker DataProviders
• Read / write XPages, Custom
Controls, JARs
• Recycle performance optimisation
• Index Database optimisation
• Collection sorting and progress
serialisation
• AtFormulaParser – quicker
20-3-2014 @EngageUG #engageug 20
Demo
20-3-2014 @EngageUG #engageug 21
Agenda
•Why Did We Bother?
•Deployment and Configuration
•What’s Available?
•How Do I Convert My Code?
20-3-2014 @EngageUG #engageug 22
How do I convert my code?
1. Do nothing and use old code with a new one
together (not recommended!)
2. Replace all implicit objects via godmode
3. Search and replace imports (lotus.domino ->
org.openntf.domino)
4. Remove unnecessary code (try catch blocks,
“throws NotesException”, recycle() calls, …)
5. Enjoy the power of helper methods
20-3-2014 @EngageUG #engageug 23
How do I convert my code
• Use old code with new one together
Converting from new API objects to original and
back via Factory.fromLotus() and Factory.toLotus()
methods
• org.openntf.domino.xsp=godmode
iddqd anyone?
• Change import lotus.domino -> org.openntf.domino
Search and replace in DDE can do this for you for
a whole project
20-3-2014 @EngageUG #engageug 24
Demo
20-3-2014 @EngageUG #engageug 25
Links
• Project on OpenNTF -
http://www.openntf.org/internal/home.nsf/project.xsp?actio
n=openDocument&name=OpenNTF%20Domino%20API
• OpenNTF Essentials - http://essentials.openntf.org/
• Source code on GitHub - https://github.com/OpenNTF/
• Wiki articles -
https://github.com/OpenNTF/org.openntf.domino/wiki/_pag
es
• OpenNTF Webinar (last year) -
http://www.youtube.com/watch?v=g-u2IEEPAfM
20-3-2014 @EngageUG #engageug 26
Questions!
• Paul Withers
• Intec Systems Ltd
• pwithers@intec.co.uk
• http://www.intec.co.uk/blog
• twitter.com/paulswithers
• Martin Jinoch
• http://jinoch.cz
• twitter.com/mjinoch
20-3-2014 @EngageUG #engageug 27

More Related Content

PDF
DanNotes 2013: OpenNTF Domino API
PDF
Deploying WO on Windows
PDF
Great Tools Heavily Used In Japan, You Don't Know.
PPTX
Automating Your Daily Tasks with Scripting - RubyConf 2015 Taiwan
PDF
Queick: A Simple Job Queue System for Python
PPTX
PowerShell for SharePoint Admins
PPTX
Introduction to Ansible - Jan 28 - Austin MeetUp
PPTX
Ansible Best Practices - July 30
DanNotes 2013: OpenNTF Domino API
Deploying WO on Windows
Great Tools Heavily Used In Japan, You Don't Know.
Automating Your Daily Tasks with Scripting - RubyConf 2015 Taiwan
Queick: A Simple Job Queue System for Python
PowerShell for SharePoint Admins
Introduction to Ansible - Jan 28 - Austin MeetUp
Ansible Best Practices - July 30

What's hot (20)

PDF
Celery introduction
PDF
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
PDF
XNA L01–Introduction
PDF
Developer-friendly taskqueues: What you should ask yourself before choosing one
PDF
Developing OpenResty Framework
PPTX
SP24S053 Introduction to PowerShell for SharePoint Developers and Administrators
PDF
FITC - Here Be Dragons: Advanced JavaScript Debugging
PDF
Functional Programming in Clojure
PDF
Functional Programming in JavaScript
PDF
Fluentd v1 and Roadmap
PDF
PharoDAYS 2015: Pharo Status - by Markus Denker
PDF
Building RESTful APIs
PDF
Ruby projects of interest for DevOps
PDF
Django rest framework tips and tricks
PPTX
I18nize Scala programs à la gettext
PPTX
F# on the Web
PPTX
A Brief History of OWIN
PPTX
Automating JavaScript testing with Jasmine and Perl
PPTX
Ansible API
PDF
Reflection in Pharo5
Celery introduction
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
XNA L01–Introduction
Developer-friendly taskqueues: What you should ask yourself before choosing one
Developing OpenResty Framework
SP24S053 Introduction to PowerShell for SharePoint Developers and Administrators
FITC - Here Be Dragons: Advanced JavaScript Debugging
Functional Programming in Clojure
Functional Programming in JavaScript
Fluentd v1 and Roadmap
PharoDAYS 2015: Pharo Status - by Markus Denker
Building RESTful APIs
Ruby projects of interest for DevOps
Django rest framework tips and tricks
I18nize Scala programs à la gettext
F# on the Web
A Brief History of OWIN
Automating JavaScript testing with Jasmine and Perl
Ansible API
Reflection in Pharo5
Ad

Similar to Engage 2014 OpenNTF Domino API Slides (20)

PDF
AD1545 - Extending the XPages Extension Library
PDF
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
PDF
Engage 2019: Modernising Your Domino and XPages Applications
DOCX
SamSegalResume
PDF
High-level Guide: Upgrading to SharePoint 2013
KEY
Continuous Deployment
PPT
Making the Agile Leap to Continuous Deployment
PDF
JUC Europe 2015: Continuous Integration and Distribution in the Cloud with DE...
PDF
python full stack course in hyderabad...
PPTX
python full stack course in madhapur, hyderabad
PPTX
python full stack course in hyderabad...
PDF
Introducing wsgi_lineprof / PyCon JP 2017 LT
PPTX
Engage 2018 adm04 - The lazy admin wins
PDF
Engage 2018 adm04 The lazy admin wins
PDF
SendGrid documentation & open source projects
PDF
Engage 2020-nerd-for-move-on-from-x pages
PPTX
Advanced Web Technology using Django.pptx
PDF
Building a Kubernetes Powered Central Go Modules Repository
PPT
Sitecore user group mumbai sitecore commerce extension
PPTX
Performance tuning
AD1545 - Extending the XPages Extension Library
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
Engage 2019: Modernising Your Domino and XPages Applications
SamSegalResume
High-level Guide: Upgrading to SharePoint 2013
Continuous Deployment
Making the Agile Leap to Continuous Deployment
JUC Europe 2015: Continuous Integration and Distribution in the Cloud with DE...
python full stack course in hyderabad...
python full stack course in madhapur, hyderabad
python full stack course in hyderabad...
Introducing wsgi_lineprof / PyCon JP 2017 LT
Engage 2018 adm04 - The lazy admin wins
Engage 2018 adm04 The lazy admin wins
SendGrid documentation & open source projects
Engage 2020-nerd-for-move-on-from-x pages
Advanced Web Technology using Django.pptx
Building a Kubernetes Powered Central Go Modules Repository
Sitecore user group mumbai sitecore commerce extension
Performance tuning
Ad

More from Paul Withers (20)

PDF
Engage 2019: Introduction to Node-Red
PDF
Engage 2019: AI What Is It Good For
PDF
Social Connections 14 - ICS Integration with Node-RED and Open Source
PDF
ICONUK 2018 - Do You Wanna Build a Chatbot
PDF
IBM Think Session 8598 Domino and JavaScript Development MasterClass
PDF
IBM Think Session 3249 Watson Work Services Java SDK
PDF
GraphQL 101
PDF
GraphQL 101
PDF
OpenNTF Domino API (ODA): Super-Charging Domino Development
PDF
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
PDF
Social Connections 2015 CrossWorlds and Domino
PDF
ICON UK 2015 - ODA and CrossWorlds
PDF
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
PDF
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
PPTX
OpenNTF Domino API - Overview Introduction
PDF
What's New and Next in OpenNTF Domino API (ICON UK 2014)
PDF
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
PDF
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
PDF
Embracing the power of the notes client
PDF
Beyond Domino Designer
Engage 2019: Introduction to Node-Red
Engage 2019: AI What Is It Good For
Social Connections 14 - ICS Integration with Node-RED and Open Source
ICONUK 2018 - Do You Wanna Build a Chatbot
IBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 3249 Watson Work Services Java SDK
GraphQL 101
GraphQL 101
OpenNTF Domino API (ODA): Super-Charging Domino Development
AD1279 "Marty, You're Not Thinking Fourth Dimensionally" - Troubleshooting XP...
Social Connections 2015 CrossWorlds and Domino
ICON UK 2015 - ODA and CrossWorlds
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
OpenNTF Domino API - Overview Introduction
What's New and Next in OpenNTF Domino API (ICON UK 2014)
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven
Embracing the power of the notes client
Beyond Domino Designer

Recently uploaded (20)

PPTX
Big Data Technologies - Introduction.pptx
PDF
Modernizing your data center with Dell and AMD
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
KodekX | Application Modernization Development
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
Big Data Technologies - Introduction.pptx
Modernizing your data center with Dell and AMD
NewMind AI Monthly Chronicles - July 2025
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Diabetes mellitus diagnosis method based random forest with bat algorithm
20250228 LYD VKU AI Blended-Learning.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
KodekX | Application Modernization Development
Building Integrated photovoltaic BIPV_UPV.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
MYSQL Presentation for SQL database connectivity
Understanding_Digital_Forensics_Presentation.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Unlocking AI with Model Context Protocol (MCP)
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
The AUB Centre for AI in Media Proposal.docx
Digital-Transformation-Roadmap-for-Companies.pptx

Engage 2014 OpenNTF Domino API Slides

  • 1. OpenNTF Domino API: The Community API Paul Withers – Intec Systems Ltd Martin Jinoch 20-3-2014 @EngageUG #engageug 1
  • 2. Paul Withers • IBM Champion • Author of XPages Extension Library • OpenNTF Director • Co-Developer of OpenNTF Domino API 20-3-2014 @EngageUG #engageug 2
  • 3. Martin Jinoch • Notes developer since version 3.0 • Java/XPages • Source control • Test driven development 20-3-2014 @EngageUG #engageug 3
  • 4. Agenda •Why Did We Bother? •Deployment and Configuration •What’s Available? •How Do I Convert My Code? 20-3-2014 @EngageUG #engageug 4
  • 5. Why Bother? 20-3-2014 @EngageUG #engageug 5 * See http://www.shoeboxblog.com/wp-content/uploads/2010/02/life-before- google-500x496.jpg
  • 6. Why Java? • One install per server • Run contexts • XPages • Java / JAR Design Elements • Agents (slightly different deployment model) • Applets / Servlets • Plugins (Client/Designer/OSGi) • DOTS Tasks • SSJS just runs Java methods • So most classes and methods are available in SSJS as well! 20-3-2014 @EngageUG #engageug 6
  • 7. Why Develop It? • Bridge gap between LotusScript and Java developers • Remove risk of infinite loops in DocumentCollections • No need to recycle • Take advantage of List and Sets (Collections) • More intuitively named parameters • No need to catch NotesExceptions • Pass more Java objects to methods • Lots of helper methods • In context Javadocs 20-3-2014 @EngageUG #engageug 7
  • 8. After? Paul Withers: I have a checkIsUnique() method that you pass a View, a Key, and the current Document. Would that be a useful addition to DominoUtils? Nathan T. Freeman: sure that looks useful Nathan T. Freeman: BUT... Nathan T. Freeman: you're forgetting something Nathan T. Freeman: you own the API :) Nathan T. Freeman: View.checkUnique(Object key, Document doc) 20-3-2014 @EngageUG #engageug 8
  • 9. Why Use It? • Upgrading to 9.0.1 (can be forked for 9.0) • Open source can be used • Don’t want to work out where you need to recycle now • Didn’t realise DateTimes and Vectors were so toxic • You prefer beer and chocolate and User Groups! 20-3-2014 @EngageUG #engageug 9
  • 10. Agenda •Why Did We Bother? •Deployment and Configuration •What’s Available? •How Do I Convert My Code? 20-3-2014 @EngageUG #engageug 10
  • 11. Deployment • Download from OpenNTF or download as part of OpenNTF Essentials from http://essentials.openntf.org • Upload Update Site to server • Issue console command “restart task http” • Sufficient for OSGi-dependent contexts since M4 20-3-2014 @EngageUG #engageug 11
  • 12. Deployment to Client / Designer • Install Update Site or OpenNTF Essentials via Widget Catalog or via File > Application > Install • Designed for Server and Client 9.0.1 20-3-2014 @EngageUG #engageug 12
  • 13. Enable Library for Each NSF • No draggable components, so we can’t enable it for you • Enable on Page Generation tab of Xsp Properties 20-3-2014 @EngageUG #engageug 13
  • 14. Configure Xsp Properties • org.openntf.domino.xsp= • godmode: session & database auto-converted to org.openntf.domino • marcel: always convert MIME • raid: run in debug mode • khan: turn on all fixes, e.g. appendItemValue() “I am…better.” “At what?” “Everything.” • e.g. org.openntf.domino.xsp=godmode,mime,khan 20-3-2014 @EngageUG #engageug 14
  • 15. Configure Xsp Properties for OpenLog •Same as in XPages OpenLog Logger • xsp.openlog.filepath • xsp.openlog.displayError • xsp.openlog.genericErrorMessage • xsp.openlog.email • xsp.openlog.debugLevel • xsp.openlog.suppressEventTrace 20-3-2014 @EngageUG #engageug 15
  • 16. Agenda •Why Did We Bother? •Deployment and Configuration •What’s Available? •How Do I Convert My Code? 20-3-2014 @EngageUG #engageug 16
  • 17. Packages • org.openntf.domino: core code • org.openntf.domino.designer: future DDE-specific code • org.openntf.domino.plugin: core packaged in a plugin • If you want to modify and test, build this • org.openntf.domino.xsp: OSGi-specific code • org.openntf.domino.xsp.feature: feature project • org.openntf.domino.xsp.update: update site project • Delete features & plugins folders, open site.xml, click Build All and export as General > File System 20-3-2014 @EngageUG #engageug 17
  • 18. Core API Packages • org.openntf.domino • Core Domino API interfaces • Import classes from this package • org.openntf.domino.ext • Extension interfaces • Look here for methods we’ve added • org.openntf.domino.impl • Implementations of interfaces • Look here for the actual code 20-3-2014 @EngageUG #engageug 18
  • 19. Key Additions • XPages OpenLog Logger • Transactional Processing • Database Event Listeners • Graph Database • Jobs and Tasks • Email Helper • Sync Helper • Document Scanner • Index Database 20-3-2014 @EngageUG #engageug 19
  • 20. Work in Progress • Classes for ALL Design Elements • Data Schemas • Name / Value Picker DataProviders • Read / write XPages, Custom Controls, JARs • Recycle performance optimisation • Index Database optimisation • Collection sorting and progress serialisation • AtFormulaParser – quicker 20-3-2014 @EngageUG #engageug 20
  • 22. Agenda •Why Did We Bother? •Deployment and Configuration •What’s Available? •How Do I Convert My Code? 20-3-2014 @EngageUG #engageug 22
  • 23. How do I convert my code? 1. Do nothing and use old code with a new one together (not recommended!) 2. Replace all implicit objects via godmode 3. Search and replace imports (lotus.domino -> org.openntf.domino) 4. Remove unnecessary code (try catch blocks, “throws NotesException”, recycle() calls, …) 5. Enjoy the power of helper methods 20-3-2014 @EngageUG #engageug 23
  • 24. How do I convert my code • Use old code with new one together Converting from new API objects to original and back via Factory.fromLotus() and Factory.toLotus() methods • org.openntf.domino.xsp=godmode iddqd anyone? • Change import lotus.domino -> org.openntf.domino Search and replace in DDE can do this for you for a whole project 20-3-2014 @EngageUG #engageug 24
  • 26. Links • Project on OpenNTF - http://www.openntf.org/internal/home.nsf/project.xsp?actio n=openDocument&name=OpenNTF%20Domino%20API • OpenNTF Essentials - http://essentials.openntf.org/ • Source code on GitHub - https://github.com/OpenNTF/ • Wiki articles - https://github.com/OpenNTF/org.openntf.domino/wiki/_pag es • OpenNTF Webinar (last year) - http://www.youtube.com/watch?v=g-u2IEEPAfM 20-3-2014 @EngageUG #engageug 26
  • 27. Questions! • Paul Withers • Intec Systems Ltd • pwithers@intec.co.uk • http://www.intec.co.uk/blog • twitter.com/paulswithers • Martin Jinoch • http://jinoch.cz • twitter.com/mjinoch 20-3-2014 @EngageUG #engageug 27