Latest Updates

Products & Applications

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.

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.

Welcome to dominoGuru.com!

Focused on being the go-to resource for the IBM Lotus Notes Domino developer, dominoGuru.com delivers introductory-level best practices and advanced development deep dives for the IT professional, book and gadget reviews, and technical weblog, and more!

Time Tracker v1.1 - new features coming soon!

10/19/2009 12:34:50 PM by Chris Toohey

Based on some pretty awesome feedback that I've received from people who apparently find Time Tracker v1.0 very useful, I'm adding a few new features and improvements to the user interface.

Time Tracker - Personal Productivity Lotus Notes Client Application - UPDATES!!

10/08/2009 12:02:17 AM by Chris Toohey

Based on the feedback I got from here, on Twitter, and on Facebook regarding my upcoming Time Tracker application, I've made a few simple changes:

Priorities, Categories, and Projects

So you not only want to know how efficient your time is, but also what it's spent on?! Yeah -- that actually makes sense. So I've added Priorities, Categories, and Projects to not only the Lotus Notes Client UI document Form Design Element, but also the widget Form Design Element which can be loaded in the Lotus Notes Client Sidebar and allow for always-on, quick entries in the Time Tracker.

Time Tracker Lotus Notes Sidebar Widget

After all - and speaking for myself here - if it's not easy, it won't get used.

Configuration-based widget

Not wanting to have form-bloat should you not want to track Priorities, Categories, or Projects -- I've given you the ability to disable/enable those fields from the application Preferences.

Time Tracker Lotus Notes Preferences - Setting Visible Items

So, if you don't want to track anything but the description, timestamps, and the status (efficient/inefficient), you can "remove" everything else at will.

More Views...

This was kind of a given: adding more categorization options (Priority, Category, and Project), I needed to add more views.

Time Tracker Lotus Notes Views

... upcoming changes and publication!

There are a few things that I want to add in here, at least for version 1.0.

The biggest one is adding Readers fields to the entries and having them defined by the application Preferences. Nothing major, but this will allow you to deploy a single instance in a project team, group, business unit, etc. and allow everyone to track their time against a common instance of the Lotus Notes Application.

Eventually, I'd like to create a mobile device client - which I'm thinking will be a version 2.0 feature - and am shooting for a Blackberry device Java client.

I'm shooting for a Monday - October 12th, 2009 - release of version 1.0, so if you have any suggestions for features and functionality that you'd like to see in this release, please let me know ASAP!

Time Tracker - Personal Productivity Lotus Notes Client Application - Coming Soon!

10/06/2009 02:37:01 PM by Chris Toohey

The other day, I took a 2-day course on Time Management, where I basically learned that my procrastination and misuse of time causes me to be inefficient.

I also learned something that we may all know, but it (at least for me) didn't really hit home: we all get the same number of hours in a day, and time is a finite resource.

One of the take-aways from this course was that I should be using technology to make me more efficient. Notice I didn't say productive, but rather efficient. See, smashing my head against a wall for an hour will produce a bloody mess... it certainly doesn't make that hour an efficient use of my time.

So I've started using more and more of the Calendaring & Scheduling capabilities in Lotus Notes... and not just for meetings and appointments. One of the things I learned is that I need to start allocating time within my schedule to do the things that I need to do - if I need 2 hours to put together a project plan for an upcoming project, I should be blocking out 2 hours from my daily schedule solely for that activity, and treat that allocated time the same way I would a normal meeting: focus on the task at hand, and use the time as efficiently as possible.

I've also started to better leverage the To Do functionality in Lotus Notes - I am tracking individual tasks, marking them complete as I go.

I learned that - for procrastinators like me - creating and well-documenting a task list (making sure to put priorities against each task and ensure that each works towards the project goals) is the best way to both keep focused and ensure I do the items that must be done, not the ones that look like the most fun.

So every morning I have 30 minutes blocked out of my schedule to put together and/or review my daily task list.

Another exercise that is intended to help me see my time wasters - which was recommended both in the training literature and by the instructor - is to keep a time diary. The idea is simple - write what you're doing, when you're doing it, and whether that was an efficient or inefficient use of my time.

