SlideShare a Scribd company logo
© 2014 IBM Corporation
BP204 It’s Not Infernal:
Dante’s Nine Circles of
XPages Heaven
Paul Withers, Intec Systems Ltd
Mike McGarel, Czarnowski Display Services Inc.
Paul Withers
ICS Consultant at Intec Systems Ltd
IBM Champion 2011-2014
Co-Author XPages Extension Library
OpenNTF Director
Contributor to OpenNTF
Blogger on XPages, IBM Domino®
Designer and beyond
– http://www.intec.co.uk/blog
Mike McGarel
Working with Web technologies for over 14 years
Working with IBM Notes® & IBM Domino® since version 4.6
Corporate developer
Site developer for MWLUG
3
Dante’s Inferno
Author: Dante Alighieri, 14th Century
Part of Divine Comedy with Purgatorio and Paradiso
Journey by Dante over Easter Weekend 1300
Dante rescued and guided by the Roman poet Virgil
“Lasciate ogne speranza, voi ch’intrate”
(“Abandon all hope, ye who enter here”)
4
The Circles
 First Circle: Limbo
 Second Circle: Lust
 Third Circle: Gluttony
 Fourth Circle: Greed
 Fifth Circle: Wrath
 Sixth Circle: Heresy
 Seventh Circle: Violence
 Eighth Circle: Fraud
 Ninth Circle: Treachery
5
First Circle: Limbo
6
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
Hybrid “Limbo” Applications
Add XPages into traditional Domino web applications
Use existing Domino databases as data source and new
XPages database for user interface
Add mobile interface
Add XPages for sidebar
7
SSJS – The “Limbo” Language
Server-side JavaScript leverages pre-existing knowledge
– JavaScript syntax
• NotesDocument.getUniversalID()
• @DbLookup(@DbName(),“myViewName”,2,
“[FAILSILENT]”)
– Domino objects use LotusScript names
– Many Formula Language @Functions supported
• Kathy Brown has blogged which ones are not
• http://www.runningnotes.net/index.php/2010/03/25/list-
of-formula-not-supported-in-xpages/
8
“Limbo” Property Values
Custom Language
<xp:text
value= “Database title is #{database.title}, database path
is #{javascript: @Subset(@DbName(), -1);}”>
</xp:text>
9
Demo
10
Converting LS to SSJS
Replace “Dim” with “var”
Replace “ As ” with “:”
Add “;”
Remember methods etc are case sensitive and need ()
GetAllDocumentsByKey – need to pass key as Vector
Full syntax required for interacting with Notes Items
RECYCLE!
11
Second Circle: Lust
12
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
It’s All About Wants
Users want:
– a familiar “look and feel”
– something easy to use
– to get in and out
You want them to want your app
13
Looks Matter
First impressions are key
Better looking “equals” works better
Steve McDonagh’s great series on design principles:
http://dominoyesmaybe.blogspot.com/2012/09/principals-of-
design-1-balance.html
14
Interface Makeovers
IBM’s OneUI (v3):
http://infolib.lotus.com/resources/oneui/3.0/docPublic/index.htm
Extension Library / Dojo widgets http://dojotoolkit.org
– XPages Help Application http://xhelp.openntf.org/
Twitter Bootstrap: http://getbootstrap.com
jQuery Plugins
– jQuery UI: http://jqueryui.com
15
16
Demo
17
Third Circle: Gluttony
18
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
Don’t Make Browsers Eat Too Much!
xsp.resource.aggregate=true
19
Temporary Gluttony – For Debugging!
xsp.client.resources.uncompressed=true
20
Fourth Circle: Greed
21
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
Avoid Greed on Server
22
Demo
23
Persistence Options
Keep Pages in Memory
– Remembering, remembering, remembering…
– xsp.persistence.mode=basic
– Best for…quick retrieval, few users
Keep Pages on Disk
– Writing…next? You want it again? Reading…
– xsp.persistence.mode=file
– Best for…lots of users, but slower retrieval
24
Persistence Options
Keep Only The Current Page in Memory
– Remembering, remembering, remembering…
– Oh, new page? Writing….and now…
– Remembering, remembering, remembering…
– xsp.persistence.mode=fileex
– Best for…lots of users, quick retrieval of current page
25
Persistence Options
GZip Persisted Files
– xsp.persistence.file.gzip
– Default=false
– Writing…next? You want it again? Reading…
Persist Files Asynchronously
– xsp.persistence.file.async
– Default=true
– Server busy, remembering. Next? (Writing, writing)
26
Persistence Options
Maximum Pages
– xsp.persistence.tree.maxviews
• Default=4
• Remembering, remembering, remembering
• Only applies when xsp.persistence.mode=basic
– xsp.persistence.file.maxviews
• Default=10
• Writing, retrieving, writing, writing, discarding…
• Default folder defined by xsp.persistence.dir.xspstate
27
Page Persistence Mode
xsp.persistence.viewstate=fulltree
– Default option, whole component tree persisted
xsp.persistence.viewstate=nostate
–No component tree stored, similar to
xsp.session.transient=true
xsp.persistence.viewstate=delta
– Valid if pages stored in memory
– Only stores changes since page loaded
28
Page Persistence Mode
xsp.persistence.viewstate=deltaex
– Valid if multiple pages stored in memory
– Stores full component tree for current page, deltas for
others
Viewstate property on XPage allows developer to define at
page level
29
xsp.session.transient
xsp.session.transient=“false” sets XPage stateless
– Default VALUES overridden between requests
– Default STATES not overridden
NOT “Go to next page from current”
– INSTEAD “Go to next page from default”
NOT “Toggle show detail from previous state”
– INSTEAD “Toggle show detail from default”
Great for large, read only pages, Websites – no storage
30
Fifth Circle: Wrath
31 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
More Responsiveness = Less Anger
Partial page refreshes
Client-side processing
– Dojo JavaScript framework (included with XPages)
– jQuery JavaScript framework (easily added)
– Other JavaScript frameworks or custom scripts
Server-side processing
– XAgent (XPage of just code with UI redirect)
– Java (design element or WebContentWEB-INFsrc)
32
Meet the Users’ Expectations
It’s a “mad mad mad mad world”
– Devices
– Locations
– Connectivity
Responsive design options:
– Dojo layout container
– Bootstrap responsive
 Embedded experience
