I recently completed reading Mastering XPages, Second Edition. I read the previous edition cover to cover and did the same for this edition — it reinforced my understanding of a many topics, corrected my understanding of a few topics and opened my eyes to some features I had not yet tried. In short, this extremely thorough reference covers everything from <a> links to z-index; it is a worthy successor to the original book and a valuable addition to any Notes developer’s library.
I love giant tech books, so this 1000+ page tome makes me hearken back to the days of plowing through several large volumes (in addition to the yellow books!) to learn everything I could about earlier versions of Notes and Domino. In recent years, lots of great information has been disseminated in smaller chunks via blogs and articles, but XPages as a platform is so broad that there is absolutely a place for such an in-depth authoritative reference.
Mastering XPages starts at the beginning, dipping its toes in the water with the history and foundation of XPages. It progressively builds from explaining the basics the Notes schema and JSF through to simple actions and programming, then wading into deeper waters of partial refreshes and mixing client- and server-side code, before diving into the deep end of advance performance tuning.
Even though XPages has only been around for 5 years, it was interesting to review the history and gain a renewed sense of appreciation of how far the platform has come in just a few years. (Remember the days of creating, saving, then cleaning up temporary documents just to exchange information with LotusScript agents?)
Why Read the Second Edition if You’ve already Read the First Edition?
Even if you’ve read the first edition, it is worthwhile to read the second edition, for several reasons:
- It is updated for Notes 8.5.3 and 9.x, with numerous tips and descriptions of new and updated properties and features, including the Extension Library that is now built into core Notes. (Examples include Data Views and mobile development design patterns and enhancements, including the new DeviceBean and touch-based events.)
- It contains several new chapters (and additional information in existing chapters), including mobile controls and tons of great information about performance and scalability.
- If you’ve been working with XPages for awhile since you read the first edition, you’ll find that your additional experience provides a stronger foundation to get more out of the book. Several years after reading the first book, I can much more easily grasp the more complicated topics.
Even though it’s a massive book, the writing style is fairly colloquial, making it easier to read than you might expect.
There’s a reminder not to execute admin commands on a production server ‘willy nilly’ and a demo of customizing a pager to spoof the Goooogle results pager with “Loooootus”. Bonus points for referring to the use of $$Return fields as a “black magic” practice!
It definitely does not read like a stuffy manual; the authors clearly explain topics from the most basic (view panels) to the inkhorn (advanced performance analysis and tuning).
Okay — it’s not quite that simple, but the new chapters on performance tuning are well worth the price of the book alone. Two new chapters dive deep into the bowels of the JSF lifecycle and heap dumps to provide critical information about application performance and scalability. Many other tips throughout the book also show how to build performant applications by efficient use of partial refreshes and partial execution, as well as XPiNC enhancements to optimize initial load time and the use of applications with a shared design.
Things I Learned
Even after working with XPages heavily for the past 4-5 years, there are a myriad of features that I either learned about or gained a better understanding of as a result of reading this book.
It was a refresher on features that I was aware of but rarely use:
- navigation rules
- the ability to assign access control to a panel
- the In Place Form control
- mask converters
createFormproperty of an XPage
- control declaration snippets
requestParamPrefixproperty of a document data source
- the generic
viewEntryobject that you can use to get the current view entry (based on the context) just like
currentDocumentgets the closest document data source
- the ability to programmatically get/set the custom properties of a different custom control from outside of that custom control
- the ability (since 8.5.3) to use
searchproperties of a view data source together (and the fact that column sorting icons are no longer disabled post-8.5.2 after a search was executed because now search and sort can work together)
I learned about some features that I wasn’t aware of:
- making Dynamic Content facets available to web crawlers
skipContainersproperty of a radio button
- the fact that IE11 does not work with the version of CKEditor in 9.0.1
I also learned more about a new feature that I’m well aware of but haven’t tested even though I complained for a long time that it was desperately needed:
- *cough* the SSJS debugger *cough*
And there’s plenty more where that came from. If you don’t know all of this already, it will be well worth your time to read this book. I still refer to the original Mastering XPages book from time to time and I’m sure I will refer to this edition numerous times in the future.