At the end of a given day, I should have all of my time for the day accounted for - allowing me to see (when compared against my calendar and task list) where I succeeded and where I failed to make the most out of my time.

... so why am I bringing this up here? Well, aside from the fact that I don't think I'm the only procrastinator here and thought that sharing this information could prove invaluable... I honestly couldn't see myself keeping an ongoing diary of my time.

At first, it felt really weird; like I was spending more time working on the diary than working on... work.

Then I remembered - I'm a developer. There's gotta be a better, easier way of doing this.

So I created Time Tracker, a personal time-tracking productivity application for the Lotus Notes client.

Time Tracker - Lotus Notes Client UI

This is a simple Lotus Notes Client Application that allows me to create time log entries, categorize each as Efficient or Inefficient, and mark the start and stop times of the given activity.

Where this really comes in handy is Sidebar Widget:

Time Tracker - Lotus Notes Client Sidebar Widget

Again, simple: enter a description for the time, and hit the Efficient or Inefficient buttons. If it's the first entry of the day or if you check off the checkbox on the right-hand side of the description, you're presented with a dialog prompt asking you to set the start and end times.

Time Tracker - Select your Start and End Times

No check in the checkbox or if this isn't your first of the day? It uses the last time entry as your start time and Now() as your end time, and tracking your efficiency becomes a 1-click task!

I plan on publishing this application once I work out a few kinks (mostly in the Calendar View - nothing major, just not quite there yet from a UI standpoint). It will be a freeware/Open Source application, and I'm thinking of wiring some Readers fields into the backend - defined/toggled via the Preferences - that will allow you to easily put this on a Domino server and have multiple people enter their entries into a single application instance.

Thoughts? Features you'd like to see? I have some time available in my schedule coming up next week where I plan on finalizing the v1.0 release, so let me know what you'd like to see!

NotesDocument READ and UPDATE with AJAX calls to Domino Agents (or Simple Inline View Editing over the web) - Build, Demo, and Download

09/22/2009 10:30:03 AM by Chris Toohey

Building off of my example from yesterday, I thought that I would show you how we can quickly and easily create READ and UPDATE functions for NotesDocuments via calls to our (modified) HTTP Request Consumer Domino Agents. And, to spice things up, I thought I'd do it all via AJAX.

Build Synopsis

HTTP AJAX NotesDocument Mods Example NotesDatabase

That's the end-goal - a simple NotesData table that will allow us to change the Status of a given NotesDocument.

To get to that goal, I'll take the Agent Design Elements from yesterday - creating one for the READ and another for the UPDATE function. But first I need to ready the Page Design Element that acts as the Default Launch Object for the NotesDatabase, which will act as the display for our NotesData table.

Phase One: index.html Page Design Element

The index.html Page Design Element - just like with yesterday's example - is extremely simple by design: I want to focus your attention to the functional capabilities of having your Web Applications (Domino or non-Domino technologies-based) interacting with the HTTP Request Consumer Agents.

We'll focus on the HTML Form Element and the JavaScript functions, as the rest of the HTML markup is either descriptive/introduction or my Paypal Donation stuff.

The HTML Form Element contains the following markup:

<form action="#" name="moddocs" id="moddocs" method="GET">

<div id="viewbody"> </div>
<script>getdocs(document.getElementById("viewbody"));</script>

</form>

The JavaScript functions - there are two - are:

var http = false;

if(navigator.appName == "Microsoft Internet Explorer") {
http = new ActiveXObject("Microsoft.XMLHTTP");
} else {
http = new XMLHttpRequest();
}

function getdocs(target) {
http.open("GET", "getdocs.agent?open", true);
http.onreadystatechange=function() {
if(http.readyState == 4) {
target.innerHTML = http.responseText;
}
}
http.send(null);
}
function moddoc(val, UNID) {
http.open("GET", "status.agent?open&status=" + val + "&UNID=" + UNID, true);
http.onreadystatechange=function() {
if(http.readyState == 4) {
getdocs(document.getElementById("viewbody"));
}
}
http.send(null);
}

