IBM Domino and IBM Notes/Domino Designer 9.0.1 FP10 has been released: major update to the platform!

January 31st, 2018

IBM Domino and IBM Notes/Domino Designer 9.0.1 Feature Pack 10 has been released today and is available for download on IBM Fix Central. This is a major update to the platform.

The most important updates for developers include:

  • Upgrade from Java 1.6 to Java 1.8 for both Domino Designer and the server
  • The Domino Designer Eclipse platform is now running version 4.6.2 (a major upgrade from Eclipse 3.4.2)
  • OSGi is upgraded

More details of changes are available at developerWorks. Details of all fixes will be available later in the usual Fix List database.

I’m a five-time IBM Champion!

December 14th, 2016

The 2017 IBM Champions for IBM Collaboration Solutions was just announced and it makes me proud to see that I continue as an IBM Champion.

Congratulations to the 123 IBM Champions!

I’m a 2016 IBM Champion!

December 1st, 2015

It has been a great year with focus on the 2 businesses that I am involved in: Sherlock Web and fmcg solutions.

I have not been involved with public speaking this year but still try to help the XPages developer community on Stack Overflow as much as I can.

It came as a pleasant surprise that I was elected as IBM Champion for 2016. I'm once again honored to be part of this amazing group of people!

I’m a 2015 IBM Champion

December 21st, 2014

I am very proud of being elected a 2015 IBM Champion for IBM Collaboration Solutions along with 95 other champions!

IBM Champions - They're experts. They're leaders.


I am going to the 52nd DanNotes conference

October 30th, 2014

The 52nd DanNotes conference takes place on November 19 and 20.

The conference starts off with a keynote by Kramer Reeves. After the keynote the developers can then look forward to Christian Güedemann, Nathan T. FreemanJohn Dalsgaard and others. The administrators can look forward to Mikkel Heisterberg, Ben Menesi and others.

See you there?

XPages: Optimized partial refreshes for event handlers

September 20th, 2014

Sven Hasselbach has created an optimized version of the XSP.partialRefreshPost() method. This works great to reduce the number of form fields that are included in the request for a partialRefreshPost.

But his version does not include support for running server-side actions because the the form fields included in the POST doesn't include the server-side event handler.

So I have created an optimized version of his optimized version that supports this 🙂
My versions adds a 'submitid' parameter that should point to the id of the event handler that you want to execute on the server.

      clearForm: true,
      submitid: '#{id:submitEventHandler}'

Here's an example of using the optimized partial refresh for an eventhandler:

<xp:button id="button1">
    <xp:eventHandler event="onclick" submit="false" id="submitEventHandler" refreshMode="partial" refreshId="somePart">
                    clearForm: true,
                    submitid: '#{id:submitEventHandler}'

