| Recent Blog Posts
IBM ConnectED 2015|
Wed, Jan 21st 2015 8:10a Paul Withers
In just a short few days, fellow IBM Champion Tim Malone and myself (Paul Withers) will be heading off to IBM ConnectED. With one less day but just as much to do, it’s likely to be even more hectic than ever. Here’s a summary of things I intend to be involved in.
OpenNTF Domino API / CrossWorlds
One of the key aspects for the week for me is to touch base with the OpenNTF Domino API team and particularly get up to speed with CrossWorlds. CrossWorlds was a new project that came into be
Single Copy XPage Design and Development Best Practice Challenges|
Tue, Jan 6th 2015 5:15a Paul Withers
For the first time I’ve got an application that would benefit from Single Copy XPage Design. The challenge is how to develop that in a way that can best be managed via source control and deployed through development, test and live environments. That’s because, unlike design inheritance, Single Copy XPage Design is set in Domino Designer, in the Application Properties, on the XPages tab.
There are two issues here:
The literal path is stored in the design, so all environments need to
SourceTree and Git/Mercurial: Important Information|
Fri, Dec 19th 2014 8:09a Paul Withers
For anyone who has used the slides from my Show and Tell on source control in January or the subsequent NotesIn9 episode, the recommended Git / Mercurial client was SourceTree. It’s an excellent tool for those who prefer a GUI and runs on Windows and Mac. The advice at the time was to use the embedded Git / Mercurial. For most XPages developers, who were only pushing and retrieving files via SourceTree, that was adequate.
However, overnight I became aware of a security vulnerability with G
OpenNTF Domino API: New Release and Serializing Databases / Documents|
Wed, Sep 3rd 2014 6:12a Paul Withers
Nathan has uploaded a new release of OpenNTF Domino API. There are a few significant differences in the upload this time.
Firstly there is a separate install for Designer Client and Domino Server. That’s to minimise the footprint for the server. Those who have used M4.5 may have noticed the Javadoc support was lost, because we were packaging org.openntf.domino as a jar and incorporating that in the plugin. That meant Domino Designer “couldn’t see” the source files, from w
Why My XPages Buttons Are Only Ever “Buttons”|
Fri, Aug 22nd 2014 8:15a Paul Withers
Buttons in XPages are interesting and potentially dangerous elements. They’re dangerous, mainly to less experienced XPages developers, because they have this apparently helpful combo box that immediately attracts the eye for Button type.
Cancel is useful, but to be honest I never set that. All it does, if you look at the source pane, is set immediate=”true”. Based on the level of understanding I’ve got now of tuning events, it makes more sense to set that on the Events
Quick Tip to Quickly Jump To Where You Need to Work|
Mon, Aug 18th 2014 6:12a Paul Withers
Moment of most celebrated enlightenment usually comes from putting together a frustration with a piece of knowledge gleaned for a completely unrelated reason. A couple of days ago I had such an epiphany.
Often when I’m developing I need to check something somewhere else on the XPage or Custom Control. Or I need to add a custom property to a Custom Control, for which I need to position the cursor on the xp:view element of the Custom Control in order to see the Custom Properties panel. But I
10 Reasons All Companies Should Use Open Source|
Fri, Aug 15th 2014 6:12a Paul Withers
After one of my sessions at IBM Connect I was approached by a developer whose company would not use open source. The comment made me despair more than a little and has festered for some time. I’ve used code and projects from OpenNTF for many, many years before subsequently contributing to OpenNTF. Obviously as a contributor to and now director of OpenNTF my personal opinion on whether or not open source should be used is clear. Not allowing your developers to use open source is like expect
The Perils of getColumnValues().get(0)|
Sun, Jul 20th 2014 4:12p Paul Withers
Bill F posed a good question on StackOverflow about the issue of object.recycle and when to use it. It’s un understandable question and one I hit years ago after crashing a server looping through 20,000 documents in a search. I raised a PMR, got a response directing me to technotes on recycling in Java. Searching help, wikis and other places gave me no documentation on recycling in SSJS, which gave me reason to believe I was the first to hit the problem in XPages. So I blogged about it at
XPages Build Project Investigations Improvement|
Wed, Jul 9th 2014 7:15a Paul Withers
Some time ago I wrote about how you have to build twice if you have Build Automatically switched off, then open an application in Designer and make a change – the first build was incremental.
Just to revisit, I would always recommend having Build Automatically switched off unless you’re in an instance of Designer that can only ever have access to a local Domino server or local applications. Building a database remotely is not quick. Building a database has been known to break it if t
Triggering an EventHandler from Another Button|
Tue, Jul 8th 2014 7:15a Paul Withers
Today there was a question on StackOverflow about how to trigger an eventHandler of control A from control B. I knew I’d done it before, but couldn’t remember where and couldn’t find where I’d blogged on it. So here is the way I originally did it and the better way.
The Padawan’s Way
Once you start going to the source pane, you see much more than you do in the Design pane. One of those things you see is that you can click on an xp:eventHandler component and you see
What Happens When An XPage Loads?|
Wed, Jul 2nd 2014 4:11p Paul Withers
There have been a few questions lately on StackOverflow trying to troubleshoot activity during the initial page load. So I thought I’d write a post to try to clarify the process. This certainly helps me pre-empt some functionality and provides an explanation for some of the questions I’ve seen. Using code from Jesse Gallagher’s XPages Scaffolding in projects has really helped give me this understanding, so I’d like to give Jesse a shoutout for his work.
ViewHandlers and C
10 Steps to deploying a successful social business platform Step 10 – Dismantle delivery team|
Mon, Jun 16th 2014 1:12p Paul Withers
If all has gone to plan, then a point will be reached (between two–three years on) where it is sensible to dismantle the delivery team and to replace them with platform managers from the different de-partments as the collaborative community matures.
This does not necessarily mean that personnel who worked in the delivery team are no longer required, but rather that the role will have changed from a design and development role to a second line platform support and maintenance position.
10 Steps to deploying a successful social business platform Step 9: Now paint the bridge from the other end|
Mon, Jun 16th 2014 1:12p Paul Withers
With an established group of champions and leaders in place and 2nd wavers starting to make use of the platform, the delivery team can now look at the next phase of the platform development and follow many of the steps completed above. In terms of the next phase, much will depend on the nature of the business and its priorities. That said, there are today a number of digital developments that all companies will be obliged to evaluate:
Social media integration with social business;
Document Wrappers, Combo Boxes and Blank Fields|
Fri, Jun 13th 2014 7:12a Paul Withers
In a recent project I’ve extended the document wrapper Tim Tripcony showed in his NotesIn9 series on XPages and Java. Previously I’ve just used the dominoDocument datasource on the XPage. Today I was battling with a problem when editing a document that had been created in Notes. I was getting the very helpful message “Validation Error: Value is not valid”, with no help on which field it was referring to.
I eventually tracked it down to a Combo Box. On the underlying docum
10 Steps to deploying a successful social business platform Step 8: Use platform analytics to inform next action|
Fri, Jun 13th 2014 6:12a Paul Withers
Just as there is no real ‘go live date’ for a collaboration platform, there is also no end of project date. The collaboration community grows and needs to be maintained at all times. With most 2nd wavers now on the platform, usage and interaction will mushroom and this is the point where the delivery team needs to be able to gather platform analytics which they can share with the business and which will inform their next actions.
So, for example, an HR initiative around talent management can
10 Steps to deploying a successful social business platform Step 5: Identify champions and leaders|
Wed, Jun 4th 2014 8:15a Paul Withers
As a result of the immersion workshops the delivery team will be pleasantly surprised to see natural platform champions and leaders emerge. These are people who are either regular users of networking technology in their private lives (champions), or they are people who can immediately see the business benefits to be gained from this way of working (leaders).
Identifying and ‘recruiting’ these people to help develop the company’s collaboration goal is the number one priority of the delivery
10 Steps to deploying a successful social business platform Step 7: Roll out in phases|
Wed, Jun 4th 2014 8:15a Paul Withers
There is no definitive ‘live date’ for a social business platform. With both 1st and 2nd wavers it is necessary to develop it in stages. After all, these people will be busy with their respective jobs and the time that they can devote to the platform in the early stages will vary enormously. This is the art of the community manager – the ability to work with users to identify a few simple business tasks that can be performed solely in the platform. They should then assist the business to c
10 Steps to deploying a successful social business platform Step 6: Seed content in consulted structure|
Wed, Jun 4th 2014 8:15a Paul Withers
Working with the 1st wavers, the delivery team can begin to create the platform structure that will increase chances of successful adoption. They should decide how many communities there needs to be, which ones will be private, and which ones will be public. They should cover a range of house-keeping topics and should agree best practices based on the specific company culture for things like tagging conventions, user profiles, blogs, wikis, and file sharing.
Most important of all, however, is th
A Cool Use for Component’s Binding Property|
Tue, Jun 3rd 2014 8:15a Paul Withers
A few months ago Tim Tripcony blogged about a component’s binding property which was followed up with a NotesIn9 episode. On Tim’s blog, Jesse Gallagher asked if it had led to any cool app-structuring breakthroughs.
While preparing some XPages training materials, I realised there was one cool use of a component’s binding property that is very powerful. And it’s actually been around for quite some time without us really realising it.
With the Extension Library, there is th
Enabling Enums in a Value Picker|
Mon, Jun 2nd 2014 7:15a Paul Withers
Last week Jesse Gallagher blogged about using enums in a combo box. For those who are not familiar with enums, if you’ve started using Java it’s well worth reviewing the article where I covered them.
Thankfully I was involved in a chat around that topic with Jesse and Nathan. I had previously written code to create an ArrayList from an enum, because I was using an enum for options for my Keyword documents. But Jesse’s solution is far more elegant, not least because it uses the
10 Steps to deploying a successful social business platform Step 4: Run immersion workshops (NOT training sessions)|
Thu, May 29th 2014 6:12a Paul Withers
With the social business scenarios in place it is time to share these with the rest of the organisation and gather feedback. This is best done by running what I like to call ‘immersion workshops’. These are relaxed, informal sessions where users can try out the platform (with the guidance of the delivery team) by logging in under fictitious names and working through a number of carefully designed tasks.
It is important to differentiate these workshops from traditional training sessions. You
10 Steps to deploying a successful social business platform Step 3: Use social to deliver social|
Thu, May 29th 2014 6:12a Paul Withers
Once the important decision to create a dedicated delivery team has been made, the important thing is for the team to ‘drink its own champagne’. This means ‘using social to deliver social’ by creating from day one a private community in the platform to discuss and plan the roll out of the platform to the rest of the company. This necessarily entails a rapid weaning off of email for the delivery team’s communication with each other. By doing all their work in the social business communi
10 Steps to deploying a successful social business platform Step 2: Create a dedicated delivery team|
Wed, May 28th 2014 11:11a Paul Withers
Unless and until an organisation creates a budget for a dedicated social business delivery team, user adoption will wax and wane and eventually tail off. The delivery team is a group of people (roughly 1 for every 1000 employees) who work full time on the user engagement and sustained adoption challenges relating to the roll-out of a social business platform.
The delivery team will have ownership of the collaboration platform to begin with. They should work directly with all the organisational d
10 Steps to deploying a successful social business platform Step 1: Culture Shift|
Mon, May 26th 2014 4:12p Paul Withers
Understand your culture in terms of collaboration and create a social business strategy that is in harmony with it. Simply making the technology available to employees is not enough; in fact it is a recipe for failure.
70 % of social business deployments are failing today due to the lack of a social business strategy.
Creating a truly open and vibrant collaboration culture takes time and it is not easy. Let’s be clear, in terms of organisational impact, social business will have a bigger impac
Collaboration culture – Solving the user adoption challenge|
Fri, May 23rd 2014 6:11a Paul Withers
Before we can discuss how organisations get their employees to meaningfully engage with a collaboration platform (user adoption), we need to briefly address the question of why collaborate at all?
Fortunately we are in the middle of a perfect storm in terms of both organisational and consumer shift. The digital technology that we use to do our jobs and to run our personal affairs is dove-tailing at speed. And this is making it easier by the minute for people to understand the social business imp
Java getAllDocumentsByKey / getAllEntriesByKey Problem With Doubles|
Tue, May 20th 2014 6:11a Paul Withers
I try to avoid using the word “bug” too freely, because those who live by the word “bug” may die by the word “bug”! After all, we’re software developers whose own software may include bugs. Use the word freely and we can’t complain when others also do.
But a little while ago I was battling a strange problem which I’ve been able to isolate. I was using getAllDocumentsByKey, passing a Vector comprising a String, a Double and another Double. (To
Tim Tripcony: A Brilliant Intellect and A Great Personality|
Mon, May 12th 2014 4:12p Paul Withers
As many others in the community, I am devastated at the tragic news from Scott Hooks of the passing of Tim Tripcony. I first met Tim in person some years ago at BLUG, although I had since co-hosted an episode of The XCast in which he appeared and he had already contributed many comments on my blog. Tim’s infectious personality and his audacious willingness to push the boundaries of XPages was bound to impress anyone. And when I learned that this guru who was already living deep in the bowe
Understanding XPages Views|
Fri, May 9th 2014 7:12a Paul Withers
Over the last few days my understanding of views and an XPages display of content has become much clearer. I don’t think I’m the only one who has confused the boundaries between the various moving parts and not fully understood the granularity involved. But the objects all have a clear place and function, and when you break down what’s being specified where, it’s all very logical and sensible. At that point, expectations become more realistic. The three elements are the
DataViews and Nested Repeats|
Thu, May 8th 2014 7:12a Paul Withers
The DataView is an extremely powerful control that was added with the Extension Library. I was never a huge fan of the View Control. It was limited in its datasources and layouts. But the DataView accepts any datasource, provides a nice out-of-the-box layout as well as allowing flexibility with facets. Unsurprisingly it took up a large portion of Chapter 7 (which I wrote) in the XPages Extension Library book.
But a couple of times now I’ve come across errors when nesting repeats within the
Fully Understanding Rendered Property and Components With Events|
Wed, May 7th 2014 5:11p Paul Withers
Some time ago I posted about the number of times the rendered property gets calculated during the JSF lifecycle and the benefits of partial execution. (One caveat is that I haven’t re-tried that since 8.5.x, so more optimisation may have been built into the XPages runtime engine.)
One way of optimising calculations in the rendered property is to ensure they are not run during other phases of the lifecycle. I have always been a little confused about why it is calculated so many times. The a
XPages OpenLog Logger v5.0|
Wed, Apr 23rd 2014 8:12a Paul Withers
Events in my personal life took over at the end of March, and I realised I had not yet blogged about the last release of XPages OpenLog Logger. This had a number of feature enhancements.
The first was to move the openLogBean from requestScope to sessionScope. The reason for doing this was to address issues developers had encountered when an error is logged and the code subsequently redirects to a different XPage. Once a redirect happens, it’s a new request on the server, so requestScope, a
Mastering XPages 2nd Edition Released|
Tue, Apr 22nd 2014 7:12a Paul Withers
Mastering XPages has been released today by IBM Press, as followers of Twitter or anyone who pre-ordered the book from IBM Press. Amazon will be shipping shortly.
I had the honour or being one of the technical editors of the book and it is well worth investing in, whether you bought the first edition or not. There is a vast amount of new material (1168 pages compared to 784) including a number of additional examples for real-life applications like managing document locking in XPages. Not surpris
Database.getApiPath(): One of the Hidden Gems of OpenNTF Domino API|
Tue, Apr 15th 2014 6:11a Paul Withers
Currently I’m in the process of going through ensuring documentation is available for all methods in OpenNTF Domino API. It’s going to take some time, not least because Javadocs need adding for all lotus.domino methods, as well as the additional methods we’ve added. One of the benefits is I’m finding out about methods that have been available for a long time that are really useful.
One of those is Database.getApiPath().
Although the name may seem unclear for a start, it
Adding Bootswatch Themes to Bootstrap4XPages|
Mon, Apr 7th 2014 7:11a Paul Withers
Last week I started playing with Bootstrap4XPages. It’s been around for a few months now and is part of OpenNTF Essentials. But I finally got round to playing with it.
Although having lots of whitespace seems in vogue for websites, personally I don’t like that. So one of my first steps was to change the theme. Fortunately, Bootswatch allows a host of themes to just lay on top of Bootstrap, in the same kind of way versions of OneUI have various themes.
Tim Tripcony did a NotesIn9 some
OpenNTF Domino API: Understanding Listeners|
Wed, Mar 26th 2014 7:11a Paul Withers
Since M3 we’ve had Listeners implemented in the OpenNTF Domino API. Although there’s potential for even greater implementation of listeners through the API, they’re already extremely powerful.
Think about triggering specific code whenever a document is saved from XPages. The concept is very powerful and there has been an example in the Demo database for many months. But as I’ve been going through reviewing Javadoc comments in the API, I’ve realised it’s never
SBT and Propogating XPages Performance Preferences to Notes Clients Via Policy|
Mon, Mar 24th 2014 7:11a Paul Withers
XPages in Notes Client is one area that is receiving constant development.
With 8.5.3 we gained Domino server and Notes client preferences XPagesPreload=1 and XPagesPreloadDB=myServer!!myDb.nsf/myXPage.xsp,myLocalDb.nsf/test.xsp. These preloaded the XPages runtime and preloads specific databases.
Then with 9.0 we gained the functionality in Notes Client to define XPages that need to run on the server on a new XPages Performance tab in the Preferences.
Enabling applications to run on server has
Show Submit Button Only When All Mandatory Fields Completed|
Thu, Mar 20th 2014 4:11p Paul Withers
Today I had this query about refreshing multiple areas of the page on a blog post about partial execution:
I have several input text fields with onChange events that do a partial updates on panels (a panel for each field) that contain the images that display whether the required field is completed. But I also have a submit button at the top of the xPage, that only becomes usable when all required fields are completed. So, I’d like to be able to refresh that button also, from each required fiel
Slides from OpenNTF Domino API Session at Engage|
Thu, Mar 20th 2014 3:11p Paul Withers
Earlier this week I had the pleasure to present with Martin Jinoch at Engage in Nertherlands. It was good to present on the API with someone who’s main involvement has been as a consumer, though very much an active member of discussions on existing and new functionality.
Here are the slides, which included more recent developments like picker data sources and a formula parser. A new release of the API will be coming out in the coming weeks, so stay tuned.
Preloading XPiNC Applications|
Wed, Mar 12th 2014 4:11p Paul Withers
Recently I’ve been working on an application for XPages in Notes Client. Part of that has been using Domino Data Services in the application. One of the problems I came across was that the Domino Data Service was not running as the current logged on user, even though I was calling it from Java. I needed to pass credentials.
But even when passing the credentials, it was not working on a local XPiNC application. Instead it was throwing an ECL security exception, even though the signer had th
Method Parameters and The Importance of Final in Java|
Thu, Mar 6th 2014 6:11a Paul Withers
Most developers (certainly myself!) are lazy. We look to re-use code and write the briefest code we can.
Sometimes it backfires!
When writing a method, either in Java or LotusScript, we can often pass parameters around with little concern. I came across that some years ago with LotusScript when objects were being changed by a function when I didn’t intend that. That was when I learned that you could define a sub or function in two ways. So consider the following code:
Dim myStr as String
Speaking at Engage.ug|
Tue, Mar 4th 2014 7:14a Paul Withers
Two weeks from now I’ll be speaking at Engage.ug, along with a host of illustrious names from IBM and the community. I’ll be speaking with Martin Jinoch about the OpenNTF Domino API. After speaking on the API solo at various user groups and during speedgeeking at IBM Connect, it will be interesting to co-host the session with someone who consumes the API and has been very active in working on the Demo database and providing feedback on the API.
As ever, the material has been updated
Configuring Eclipse for Domino Debug Plugin|
Mon, Feb 24th 2014 7:12a Paul Withers
Compatibility Mode: What Any XPages (or Web Developer) Needs To Know|
Wed, Feb 19th 2014 5:11a Paul Withers
This rant is not the result of any individual project,I’ve been meaning to write it for a while. It’s also as much out of disillusionment of believing web developers who say you can switch off compatibility mode, because it’s not what happens necessarily.
When developing for a corporate environment, the default browser is usually Internet Explorer. Internet Explorer has always required a lot of hacks, so much so that in the past traditional Domino web applications for internal
XPages OpenLog Logger v4.0|
Mon, Feb 10th 2014 4:11p Paul Withers
I’ve just released a new version of XPages OpenLog Logger.
It’s predominantly a release to catch SSJS errors of classes NotesException and java.io.IOException, as well as wrapping processUncaughtException code in try/catch blocks, to capture any classes I haven’t come across yet. I and other developers have encountered these unexpected error class types when no try/catch has been added to your SSJS code.
One feature has been added. From OpenNTF Domino API I had a request to sup
Wed, Feb 5th 2014 3:11p Paul Withers
There have been a few posts today on StackOverflow about SSJS being run when it’s not expected. I think a lot of that comes from a misunderstanding of what’s happening on the server.
Parsing of Values
Firstly, property values are just plain text.That’s reinforced if you look at the Java class for an XPage or Custom Control in Package Explorer, under Localxsp. For example, here’s a method that creates a Computed Field:
private UIComponent createText(FacesContext context,
Domino Server + Connections + Sametime VM Image|
Mon, Feb 3rd 2014 8:15a Paul Withers
Niklas Heidloff’s session with Henning Schmen at IBM Connect – AD206: Build Apps Rapidly by Leveraging Services from IBM Collaboration Solutions on Wednesday 5:30 – was very interesting from a number of aspects. I’ve long believed that part of the barrier to Connections development is that many developers not to mention end users can’t envisage where application development can add value to IBM Connections. Niklas’s Partner Community project, which he covered
2014: The Year Notes and Domino Stopped Looking Like Notes and Domino|
Sat, Feb 1st 2014 12:15p Paul Withers
Notes and Domino have long been lampooned as a bad user experience. From an app dev point of view, XPages came along and gave us some freedom. Notes 9.0 gave us a fresh UI and some nice usability enhancements (Ctrl + v to paste as plain text, Quick Find box, Group By Date etc).
On slide 16 of my session with Mike McGarel I showed a Twitter conversation I picked up late last year. It shows how with Twitter Bootstrap a developer could create an application users didn’t think of as a Domino w
Back-End Developers Are From Mars, Front-End Developer Are From Venus|
Sat, Feb 1st 2014 10:14a Paul Withers
First of all, I’m not saying back-end developers are real men or are the only ones who have “Curiosity”! But I’ve begun to realise more and more that XPages developers are either back-end or front-end, features or look & feel.
In the old days of Notes Client development, the two were so tightly coupled that there was no separation. Maybe that’s one of the reasons Notes got a bad reputation. But it was not particularly easy to know which camp you were in.
BP204: Slides and Demo Application|
Fri, Jan 31st 2014 9:11p Paul Withers
Here are the slides and demo app Mike McGarel and I used for our session on Tuesday, “It’s Not Infernal: Dante’s Nine Circles of XPages Heaven”.
Below is the link to a zip file containing the demo applications. The Infernotes.nsf version will work if you don’t have the OpenNTF Domino API. The one suffixed “OpenNTFDomino” requires the OpenNTF Domino API to be installed.
Infernotes Demo Application
SHOW 103 – Source Control An End To End Solution|
Wed, Jan 29th 2014 9:11a Paul Withers
Earlier today Declan Lynch and I presented on source control. Unfortunately we didn’t make it through all 337 slides and, more frustratingly, had to cut short the demo that handled merge conflicts in branches. But I will be recording that in the near future for David Leedy.
But the slides below cover all details of using Git Flow (Hg Flow is the same) to create features, hotfixes and handle the merge conflict. The first part covers installing Redmine or Stash with JIRA. (Obviously 337 slid