Showtime
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.
Contact Information
Blogger, podcaster, writer, and geek Chris Toohey covers topics from application development to the latest must-have-gadgets.
Latest Updates

More on Mailer...
More on Junction Lite...
More on Remote Console...

More on Controller API Utility...
Products & Applications
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!
Zephyr
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
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.
OpenNTF.org - 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.
IBM XPages: Data Sources via Resource Bundles
08/06/2012 04:53:00 PM by Chris Toohey
One of the true killer features of XPages for any IBM Lotus Notes Domino application developer is the native ability to create a remote data source for any UI control, thus quickly extending or integrating with an existing Lotus Notes or Domino Web accessible NotesDatabase. However I have found that when you define a remote data source for a given xp:viewPanel or another data source-driven control... things really tend to slow down.
Basically, any focus/click/blur in the Source or Design panes of an XPage have the data sources recalculate in order to wire any "pretty panel" data source selection. So when you're trying to change the values of the View Column Titles in an xp:viewPanel, it's going to recalculate/refresh that wiring to ensure that nothing changed in case you also want to change the actual value of the View Column.
Work locally, and it's fine. Work on a remote server (which I often do), and there are times I can brew an entire pot of coffee while DDE does the dance of the damned and updates everything.
To combat this (I need to cut back on my coffee intake), I started using a technique that I originally employed to address another concern: Domino Server, NotesDatabase, View, and Form location/name changes.
If you're working in the same NotesDatabase, the changing of a View or Form is often handle completely in that NotesDatabase design. You change the View, then all navigation and application logic should be changed accordingly. However, it's amazingly simple to overlook such changes (or worse yet, feel as though such changes can never be made for fear of breaking critical systems) when you're using that NotesDatabase as a storage container or otherwise integrating that application with some external app.
So because I've had NotesDatabases moved on me seemingly at random, Domino Server names change, Views go missing, or someone finally adds an alias to the "New Request by Employee" Form, I started using Resource Bundles in my XPages development standards to define any external resource.
The added benefit, as it turns out, is a huge speed boost in controls like the xp:viewPanel and xp:panel.
Here's an example xp:pane that uses this technique to define the NotesDatabase and Form for our Resource Bundle-driven data source:
<xp:panel>
<xp:this.data>
<xp:dominoDocument
var="thisProfile"
databaseName="#{javascript:return preferences['db_users'];}"
formName="#{javascript:return preferences['form_user'];"
documentId="#{javascript:return getPersonUNID(context.getUrlParameter('id'));}"
ignoreRequestParams="true"
action="openDocument">
</xp:dominoDocument>
</xp:this.data>
...
Here, we have the xp:dominoDocument's databaseName and formName checking our "preferences" Resource Bundle. We can choose to add this Resource Bundle via the XPage resources or via a Theme (see examples below):
Resource Bundle via XPage resources
<xp:this.resources>
<xp:script
src="/core.jss"
clientSide="false">
</xp:script>
<xp:bundle
src="/preferences.properties"
var="preferences">
</xp:bundle>
</xp:this.resources>
Resource Bundle via Theme
<resources>
<bundle
target="xsp"
src="preferences.properties"
var="preferences"
loaded="true"
rendered="true" />
</resources>
And now, our "preferences.properties" Resource Bundle:
db_users=development/Servers!!directory\da_nab.nsf
form_user=Person
Pretty basic, really...
We use the serverName!!filePath syntax for NotesDatabases (or just the filePath if they're on the same Domino server), and alias names for any View or Form Design Elements where appropriate.
Conclusion
Simply put: this breaks RAD, in that you'll lose any of the basic wiring that you normally get when you're setting up xp:viewPanel columns or xp:panel input elements. The Data Source "pretty panel" dropdowns will appear "blank", but you can either type the variable/notesItem names in there or stick with the Source pane.
This greatly improves speed when you're dealing with remote data sources, and is highly recommended for those seasoned pros who don't bother much with the "pretty panels" anymore. The speed, not to mention the ability to change-at-will without the need to rebuild, make this a slick option... but your mileage may vary.
Love it or disagree? Share your thoughts in the comments section below. Like/+1 if it's something you want others to see, and as always if there's something topic or demo-wise you want to see on the site, just let me know.



Good point Tim.
I typically use an SSJS function that runs a switch against the Bundle, so I'm kinda pre-wired to using
#{javascript:...}.1. I had a similar problem with connecting external style sheet:
Slow:
<xp:this.resources>
<!-- YUI Calendar -->
<xp:styleSheet
href="#{javascript: return pathToYUI + '/yui/build/calendar/assets/calendar.css'}">
</xp:styleSheet>
<xp:script
src="#{javascript: return pathToYUI + '/yui/build/calendar/calendar-min.js'}" clientSide="true">
</xp:script>
</xp:this.resources>
Interestingly, the connection of external .js does not affect the speed. The problem with .css only.
Normal1:
<xp:this.resources>
<!-- YUI Calendar -->
<xp:headTag tagName="link" loaded="true">
<xp:this.attributes>
<xp:parameter name="rel" value="stylesheet"></xp:parameter>
<xp:parameter name="type" value="text/css"></xp:parameter>
<xp:parameter name="href">
<xp:this.value>
<![CDATA[#{javascript:return pathToYUI + '/yui/build/calendar/assets/calendar.css'}]]>
</xp:this.value>
</xp:parameter>
</xp:this.attributes>
</xp:headTag>
<xp:script
src="#{javascript:return pathToYUI + '/yui/build/calendar/calendar-min.js'}" clientSide="true">
</xp:script>
</xp:this.resources>
Normal2:
<xp:linkResource
href="#{javascript: return pathToYUI + '/yui/build/calendar/assets/calendar.css'}"
rel="stylesheet"
media="all"
type="text/css">
</xp:linkResource>
2. In addition, the external .css stylesheet incorrectly handled with the option "Use runtime optimized JavaScript and CSS resources". In the HTML header external styles are connected BEFORE optimized (combined) .css library. As a result of the same name override styles.
Now (with checked option "Use runtime optimized JavaScript and CSS resources"):
<head>
<link href="/toolkits/template-2.1.nsf/css/theme1-min.css" type="text/css" rel="stylesheet">
<!-- XPages Optimized CSS -->
<link href="/xsp/.ibmxspres/.mini/css/@Da&@Ib&2Tfxsp.css&2TfxspLTR.css&2TfxspFF.css.css" type="text/css" rel="stylesheet">
Need:
<head>
<!-- XPages Optimized CSS -->
<link href="/xsp/.ibmxspres/.mini/css/@Da&@Ib&2Tfxsp.css&2TfxspLTR.css&2TfxspFF.css.css" type="text/css" rel="stylesheet">
<link href="/toolkits/template-2.1.nsf/css/theme1-min.css" type="text/css" rel="stylesheet">
Does anyone know how to fix it?
@Mark
It's in File Resources. Technically, it could even be externalized/outside of the NotesDatabase (or from another) as-needed.
In fact... there might be another post right there: creating a resource bundle management NotesDatabase app.
@Vyacheslav
I'd use a Theme here to "inject" those stylesheets and resources, which should help speed things up.