Lotus Sandbox on Banana’s

I have been asked a few times where one can get the Composite Application Debug tools.  They use to be available on the Lotus Sandbox which has been taken down but can now be accessed on Peter’s “Banana’s” site here.  The tool includes the Property Broker Monitor and the Topology Peek tool.

Property Broker Monitor:
This tool is used for run time analysis of the property broker registry and events happening in the broker. The different tabs are dynamic and represent real-time events and data. They will all change as the environment changes around it. You can accomplish the following with the tool:

  • Use the Console tab to see the different events happening in the broker.
  • The Current Page tab shows the components on the current page. It shows the actions and parameters for each of the components.
  • The Active Actions tab shows all active registered actions currently in the broker.
  • Active Wires tab shows all of the currently enabled wires in the broker.
  • Trace Properties with additional logging.

Topology Peek:
This tool is used to see what the internal topology cache for the installed composite application looks like. It shows in a UI what is currently present in the cache. In general, if it is not in the Topology Peek it is not in the cached presentation of the application. This can assist in what the applications consists of on the client and should be refreshed when CA XML and definitions change on the fly.


Creating Java based components just got a lot easier in Expeditor 6.2.2

There is a new set of API’s that allow the creation of Java based components – for use in composite applications – in the Lotus Expeditor stack.  The recently published article, jWidget – Easy Creation of Java Composite Application Components, explains how to use the API’s and not get bogged down with WSDL, or Property Broker API’s or comp app based extensions.   The new jWidget classes make it easy to code a new component for use in the Composite Application Editor.  The article goes into depth on how the jWidget classes interact with the composite application infrastructure (areas including TopologyHandler and Property Broker).

New articles for Notes 8.5.2

There are five new articles on the Composite Application Wiki, each one hits some new or extended function you will see in the 8.5.2 release.  I will be writing about these articles separately.  This new content has come directly from excellent customer and business partner feedback.

New Component Level Access Control in Notes 8.5.2 by Michael Cooper

Using a Notes Outline to control page navigation in a composite application by Bob Balfe

Understanding the DataChange event in Container Components by Chuck Imperato

Understanding the CAI URL by Bob Balfe

jWidget – Easy Creation of Java Composite Applicaiton Components by Michael Cooper

Gist integration with Lotus Notes, great demo!

Wow, what a great demo!  This video shows so many areas of integration I don’t know where to begin.  First off it shows Gist integration with the Notes toolbars – most likely an Eclipse extension and then it shows how Gist can integrate with a composite application.  The great thing about this composite is the demonstration shows integration with a web page and a native application using the OpenSpan container.

Great demo!

Using LotusScript to communicate with Java/Plug-ins

As many are aware, EventAdmin is a publish/subscribe event system that ships with Lotus Notes and is the primary communication mechanism used between OSGI plug-ins.  What is really missing in the Notes client is a pub/sub model to communicate between Lotus Script and the Eclipse Java world.  While you can certainly role your own through some creative coding the real answer would be to have the entire Notes core side (written in C) publish its various events to the Java side through the use of EventAdmin -this would allow any plug-in developer to plug in to the many events that happen in Notes (replication, new mail, document saved, etc).  Today you can do some interesting things with composite applications, the containers, and the property broker but that stuff only works in the context of a composite.  If you just want a view in the side shelf and have it be able to drive or communicate with other views in the perspective you will have to do something different – this is exactly where I think a LotusScript class for EventAdmin would be great.  You could register for any various topic or role your own topics on both sides of the Java/Notes Core fence.  This kind of thing can easily be done today using basic plug-in code with an LSX library installed.  I have heard of this requirement a lot in the labs and in the forums so I figured I would get some broader feedback on this through my blog – all 10 readers!

If you find this an interesting topics go ahead and email me or respond to this post so I can forward it on.

You can also check out the OpenNTF project I posted a while back that is an EventAdmin to PropertyBroker bridge for composites.  So if this was in fact enabled you could have property broker actions be called when something like new mail arrives…

Webinar from IBM and OpenSpan

“An IBM Advanced Business Partner, OpenSpan offers OpenSpan Windows Container for IBM Lotus, which extends IBM Lotus Notes (versions 8.5+) and IBM Lotus Expeditor (versions 6.2+) to integrate and automate applications not currently supported by IBM Lotus Expeditor, including native Windows desktop applications.”

OpenSpan Windows Container for IBM Lotus

Labs for “Eclipse, extensions, composites and XPages!” are now available!

ad202-screenshotAs promised a couple of weeks ago, the labs I orchestrated in Germany last week are now available for broader consumption.  The lab is available on Developer Works in a new activity named Developer Kit-in-a-box in Lotus Application Development Group.  The labs are in the section under Composite Applications, the link directly to the material is here.

You will have to login to developer works in order to get at this content.  I am looking forward to seeing the feedback and contributions from partners and customers in this activity.
Direct Link – click here.

Online webinars from Lotus Education