33
Demo
34
Sixth Circle: Heresy
35
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
Java
“IBM always wanted us to use Java” – NO!
36
Why?
#{javascript:…} means parse this string using SSJS rules
Pass commands to VariableResolver
Look for corresponding variable name
Map to a Java object/method
So why not go straight to the source?
37
Demo
38
OpenNTF Domino API
39
OpenNTF Domino API
 Document.replaceItemValue(“myDateField”, new Date());
– Or Document.put(“myDateField”, new Date());
 for (Document doc : dc) {…}
 Transactional Processing
 SyncHelper
 Email Helpers
 OpenLog
 Document Scanner
 Database Listeners
40
Seventh Circle: Violence
41
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
Themes
Themes can force controls to behave consistently
But some elements cannot be manipulated easily
–EventHandlers don’t have a default stylekit
–They can have a themeId applied though
Themes loaded at end of page rendering
–getStyleKitFamily() to find default theme id
–Or use Mark Leusink’s debug toolbar
42
“Strong-Arming” All Events
Dojo Standby Control on OpenNTF
– Hijacks partial refreshes
– Adds standby message during long-running partial
refreshes
– http://openntf.org/XSnippets.nsf/snippet.xsp?id=standby-
dialog-custom-control
43
Eighth Circle: Fraud
44
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
SessionScope
SessionScope is fraudulent
– Session only for current application
– Browser session, not user session
45
HTTPOnly Cookies
Since Domino 9.0 SessionID and DomAuthSessId are now
HTTPOnly
Cannot be modified or removed via JavaScript
–http://openntf.org/XSnippets.nsf/snippet.xsp?id=clear-
session-whole-server does not work
Cannot be intercepted
46
How To Add Your Own HTTPOnly Cookie
Serdar Basegmez XSnippet
http://openntf.org/XSnippets.nsf/snippet.xsp?id=extended-
cookie-implementation-for-httponly-cookies
47
Ninth Circle: Treachery
48
Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
Beyond Domino Designer
Generate Javadocs
Eclipse Modeling Tools to create UML designs
– Use latest Eclipse for RCP and RAP Developers
– Download from Eclipse Marketplace
Atlassian SourceTree and Perforce P4Merge
SHOW 103 Wednesday 8am
http://www.slideshare.net/paulswithers1/beyond-domino-
designer
49
We climbed, he first, I following his steps,
Till on our view the beautiful lights of heaven
Dawned through a circular opening in the cave:
Thence issuing we again beheld the stars
Dante, Inferno, Canto 34 130-133
50
Summary
XPages is a gateway to other worlds
It is a journey – small steps lead to great strides
Learn from what others have done
Be prepared for the “Great Beyond”
51
Other Sessions
 SHOW103: Source Control 101: Implementing an End-to-End Solution
 SHOW104: Practical Java
 AD201: Domino Application Development: Today and Tomorrow
 AD202: Get The Best Out of Bootstrap4XPages
 AD207: Widgets, LiveText and Now OpenSocial
 AD209: Making Your Team More Productive with IBM Domino Designer JMP101: Java for
