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.

MMM: Using the Mail-Merge Method

02/20/2008 01:41:06 PM by Chris Toohey

I've been doing this for a while - just never really put a name to it. And since Rob points out that I'm coining my own terms , I thought I'd put this out there...

The Mail-Merge Method, or MMM, is something that can pretty much be applied to anything - from notifications, UI document rendering, dynamic content, and countless other uses. In fact, I'm actively using this method in Project: Yellowcake to generate dynamic content markup on-the-fly... but that's a story for another post!

MMM basically consists of the following:

Author's Note: My first thought was to just now write "Step 1:", which was immediately followed by "Cut a hole in the box..." ;-)

  1. Create unique-to-the-engine keywords.
  2. Create a delimiter string that won't normally be used in your content, which you'll use as a wrapper for your keywords. For example, I tend to use <<keyword>>, but you may want to get more unique than that: %^&keyword%^&.
  3. Create a simple merge-point for your expected content.

If I lost you on that last step, that's ok -- it requires a much deeper explanation than a single bullet-point...

To illustrate how effective MMM can be (as well as help define the method), let's say that you want to create notification email-functionality in your given workflow-based application. Most people would either write an email on-the-fly via @Formula (<shudder>) or get really tricky and write a simple-and-static email generating Lotuscript-based Agent Design Element called "notifications". "notifications" runs either on-event or on-schedule, but basically grabs a document and generates an email to a given recipient with a doclink and some information on the given document.

Simple right? Add a field. Now change the font-weight for a given item in the body. Now put a red-colored, 8pt font-size disclaimer footer at the bottom of the email that says "This is an automated response, please do not response and think the sender actually cares...".

You'll spend more time playing around with the formatting of the email message than you will with the workflow of the application itself. Trust me - I used to do that.

And before you ask "Why should I care what the email looks like?", consider this: it's arguably part of your job to show just how flexible and helping the given technology investment can be - and giving someone pretty email notifications can be a very simple and effective way of showcasing the capabilities of the technology... but I digress.

So you've got this notification, but you have to maintain an arm-length codestream for formatting, etc.

Now imagine this instead:

Email Template Example

I take a simple Form Design Element, which I've called template_email, to create various "email templates" which my notifications Agent simply grabs en-masse and replaces <<keyword>> with the keyword's correlating NotesItem in the given document.

This allows me to create a simple Super User-Defined Notifications Engine in my various applications... which not only provides the application administrator the ability to create and maintain their own notifications, but it also keeps me out of the Domino Designer client playing around with RTItem formatting. The user community benefits from my laziness!

And this is only an example of MMM. In Project: Yellowcake, I'm using the MMM approach to get some pretty amazing functionality... but like I said, that's for a later post.

I'll work on getting both more examples of this method as well as my Notifications Engine out ASAP - provided there's an interest in such a utility. ;-)

Doug DorfmanName:Doug DorfmanComment

Thanks for the posting about MMM. Can you post a sample of the agent code that replaces the keywords in the rich-text email body. Do you have to code to look for each keyword and do a replace or is the code generic and knows how to find all keywords and replace with data? Can you shoot me an email if you post a response. Thanks.

Chris TooheyName:Chris TooheyWebsite:http://www.dominoguru.comComment

Emails sent...

You, sir, owe me a new keyboard!

But yeah, you got it with Step 1 - although it doesn't have to be the NotesItem name, but rather a key that the system could lookup to see what value it should use to replace with the target placeholder.

I'm going to move forward with something that I was on-the-fence about with Project: Zephyr, which is the creation of metric documents for each email template, which will execute merged formula against the source document and THEN merge the resultant values against the email template contents. THAT will literally give you infinite flexibility and unlimited control of the source content and little or no modification to the source database.

RobName:RobWebsite:dowork.comComment I just looked at my Jemail class written in February of 2001. It does precisely what you're talking about. It only works with standard text. In most of my applications I have a memo view that contains documents of type memo. For example, in the RFIC Paper Submission System ( This is the automated system used by the authors to submit their papers for presentation at the International Microwave Conference.

The administrator create a template for the messages to be sent to notify the authors of the submitted papers the decision has been taken by the selection committees. The templates use tags which contain the item names in tag brackets like yours; (<<) and (>>).

Then, when the time comes to notify all the authors, I enable the scheduled agent to run once which sequences through a view of all submitted papers. It selects the correct template based on the disposition of each paper (the template titles match the disposition status values); Accepted for Oral Presentation, Accepted for Poster Presentation, Accepted as Invited Paper, and Rejected. The class, Jemail, loads the correct template, then the Paper Registration Form document which contains all the meta data about the paper is used to merge with the template. Jemail allows several documents to be used in the merge step.

Because email has become so unreliable due to spam filters, I always store a copy of the message on the web site. If the author logs in and clicks on the "My Messages" link, he gets a list of every automated message we've sent out. We alwasy tell them if they haven't heard from us to come to the web site and check their messages.

I have also created a much more complex legal document template system that does the replacements within a rich text field. I used the "Rich Text management template rtLib" (google this string to find it). It is only $160 per replication ID and it has continued to work for six years through two versions of Notes with absolutely no problems. I highly recommend it.

Is that the kind of thing you're talking about?


John SmartName:John SmartWebsite:http://www.greyduck.comComment I don't understand step 1... unless it's an english to fieldname thing? I wish I had thought of that. We've been using MIME instead, because HTML is so much easier for this stuff, but it hadn't occurred to me to have rich text fields in profiles and parse the rich text for the keywords! I suppose you could also validate the field names (probably using NotesDocument.Items since parsing the form design wouldn't take subforms into account).

P.S.: Your steps, translated:
  1. Cut the holes in the box
  2. Highlight the holes in that box
  3. Pass your junk through that box!
Chris TooheyName:Chris TooheyWebsite:http://www.dominoguru.comComment

While I use the example of email, I don't want everyone to be stuck in that mindset. For example, I use MMM in a simple CMS solution that I wrote a while back, with great success!

Say you define a chunk of markup as a website footer:

<h5>Footer Here</h5>

If you put this in a document and give it a key of sitefooter, you could easily define this markup snippet throughout the application as <<sitefooter>>. The application can be designed to cycle through all keys and replace any hits with their correlating content. Trust me - VERY easy thing to do...

The great thing about this - change the sitefooter-keyed document and all documents using this key will be updated via your to-be-designed engine. It's that level of auto-maintenance that turns a Notes database into a Notes Application - allowing your users to maintain their own applications (in this instance, a website via a simple CMS) and give you time to master Guitar Hero!

(not published)

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