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

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

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. Freeman, John Dalsgaard and others. The administrators can look forward to Mikkel Heisterberg, Ben Menesi and others.
See you there?
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.
XSP.partialRefreshPost(
'#{id:somePart}',
{
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">
<xp:this.action><![CDATA[#{javascript:someServerSideAction();}]]></xp:this.action>
<xp:this.script><![CDATA[
XSP.partialRefreshPost(
'#{id:somePart}',
{
clearForm: true,
submitid: '#{id:submitEventHandler}'
}
);
]]></xp:this.script>
</xp:eventHandler>
</xp:button>
Here’s the complete code snippet (available as an OpenNTF XSnippets too):
<xp:scriptBlock id="scriptBlockPROptimized">
<xp:this.value><![CDATA[
XSP.addOnLoad(function(){
// 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 = field.name;
var includeField = false;
try{
// 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 == form.id || 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 );
}
}
}else{
// 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 );
}
}
}
}catch(e){
console.log(e);
}
}
// call the original refresh method with the new form
return XSP.__partialRefresh(method, newForm, refreshId, options);
}
XSP.__partialRefresh(method, form, refreshId, options);
};
});
]]></xp:this.value>
</xp:scriptBlock>
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.
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.
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.
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:

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.
Today I am with the rest of the Notesnet.dk members at our yearly 2-day conference. I did a brief presentation on Bootstrap4XPages:
![]()
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? 🙂
In June I introduced the Notesnet.dk members to IBM BlueMix. I used a combination of the presentation below and hands-on examples.