Here's the complete code snippet (available as an OpenNTF XSnippets too):

	<xp:scriptBlock id="scriptBlockPROptimized">

			    // hijack the existing partial refresh method
			    if( !XSP.__partialRefresh ){
			        XSP.__partialRefresh = XSP._partialRefresh;

			    // add the new one to the XSP object
			    XSP._partialRefresh = function x_prfh(method, form, refreshId, options){

			        // clear the form?
			        if( options.clearForm ){

			            // create a new HTML form...
			            var newForm = document.createElement( "form" );
			            newForm.setAttribute( "method", form.method );
			            newForm.setAttribute( "action", form.action );

			            // ... and loop all existing fields
			            for( var i = 0; i<form.length; i++ ){
			                var field = form[i];
			                var fieldName =;
			                var includeField = false;


			                    // check for addition fields
			                    if( options.additionalFields ){
			                        includeField = dojo.indexOf(options.additionalFields, fieldName)!=(-1)?true:false;

			                    // only add XPages relevant fields and addtional fields
			                    if( fieldName == || fieldName.substr(0,2) == '$$' || includeField ){

			                        var newField = null;
			                        if( field.options ){
			                            // special handling for fields with options
			                            for( var j=0; j<field.length; j++ ){
			                                if( field.options[j].selected ){
			                                    newField = document.createElement( "input" );
			                                    newField.setAttribute( "type", "hidden" );
			                                    newField.setAttribute( "name", fieldName );
			                                    newField.setAttribute( "value", field.options[j].value );
			                                    newForm.appendChild( newField );
			                            // default field handling: just clone the DOM element

			                            // check for $$xspsubmitid option
							            if( options.submitid && fieldName == "$$xspsubmitid"){
							                newField = document.createElement( "input" );
							                newField.setAttribute( "type", "hidden" );
							                newField.setAttribute( "name", "$$xspsubmitid" );
							                newField.setAttribute( "value", options.submitid );
							                newForm.appendChild( newField );
							            } else {
				                            newField = field.cloneNode( true );
				                            newForm.appendChild( newField );

			            // call the original refresh method with the new form
			            return XSP.__partialRefresh(method, newForm, refreshId, options);

			        XSP.__partialRefresh(method, form, refreshId, options);

Keep in mind that to optimize a partial refresh you need to focus on more than just the size of the POST request. You should also look at partial execution mode (execMode="partial") in order to reduce the amount of work that the server has to do.

Authenticating your IBM Domino and IBM XWork Server web apps against Active Directory (LDAP)

August 28th, 2014

With IBM Domino and IBM XWork Server you can set up web authentication against an external LDAP such as Microsoft Active Directory. This is useful if you are deploying a web application and your users are already in an external directory. In this blog post I will show you how to set this up.

  1. Create a Directory Assistance application on the server based on the Directory Assistance application template
  2. Edit the server document in the Domino Directory and add the path to the Directory Assistance application from step 1 to the Directory Assistance database name field on the Basics tab
  3. Create a new Directory Assistance document in the Directory Assistance application and fill out the following:
    1. Domain type: LDAP
    2. Domain name: Company domain (notice: the domain name in the Directory Assistance document MUST not be equal to the Domino domain!)
    3. Company name: Company name
    4. Naming Contexts (Rules) - Trusted for Credentials: Yes
    5. Hostname: host name of Microsoft Active Directory (tip: use the Verify button to check access to the host)
    6. Optional authentication credential for search: If the Active Directory does not allow anonymous LDAP searches, then add username and password for a user with access to Active Directory
    7. LDAP vendor: Active Directory
    8. Base DN for search: DC=company,DC=com (use the Suggest button to find the correct format)
    9. Channel encryption: SSL or none (notice: if changing from SSL to none make sure that Naming Contexts (Rules) - Trusted for Credentials is not changed from Yes to No)
  4. Restart your server

It's now time to test your your LDAP configuration. Start by creating a new application with access control set to Readers for Default and No Access for Anonymous. Try to access the application from a browser and you will be prompted for credentials. Now logon using a valid username and password. You will be able to access the application if your Directory Assistance setup is working. Congratulations - you can now deploy your web application and have users authenticate using Microsoft Active Directory - without having any user details stored on the IBM Domino/IBM XWork server!

If authentication fails, you should start with issuing the "show xdir" command on the server console. You should see two entries in the list - the first one pointing to the Domino directory (names.nsf) and the second one pointing to your LDAP configuration.

You can also use the webauth_verbose_trace=1 option to enable debug messages on the server console by issuing "set conf webauth_verbose_trace=1" on the server console.

XPages and Domino 9.0.1 FP2: upgrades to CKEditor and Dojo

August 24th, 2014

IBM released fix pack 2 for Domino and XWork Server 9.0.1 this week. Among many fixes it includes the following fix:

SPR# TMGN9KJTEB - Adds Internet Explorer 11 support for xPages

I asked Brian Gleeson from the IBM Dublin team what exactly this means, and he responded that it covers an upgrade of CKEditor from 3.6.x to 4.3.2 and an upgrade of Dojo from 1.8.3 to 1.9.2.

One issue I have seen so far with CKEditor 4.3.2 is that the "Insert image" button called 'Image' in a custom toolbar is different from the standard "Insert image" button used if you use the default toolbar. Instead, you need to use 'IbmImage' as the name of the image button.

The latest CKEditor adds a spell check option - either through the default toolbar or by adding 'IbmSpellChecker' to your custom toolbar. It's great that the CKEditor in XPages finally adds that facility. Here it is in action:

CKEditor spell checker

With the new CKEditor the 'toolbarType' Dojo attribute no longer works. Instead use 'toolbar' as Dojo attribute with Slim, Medium, Large and Full as possible values.

Presentation: an introduction to Bootstrap4XPages

August 22nd, 2014

Today I am with the rest of the members at our yearly 2-day conference. I did a brief presentation on Bootstrap4XPages:

Bootstrap4XPages - an introduction from Per Henrik Lausten

Submit your session abstracts for the DanNotes 52nd conference

August 22nd, 2014


The 52nd DanNotes conference takes place on November 19-20, 2014. I am part of the organizers team and we are hard at work planning the conference and have opened for session abstract submissions. If you are interested in speaking at the conference, please register and submit your session abstract.

We are looking for business related sessions, technical sessions, case stories and more - and we are looking for speakers from all over the world.

One important point: DanNotes will take care of your travel and accommodation expenses! So what are you waiting for? 🙂