Read Ed’s post about the up and coming Lotus Education webinars and the agenda’s look great.  I saw the XPages and Composite Applications sessions at Lotusphere and I am sure the webinar’s will be more than worth the cost of these sessions.   Interestingly, Hunters course outline looks very similar to the labs I am giving at Germany later this week.  I think showing how to integrate Java, SWT, XPages and container components into a single application will be some good education for many.

STM01 — Demystifying Sametime 8.5 Webinar
When : Thursday March 25th, 11am — 2:30pm EST
Speakers : Wes Morgan, Michael Herring, Frank Altenburg
Price: $249.USD

D8M02 — Creating Xpages Application in IBM Lotus Notes 8.5.x Webinar
When : Wednesday April 28th, 11am — 1:00pm EST
Speakers : Martin Donnelley & Tony McGuckin
Price: $149.USD

D8M01 — Building Composite Applications in IBM Lotus Notes 8.5.1 Webinar
When : Thursday April 15th, 11am — 2pm EST
Speakers : Hunter Medney
Price: $149.USD

D8M03 — Upgrading to IBM Lotus Notes Domino 8.5.1 Webinar
When : Thursday April 29th, 11am — 3pm EST
Speakers — Tim Speed, Joseph Andersen, Barry Rosen
Price: $249.USD

Make your existing NSF a composite

I figured I would post this since it was asked many times in the Meet the Developer Lab down at Lotusphere.  I will also, as promised, be posting some tutorials about the applications shown in AD202.

So you have an existing NSF and you want to make it a composite for any number of reasons.  Mostly, I had heard were to get Eclipse views, Java views, or XPage components next to their existing NSF based components or putting XPage components in the side bar.  It is actually a lot simpler than you may think.  The first thing to do is open the database in Designer and look for the “Composite Applications” entry in the designer elements tree.  You will then double click on “Applications“:


You will then get to choose a name for your composite and save it off.  That is it!


You now have a composite inside the NSF.  If you want to edit the layout and add pages and components to the composite you will need to edit it in the Composite Application Editor (CAE).  The CAE is an optional installation when  Lotus Notes is installed, this will need to be installed on the system in order for you to edit it.

You then have to change the launch settings for the NSF.  This can be done in the database properties right from within Designer.  Here you can see in the Application Properties in the Launch tab we simply set the launch type to be “Launch as a composite application“:


The database now opens directly to the “Blank Page” when opened from the Notes client.  If CAE is installed you then select “Actions | Edit Application” from the top menu in the Notes client.


From here you can use the CAE to lay out your application.

If you want some great tutorials look at the Composite Application Wiki to get started, Tutorials.

Creating a calendar entry from an XPage event

One of the areas I struggled with in our demo was creating a calendar entry from the XPage component when the button was clicked in the previous post.  The problem is you need to make sure you include all of the right fields otherwise your calendar entry will not display and open properly in the Notes 8.5 calendar.  The key element I was missing was the”@GetCurrentTimeZone” as the computeWithForm() did not calculate all of the right fields when the note was saved.  For the most part it was straight forward, I had to parse out some of the information so the code looks hackish.

Source Code for event:

var dir = session.getDbDirectory( session.getServerName() );
var mail = dir.openMailDatabase();
var doc = mail.createDocument();
doc.appendItemValue("Form", "Appointment");
doc.appendItemValue("AppointmentType", "3");
doc.appendItemValue("From", session.getEffectiveUserName());
doc.appendItemValue("Principle", session.getEffectiveUserName());
doc.appendItemValue("Chair", session.getEffectiveUserName());
doc.appendItemValue("Subject", context.getSessionProperty("summary"));
doc.appendItemValue("Location", context.getSessionProperty("location"));
doc.appendItemValue("Categories", "Lotusphere 2010");
dt = context.getSessionProperty("begintime");
//Get the date out
date = dt.substr(0, 10);
//Now the time
begin = dt.indexOf("T", 10) + 1;
time = dt.substr(begin, 8);
d1 = session.createDateTime(date + " " + time);
doc.replaceItemValue("StartDateTime", d1);
doc.replaceItemValue("StartDate", d1);
doc.replaceItemValue("StartTime", d1);
tz = session.evaluate("@GetCurrentTimeZone");
doc.replaceItemValue("StartTimeZone", tz[0]);
doc.replaceItemValue("CalendarDateTime", d1);
dt = context.getSessionProperty("endtime");
date = dt.substr(0, 10);
//Now the time
begin = dt.indexOf("T", 10) + 1;
time = dt.substr(begin, 8);
d2 = session.createDateTime(date + " " + time);
doc.replaceItemValue("EndDateTime", d2);
doc.replaceItemValue("EndDate", d2);
doc.replaceItemValue("EndTime", d2);
doc.replaceItemValue("EndTimeZone", tz[0]);
var description = context.getSessionProperty("description");
var speakers = context.getSessionProperty("speakers");
body = "SPEAKERS:nn" + speakers + "nnDESCRIPTION:nn" + description;
doc.replaceItemValue("Body", body);
doc.computeWithForm(true, false);
doc.save(true, false);