getdocs() simply grabs getdocs.agent Agent Design Element-generated markup and sets the innerHTML of the passed-thru HTML Object (via an AJAX call). moddoc() passes two values to the status.agent Agent Design Element: the new value of the status NotesItem and the target NotesDocument UNID (again, via AJAX). When it's complete, it runs another AJAX call to getdocs() to refresh the NotesData table.

All I need to do from here is make sure that my NotesData table has the markup it needs that wires into the moddoc(). Pretty simple, as via the getdocs() function I have absolute control over what's returned to the Web Browser Client.

Phase Two: HTTP Request Consumer Agents

The getdocs() and moddoc() simply require a modification to their respective Initialize subroutines to both deliver and update our NotesDocuments.

getdocs.agent Agent Design Element - Initialize

status.agent Agent Design Element - Initialize

... and that's it. The getdocs.agent Agent Design Element generates the markup that we need: the onchange event of each SELECT HTML Element passes the newly-selected value and the target NotesDocument Unique ID to the moddoc() JavaScript function, which calls our status.agent Agent Design Element. This processes the request - using the submitted UNID and status parameter values to find the target NotesDocument and update said NotesDocument status NotesItem respectively.

After that, we simply "refresh" the UI via another AJAX call... and we're done.

Online Demo, Example Download, and Closing Remarks

Again, for those of you who prefer an online demo complete with downloadable example, I've got you covered.

The code written in this series is - how should I put this - not ideal. In a "best practices" scenario here, you'd want to return something like JSON, and parse that JSON return locally. This code is about as simplified and straight forward as it gets - I didn't do anything that would subtract from the goal of this article: getting you to understand just what you can do with an HTTP Request Consumer Agent Design Element.

Hopefully, this is a simple enough showcase that you'll start delving into this practice yourself - regardless of your comfort level with LotusScript, JavaScript, HTML Method calls, and AJAX. It's really powerful stuff here, and your web applications will definitely benefit from the overall approach.

Notice I said web applications - which is the second time in this article that I haven't prefixed Domino as normal. I use this approach with Flash-based Banner Ads, simple HTML Forms hosted on IIS and Apache, and countless other scenarios. It's ultimately no different than using Google Web Services or any other SaaS or Cloud service. I take that back actually - using this approach, you can quickly and near-immediately bring Lotus Notes Client-only applications onto the Web and Mobile Browser Clients: simply point the target NotesDatabase to a different NotesDatabase, Domino Server, etc. and you have yourself a very powerful NotesData proxy on your hands...

NotesDocument Auto-Save Online Demo

08/28/2009 02:43:15 PM by Chris Toohey

For those of you who don't follow me on twitter or are one of connections on facebook, you may have missed my call to test out my NotesDocument Auto-Save Online Demo:

While I'm taking the family to Go-Karts, check out my Online Domino NotesDocument AutoSave Demo @ http://bit.ly/BfEfv (just play nicely)!

Those beta testers (thanks gang!) confirmed that it's working like a charm... but I wanted to broaden the test group (as well as give you a live demo of a fairly basic but pretty slick Auto-Save feature that you can easily add into your existing Domino Web Applications.

NotesDocument Auto-Save Online Demo with Firebug Console

The concept is pretty basic: When enabled on a new NotesDocument, the Auto-Save is triggered every 5 seconds. The Auto-Save submits the uidoc (go with me here...) via an AJAX-based HTTP Post - if it hasn't been saved yet, it submits to temp?CreateDocument, otherwise it submits to 0/<NotesDocument Unique ID>?SaveDocument. Post-submission, the AJAX POST returns the submitted NotesDocument Unique ID to a field on the HTML Form element named UNID (and that's you-nid btw...).

When you actually attempt to submit the HTML Form, it checks the UNID HTML field. If it's blank, it submits to document?CreateDocument, otherwise it submits to documents/<Value of the UNID HTML Field>?SaveDocument. (There's a Form Formula on the documents View Design Element that handles the submission. Same goes for the Auto-Save; it first checks the UNID before it submits - hence the @IsNewDoc-like functionality.

The reason why I went with this approach will be clear once the article is published... which will be soon after I return from vacation. Said article, and the downloadable example NotesDatabase, will be available on the Lotus Domino Designer Wiki.