Latest Updates

Products & Applications

My Blackberry Enterprise Server Push Utility for the Lotus Notes Client, allows you to create Jobs for individual Channel, Message, and Browser Content Pushes, as well as allows you to delete Pushed Channel Icons from defined recipient devices.

Time Tracker
The idea is simple. At the start of your day - upon completion of your first task - create an entry highlighting what you did and whether you feel it was an efficient or inefficient use of your time. Based on several requests, you can also select the priority, apply categories, or even align your time against a project.

For Lotus Notes Client v8.0 and above, you can use the Time Tracker Widget to make this process even easier!

My Configuration-based Rich Text Mail Merge and Emailing Utility, Zephyr allows you to create rich, data-driven emails to support automated workflow - all via Microsoft Word Mail Merge-like architecture. Dear <firstname> allows you to personalize each email message not only to the individual recipient, but also to the individual application workflow event!

xCopy is a simple configurable xCopy client for the Lotus Notes client. By creating and defining xCopy Profiles, you can batch process your file backup or remote upload jobs. With the addition of the xCopy sidebar widget, you can easily kick-off these jobs, and modify both the xCopy Profiles and xCopy itself.

Community & Resources

Lotus Technical Information & Education Community

The Lotus Technical Information & Education community is comprised of IBM, business partner, and customer subject matter experts who use product wikis, published articles, white papers, community blogs and the latest in social media to build and share high quality technical content. - Open Source Community for Lotus Notes Domino

OpenNTF is devoted to enabling groups of individuals all over the world to collaborate on IBM Lotus Notes/Domino applications and release them as open source.

developerWorks Lotus : Wikis

Share your deployment experiences and best practices in our wikis and help IBM to create scenarios for successful deployments. Contribute to the community by collaborating on shared content and leverage the shared knowledge from that community.

XPages: Default Tab Selection via QueryString Parameters

07/11/2011 09:17:00 AM by Chris Toohey

IBM Lotus Notes Domino XPages While working on the Web Browser Client version of Remote Console HD last night, I ran into a rather simple situation where with a little more attention being applied to an often overlooked area of any application, I think I will be able to deliver some real-world gains in the user experience.

Simply put, I took less than 1 minute to write a simple SSJS-based URL QueryString Parameter check, and in doing so can now support defining the default launch tab for a tabbedPanel Control:

<xp:tabbedPanel id="main">
    <xp:tabPanel id="home">
        <xp:this.label><![CDATA[#{javascript:preferences[preferences['language'] + '_label_home']}]]></xp:this.label>
    <xp:tabPanel id="servers">
        <xp:this.label><![CDATA[#{javascript:preferences[preferences['language'] + '_label_servers']}]]></xp:this.label>
    <xp:tabPanel id="databases">
        <xp:this.label><![CDATA[#{javascript:preferences[preferences['language'] + '_label_databases']}]]></xp:this.label>
    <xp:tabPanel id="groups">
        <xp:this.label><![CDATA[#{javascript:preferences[preferences['language'] + '_label_groups']}]]></xp:this.label>

Since it's so simple you might have missed it, here's the SSJS in question:


Thus, I can now use the following syntax to launch a specific tab on my XPage:


This, of course, launches the Servers tab.

And even more brilliantly, if you supply a mismatch (ie., ?tab=foo) or there is no tab parameter in the URL QueryString, the tabbedPanel Control's selectedTab Parameter fails back to the default tab.

Are we being too literal?

... which made me wonder, I can't be the only one to think that this is useful. I mean, imagine having to send someone to a specific subsection within an application. The tab QueryString Parameter can act just like a hash anchor (#), but instead of jumping to a specific section within the form, simply surface that section (that panel, in this case) first.

Beyond sending someone to ?tab=groups to have them update an Group within the Domino Directory, think about the use of this practice in workflow applications.

Let's say your company CFO calls you asking how they approve a new request in this database you wrote for him. The conversation could be:

Email contains the following URL:


"Oh, you need to sign off on this section of content by clicking that 'Approve' button. Well click on that URL I just sent you. OK, now click on the second tab labelled 'Finance'. Now, click on the tab labelled 'Total Cost Summary'. No, it's one of the tabs on the 'Finance' part of the form. Yeah, scroll down. ... why don't I just come up to your office."

- vs. -

Email contains the following URL:


"Oh, you need to sign off on this section of content by clicking that 'Approve' button. Well click on that URL I just sent you. Yep, that's it! OK, let me know if you need anything else!

Me, I might just be lazy... but I'd prefer to have the latter conversation and not come across as if I'm trying to make the CFO jump through the form only to end up awkwardly standing in their office watching them just-as-awkwardly click on the wrong damned sections of the form despite you telling them "No, lower and to the left... like an inch. No, that was the back button. OK, let's start over again. Go back into your email...".

But enough of my real-world experiences, and back to the topic of this article.

The cool thing about this technique is that it's so simple. I dunno, it's just something that I can see becoming a no-brainer in UI/UX design. It's certainly something that'll make it's way into my applications.

What're you thoughts? Think this could be useful to the application audience, or will it be a feature that's never used. It is something that everyone is already doing and I'm just slow on the uptake, or is this an overlooked gem?

Let me know in the comments on the post!

Erskine HarrisName:Erskine HarrisComment Dude,

This is very useful.  Take for example a person filling out a long form that is broken up based on tabs.  As the form is now, he/she could save it as draft and coming back to continue filling out the form, but they would need to start with the first tab.

Now we can set the form up to pick up on the last tab.  Thus making the app a little more friendlier.  Which makes Domino look even better.

Tim TripconyName:Tim TripconyWebsite:http://xmage.gbs.comComment

If you prefer, there's an even simpler syntax:

<xp:tabbedPanel selectedTab="#{}">

Because "param" is an intrinsic variable, and because it's a Map, the EL expression above is equivalent, at runtime, to the following SSJS expression:

return param.get("tab");

Using basic EL syntax also has incremental performance benefits, as compared to SSJS, but the primary advantage is that it just keeps your XML source cleaner... less CDATA. ;)

Chris TooheyName:Chris TooheyWebsite:http://www.dominoguru.comComment David Leedy pointed this out to me today -- I didn't know about the param variable, but you're absolutely right. If there's a more terse way of getting the job done, then it should be used.

Thanks for pointing it out!
Russell MaherName:Russell MaherComment

I have used scoped variables to control tabs quite a bit, too.  Understanding the whole tab visibility/selected thing can be really powerful.  Great post.

Ozlem KuscuName:Ozlem KuscuComment great tip, thanks !! Eric McCormickName:Eric McCormickWebsite: Was just looking for this and again you've sped my implementation up and saved me fiddling for the next 20 minutes. Thanks Chris!

(not published)

Evaluate this Formula: @LowerCase(@Text("FOO"))