Upload
michael-mcgarel
View
3.870
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Do not abandon all hope, ye who enter here! Your very own Dante and Virgil will take you through a divine comedy of nine circles that show that XPages is more paradise than perdition. We'll show how XPages and related concepts like OSGi plugins make XPages a modern and vibrant development technology for web, mobile and rich client. On the way we'll guide you past some pitfalls to avoid becoming one of the lost souls. When we re-emerge, you'll see the sky's the limit with star-studded opportunities. (Presented at IBM Connect 2014)
Citation preview
© 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 WebContent\WEB-INF\src)
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. [email protected] http://www.bleedyellow.com/blogs/McGarelGramming/ @mmcgarel
Paul Withers Intec Systems Ltd [email protected] 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 Internation al 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 w ith 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 regi stered or common law trademarks in other countries. A
current l ist of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml
Av ailability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all cou ntries 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 ma de 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 responsi ble 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 t he effect of, creating any warranties or representations from IBM or
its suppliers or l icensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software.
All customer examples described are presented as il lustrations 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 ef fect 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/