XPages Development
 JMP106: Make Your Business Open and Social using IBM Notes Social Edition 9.0.1
 BP207: Don’t Reinvent The Wheel – Re(use) Open Source Software from OpenNTF
 GURU101: Gurupalooza
52
IBM Resources
 XPages.Info: http://xpages.info
 XPages Forum: http://www-10.lotus.com/ldd/xpagesforum.nsf
 Notes/Domino Application Development Wiki: http://www-10.lotus.com/ldd/ddwiki.nsf
 Collaboration Today: http://collaborationtoday.info
 OpenNTF: http://openntf.org
 OpenNTF Snippets: http://openntf.org/XSnippets.nsf/home.xsp
 The “XPages trilogy”:
– Mastering XPages, 2nd Edition due shortly (IBM Press)
– XPages Extension Library (IBM Press)
– XPages Portable Command Guide (IBM Press)
53
Community Resources
 Planet Lotus: http://planetlotus.org
 Notes in 9 (videos): http://www.notesin9.com
 XPages cheat sheets: http://www.xpagescheatsheets.com
 YouAtNotes XPages wiki: http://www.xpageswiki.com
 Stack Overflow: http://stackoverflow.com/questions/tagged/xpages
54
 Access Connect Online to complete your session surveys using any:
– Web or mobile browser
– Connect Online kiosk onsite
55
Mike McGarel
Czarnowski Display Services Inc.
mcgarelgramming@gmail.com
http://www.bleedyellow.com/blogs/McGarelGramming/
@mmcgarel
Paul Withers
Intec Systems Ltd
pwithers@intec.co.uk
http://www.intec.co.uk/blog
@PaulSWithers
56
Acknowledgements and Disclaimers
© Copyright IBM Corporation 2014. All rights reserved.
 U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 IBM, the IBM logo, ibm.com, IBM Collaboration Solutions and IBM Domino are trademarks or registered trademarks of International Business Machines Corporation in the United States,
other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S.
registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A
current list of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml
Availability. 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.
The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational purposes only, and are neither
intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to verify the completeness and accuracy of the information
contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise
related to, this presentation or any other materials. Nothing contained in this presentation 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.
All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs and
performance characteristics may vary by customer. 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.
Illustrations of the Inferno courtesy of Mihai Marius Mihu, http://www.flickr.com/photos/mihiamariusmihu/

More Related Content

PDF
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
PDF
Dr. Strangelove, or how I learned to love plugin development
PPTX
CollabSphere 2018 - Java in Domino After XPages
PPTX
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
PDF
DNUG Webcast: IBM Notes V10 Performance Boost
PPT
XPages -Beyond the Basics
PPTX
ODP
DanNotes XPages Mobile Controls
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
Dr. Strangelove, or how I learned to love plugin development
CollabSphere 2018 - Java in Domino After XPages
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
DNUG Webcast: IBM Notes V10 Performance Boost
XPages -Beyond the Basics
DanNotes XPages Mobile Controls

What's hot (20)

PDF
UKLUG 2012 - XPages, Beyond the basics
PDF
AD201 - IBM Domino Application Development Today And Tomorrow
ODP
Java and XPages
PPTX
MWLUG 2015 - An Introduction to MVC
PPTX
Automated ui-testing
PPT
Demystifying Maven
ODP
An Introduction to Maven Part 1
PPTX
Log management (elk) for spring boot application
PPSX
Maven Presentation - SureFire vs FailSafe
PPTX
BDD using Cucumber JVM
PDF
Maven tutorial
PPT
Maven Introduction
PDF
Java Builds with Maven and Ant
PDF
Apache Maven In 10 Slides
PPTX
PPT
Using Maven 2
PDF
Bootstrap4XPages
PPTX
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014
PPT
Maven Overview
ODP
Get the best out of Bootstrap with Bootstrap4XPages (AD202)
UKLUG 2012 - XPages, Beyond the basics
AD201 - IBM Domino Application Development Today And Tomorrow
Java and XPages
MWLUG 2015 - An Introduction to MVC
Automated ui-testing
Demystifying Maven
An Introduction to Maven Part 1
Log management (elk) for spring boot application
Maven Presentation - SureFire vs FailSafe
BDD using Cucumber JVM
Maven tutorial
Maven Introduction
Java Builds with Maven and Ant
Apache Maven In 10 Slides
Using Maven 2
Bootstrap4XPages
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014
Maven Overview
Get the best out of Bootstrap with Bootstrap4XPages (AD202)
Ad

Viewers also liked (6)

PDF
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
PDF
Social Connections 2015 CrossWorlds and Domino
PDF
Learning To Run - XPages for Lotus Notes Client Developers
PDF
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
PDF
BP208 Fabulous Feats with @Formula
PDF
What's New and Next in OpenNTF Domino API (ICON UK 2014)
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
Social Connections 2015 CrossWorlds and Domino
Learning To Run - XPages for Lotus Notes Client Developers
Ad108 - XPages in the IBM Lotus Notes Client - A Deep Dive!
BP208 Fabulous Feats with @Formula
What's New and Next in OpenNTF Domino API (ICON UK 2014)
Ad

Similar to IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven (20)

PDF
May 2014-webinar
PDF
It's Not Infernal: Dante's Nine Circles of XPages Heaven
PDF
LAMP is so yesterday, MEAN is so tomorrow! :)
PPTX
Do Try This at Home! Extend IBM Connections using IBM Worklight
PDF
Progressive Web Apps / GDG DevFest - Season 2016
PPT
Techniques For A Modern Web UI (With Notes)
PDF
UXDev Summit Keynote : A real world story of Angular and Apache Unomi integra...
PPT
Aucd ppt
DOCX
A report on mvc using the information
PDF
Professional web development with libraries
PDF
Microservice pitfalls
PPSX
Electron - Build cross platform desktop apps
PPT
Using Web Simulations
PPT
Enterprise PHP (PHP London Conference 2008)
PDF
ICONUK 2014 - From Idea To App
PDF
Learning Serverless Design Develop and Deploy with Confidence 1st Edition Jas...
PPTX
Django simplified : by weever mbakaya
PDF
micro-frontends-with-vuejs
PDF
Developing Backbone js Applications Addy Osmani
PDF
Wireless Wednesdays: Part 2
May 2014-webinar
It's Not Infernal: Dante's Nine Circles of XPages Heaven
LAMP is so yesterday, MEAN is so tomorrow! :)
Do Try This at Home! Extend IBM Connections using IBM Worklight
Progressive Web Apps / GDG DevFest - Season 2016
Techniques For A Modern Web UI (With Notes)
UXDev Summit Keynote : A real world story of Angular and Apache Unomi integra...
Aucd ppt
A report on mvc using the information
Professional web development with libraries
Microservice pitfalls
Electron - Build cross platform desktop apps
Using Web Simulations
Enterprise PHP (PHP London Conference 2008)
ICONUK 2014 - From Idea To App
Learning Serverless Design Develop and Deploy with Confidence 1st Edition Jas...
Django simplified : by weever mbakaya
micro-frontends-with-vuejs
Developing Backbone js Applications Addy Osmani
Wireless Wednesdays: Part 2

More from Paul Withers (20)

PDF
Engage 2019: Introduction to Node-Red
PDF
Engage 2019: Modernising Your Domino and XPages Applications
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
ICON UK 2015 - ODA and CrossWorlds
PDF
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
PPTX
OpenNTF Domino API - Overview Introduction
PDF
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
PDF
Engage 2014 OpenNTF Domino API Slides
PDF
Embracing the power of the notes client
PDF
Beyond Domino Designer
PDF
DanNotes 2013: OpenNTF Domino API
PDF
BP206 It's Not Herculean: 12 Tasks Made Easier with IBM Domino XPages
Engage 2019: Introduction to Node-Red
Engage 2019: Modernising Your Domino and XPages Applications
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...
ICON UK 2015 - ODA and CrossWorlds
IBM ConnectED 2015 - MAS103 XPages Performance and Scalability
OpenNTF Domino API - Overview Introduction
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
Engage 2014 OpenNTF Domino API Slides
Embracing the power of the notes client
Beyond Domino Designer
DanNotes 2013: OpenNTF Domino API
BP206 It's Not Herculean: 12 Tasks Made Easier with IBM Domino XPages

Recently uploaded (20)

PPTX
MYSQL Presentation for SQL database connectivity
PDF
KodekX | Application Modernization Development
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Approach and Philosophy of On baking technology
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
NewMind AI Monthly Chronicles - July 2025
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Empathic Computing: Creating Shared Understanding
PPT
Teaching material agriculture food technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Modernizing your data center with Dell and AMD
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
MYSQL Presentation for SQL database connectivity
KodekX | Application Modernization Development
Agricultural_Statistics_at_a_Glance_2022_0.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
“AI and Expert System Decision Support & Business Intelligence Systems”
Approach and Philosophy of On baking technology
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
NewMind AI Monthly Chronicles - July 2025
The AUB Centre for AI in Media Proposal.docx
20250228 LYD VKU AI Blended-Learning.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
NewMind AI Weekly Chronicles - August'25 Week I
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Empathic Computing: Creating Shared Understanding
Teaching material agriculture food technology
Spectral efficient network and resource selection model in 5G networks
Chapter 3 Spatial Domain Image Processing.pdf
Modernizing your data center with Dell and AMD
CIFDAQ's Market Insight: SEC Turns Pro Crypto

IBM Connect 2014 BP204: It's Not Infernal: Dante's Nine Circles of XPages Heaven

  • 1. © 2014 IBM Corporation BP204 It’s Not Infernal: Dante’s Nine Circles of XPages Heaven Paul Withers, Intec Systems Ltd Mike McGarel, Czarnowski Display Services Inc.
  • 2. Paul Withers ICS Consultant at Intec Systems Ltd IBM Champion 2011-2014 Co-Author XPages Extension Library OpenNTF Director Contributor to OpenNTF Blogger on XPages, IBM Domino® Designer and beyond – http://www.intec.co.uk/blog
  • 3. Mike McGarel Working with Web technologies for over 14 years Working with IBM Notes® & IBM Domino® since version 4.6 Corporate developer Site developer for MWLUG 3
  • 4. Dante’s Inferno Author: Dante Alighieri, 14th Century Part of Divine Comedy with Purgatorio and Paradiso Journey by Dante over Easter Weekend 1300 Dante rescued and guided by the Roman poet Virgil “Lasciate ogne speranza, voi ch’intrate” (“Abandon all hope, ye who enter here”) 4
  • 5. The Circles  First Circle: Limbo  Second Circle: Lust  Third Circle: Gluttony  Fourth Circle: Greed  Fifth Circle: Wrath  Sixth Circle: Heresy  Seventh Circle: Violence  Eighth Circle: Fraud  Ninth Circle: Treachery 5
  • 6. First Circle: Limbo 6 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 7. Hybrid “Limbo” Applications Add XPages into traditional Domino web applications Use existing Domino databases as data source and new XPages database for user interface Add mobile interface Add XPages for sidebar 7
  • 8. SSJS – The “Limbo” Language Server-side JavaScript leverages pre-existing knowledge – JavaScript syntax • NotesDocument.getUniversalID() • @DbLookup(@DbName(),“myViewName”,2, “[FAILSILENT]”) – Domino objects use LotusScript names – Many Formula Language @Functions supported • Kathy Brown has blogged which ones are not • http://www.runningnotes.net/index.php/2010/03/25/list- of-formula-not-supported-in-xpages/ 8
  • 9. “Limbo” Property Values Custom Language <xp:text value= “Database title is #{database.title}, database path is #{javascript: @Subset(@DbName(), -1);}”> </xp:text> 9
  • 11. Converting LS to SSJS Replace “Dim” with “var” Replace “ As ” with “:” Add “;” Remember methods etc are case sensitive and need () GetAllDocumentsByKey – need to pass key as Vector Full syntax required for interacting with Notes Items RECYCLE! 11
  • 12. Second Circle: Lust 12 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 13. It’s All About Wants Users want: – a familiar “look and feel” – something easy to use – to get in and out You want them to want your app 13
  • 14. Looks Matter First impressions are key Better looking “equals” works better Steve McDonagh’s great series on design principles: http://dominoyesmaybe.blogspot.com/2012/09/principals-of- design-1-balance.html 14
  • 15. Interface Makeovers IBM’s OneUI (v3): http://infolib.lotus.com/resources/oneui/3.0/docPublic/index.htm Extension Library / Dojo widgets http://dojotoolkit.org – XPages Help Application http://xhelp.openntf.org/ Twitter Bootstrap: http://getbootstrap.com jQuery Plugins – jQuery UI: http://jqueryui.com 15
  • 16. 16
  • 18. Third Circle: Gluttony 18 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 19. Don’t Make Browsers Eat Too Much! xsp.resource.aggregate=true 19
  • 20. Temporary Gluttony – For Debugging! xsp.client.resources.uncompressed=true 20
  • 21. Fourth Circle: Greed 21 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 22. Avoid Greed on Server 22
  • 24. Persistence Options Keep Pages in Memory – Remembering, remembering, remembering… – xsp.persistence.mode=basic – Best for…quick retrieval, few users Keep Pages on Disk – Writing…next? You want it again? Reading… – xsp.persistence.mode=file – Best for…lots of users, but slower retrieval 24
  • 25. Persistence Options Keep Only The Current Page in Memory – Remembering, remembering, remembering… – Oh, new page? Writing….and now… – Remembering, remembering, remembering… – xsp.persistence.mode=fileex – Best for…lots of users, quick retrieval of current page 25
  • 26. Persistence Options GZip Persisted Files – xsp.persistence.file.gzip – Default=false – Writing…next? You want it again? Reading… Persist Files Asynchronously – xsp.persistence.file.async – Default=true – Server busy, remembering. Next? (Writing, writing) 26
  • 27. Persistence Options Maximum Pages – xsp.persistence.tree.maxviews • Default=4 • Remembering, remembering, remembering • Only applies when xsp.persistence.mode=basic – xsp.persistence.file.maxviews • Default=10 • Writing, retrieving, writing, writing, discarding… • Default folder defined by xsp.persistence.dir.xspstate 27
  • 28. Page Persistence Mode xsp.persistence.viewstate=fulltree – Default option, whole component tree persisted xsp.persistence.viewstate=nostate –No component tree stored, similar to xsp.session.transient=true xsp.persistence.viewstate=delta – Valid if pages stored in memory – Only stores changes since page loaded 28
  • 29. Page Persistence Mode xsp.persistence.viewstate=deltaex – Valid if multiple pages stored in memory – Stores full component tree for current page, deltas for others Viewstate property on XPage allows developer to define at page level 29
  • 30. xsp.session.transient xsp.session.transient=“false” sets XPage stateless – Default VALUES overridden between requests – Default STATES not overridden NOT “Go to next page from current” – INSTEAD “Go to next page from default” NOT “Toggle show detail from previous state” – INSTEAD “Toggle show detail from default” Great for large, read only pages, Websites – no storage 30
  • 31. Fifth Circle: Wrath 31 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 32. More Responsiveness = Less Anger Partial page refreshes Client-side processing – Dojo JavaScript framework (included with XPages) – jQuery JavaScript framework (easily added) – Other JavaScript frameworks or custom scripts Server-side processing – XAgent (XPage of just code with UI redirect) – Java (design element or WebContentWEB-INFsrc) 32
  • 33. Meet the Users’ Expectations It’s a “mad mad mad mad world” – Devices – Locations – Connectivity Responsive design options: – Dojo layout container – Bootstrap responsive  Embedded experience 33
  • 35. Sixth Circle: Heresy 35 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 36. Java “IBM always wanted us to use Java” – NO! 36
  • 37. Why? #{javascript:…} means parse this string using SSJS rules Pass commands to VariableResolver Look for corresponding variable name Map to a Java object/method So why not go straight to the source? 37
  • 40. OpenNTF Domino API  Document.replaceItemValue(“myDateField”, new Date()); – Or Document.put(“myDateField”, new Date());  for (Document doc : dc) {…}  Transactional Processing  SyncHelper  Email Helpers  OpenLog  Document Scanner  Database Listeners 40
  • 41. Seventh Circle: Violence 41 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 42. Themes Themes can force controls to behave consistently But some elements cannot be manipulated easily –EventHandlers don’t have a default stylekit –They can have a themeId applied though Themes loaded at end of page rendering –getStyleKitFamily() to find default theme id –Or use Mark Leusink’s debug toolbar 42
  • 43. “Strong-Arming” All Events Dojo Standby Control on OpenNTF – Hijacks partial refreshes – Adds standby message during long-running partial refreshes – http://openntf.org/XSnippets.nsf/snippet.xsp?id=standby- dialog-custom-control 43
  • 44. Eighth Circle: Fraud 44 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 45. SessionScope SessionScope is fraudulent – Session only for current application – Browser session, not user session 45
  • 46. HTTPOnly Cookies Since Domino 9.0 SessionID and DomAuthSessId are now HTTPOnly Cannot be modified or removed via JavaScript –http://openntf.org/XSnippets.nsf/snippet.xsp?id=clear- session-whole-server does not work Cannot be intercepted 46
  • 47. How To Add Your Own HTTPOnly Cookie Serdar Basegmez XSnippet http://openntf.org/XSnippets.nsf/snippet.xsp?id=extended- cookie-implementation-for-httponly-cookies 47
  • 48. Ninth Circle: Treachery 48 Mihai Marius Mihu, http://www.flickr.com/photos/mihaimariusmihu/
  • 49. Beyond Domino Designer Generate Javadocs Eclipse Modeling Tools to create UML designs – Use latest Eclipse for RCP and RAP Developers – Download from Eclipse Marketplace Atlassian SourceTree and Perforce P4Merge SHOW 103 Wednesday 8am http://www.slideshare.net/paulswithers1/beyond-domino- designer 49
  • 50. We climbed, he first, I following his steps, Till on our view the beautiful lights of heaven Dawned through a circular opening in the cave: Thence issuing we again beheld the stars Dante, Inferno, Canto 34 130-133 50
  • 51. Summary XPages is a gateway to other worlds It is a journey – small steps lead to great strides Learn from what others have done Be prepared for the “Great Beyond” 51
  • 52. Other Sessions  SHOW103: Source Control 101: Implementing an End-to-End Solution  SHOW104: Practical Java  AD201: Domino Application Development: Today and Tomorrow  AD202: Get The Best Out of Bootstrap4XPages  AD207: Widgets, LiveText and Now OpenSocial  AD209: Making Your Team More Productive with IBM Domino Designer JMP101: Java for XPages Development  JMP106: Make Your Business Open and Social using IBM Notes Social Edition 9.0.1  BP207: Don’t Reinvent The Wheel – Re(use) Open Source Software from OpenNTF  GURU101: Gurupalooza 52
  • 53. IBM Resources  XPages.Info: http://xpages.info  XPages Forum: http://www-10.lotus.com/ldd/xpagesforum.nsf  Notes/Domino Application Development Wiki: http://www-10.lotus.com/ldd/ddwiki.nsf  Collaboration Today: http://collaborationtoday.info  OpenNTF: http://openntf.org  OpenNTF Snippets: http://openntf.org/XSnippets.nsf/home.xsp  The “XPages trilogy”: – Mastering XPages, 2nd Edition due shortly (IBM Press) – XPages Extension Library (IBM Press) – XPages Portable Command Guide (IBM Press) 53
  • 54. Community Resources  Planet Lotus: http://planetlotus.org  Notes in 9 (videos): http://www.notesin9.com  XPages cheat sheets: http://www.xpagescheatsheets.com  YouAtNotes XPages wiki: http://www.xpageswiki.com  Stack Overflow: http://stackoverflow.com/questions/tagged/xpages 54
  • 55.  Access Connect Online to complete your session surveys using any: – Web or mobile browser – Connect Online kiosk onsite 55 Mike McGarel Czarnowski Display Services Inc. mcgarelgramming@gmail.com http://www.bleedyellow.com/blogs/McGarelGramming/ @mmcgarel Paul Withers Intec Systems Ltd pwithers@intec.co.uk http://www.intec.co.uk/blog @PaulSWithers
  • 56. 56 Acknowledgements and Disclaimers © Copyright IBM Corporation 2014. All rights reserved.  U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.  IBM, the IBM logo, ibm.com, IBM Collaboration Solutions and IBM Domino are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml Availability. 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. The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this presentation 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. All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs and performance characteristics may vary by customer. 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. Illustrations of the Inferno courtesy of Mihai Marius Mihu, http://www.flickr.com/photos/mihiamariusmihu/