Bring information and collaboration into the context of your daily business processes using composite applications
Santosh Kumar is the lead developer of a Lotus Component Designer team. He has implemented a great sample composite application. It shows how you can re-use an existing Eclipse component in a composite application in Lotus Notes 8.0. The Eclipse reporting component he is using allows displaying Notes data graphically. The description below is from Santosh. He is also trying to publish more information about this on developerworks.
Using open standards-based Eclipse technology, Notes 8 is brining new ways of creating composite application by combing different services and application. Notes 8 is making it easier to integrate line of business solutions and data in new type of applications. The Reporting Composite Application one such sample application providing ability to create graphical reports over domino databases in Notes environment using Eclipse based open source reporting system.
This application leverages composite application infrastructure to create graphical and analytical reports over Domino and present in single context for the end user. It reuses the existing established and well know Eclipse open source project BIRT http://www.eclipse.org/birt/phoenix/ for reporting solution and creates capability to create reports as composite application in Notes.
Users can visualize Domino data in different type of charts (ex Pie chart, bar charts ) , aggregate, and filter information resulting in getting more value from domino data. They can highlight results in report tables matching some specified criteria and drill down to specific notes document. Also users can configure to use different report template to visualize compelling reports.
The screenshot shows that sales lead report for selected company “De Vlaming Inc”. The Eclipse component at bottom shows report appearing for different types of leads the company is engaged in. The table has filtered results for selected company and highlights the leads whose “Revenue is greater than 200 units”. The charts on right hand side show distribution of total revenue from each type of leads.
In the above snapshot, highlighting enables to identify “new” lead with certain amount of revenue and selecting that row will open that specific Notes document. This enables users to quickly find information and collaborate effectively in context of operation. One can also specify particular domino database on which report can be generated and contextually drive from different database, like sales discussion database.
The solution involved creation of Domino connectors for Eclipse Reporting solution ( BIRT) ,using its run time engine to visualize report and leveraging composite application infrastructure to enable it as composite component in Notes. The solution is extensible to create report on any domino database, provide better analytics of information by specifying filtering, grouping and graphical visualization of domino data all in context of user operation.[Read More]
This document describes how you develop Eclipse components in an Eclipse IDE and run them on Lotus Notes. As described in this tutorial you can put Eclipse components on an Eclipse update site so that Notes pulls the components from this site when needed. However this does not allow developers to quickly change the Eclipse components in the IDE and test them. In order to do an iterative development (dev, test, dev, test, ...) you can use a new feature in the Composite Application Editor to add 'locally installed components' to a composite application.
Pranav Kuber and Nizar Lethif are developers in the CSI and PIM teams. They've implemented an interesting prototype that shows how to run and integrate with XUL applications in Notes 8 (with some additional plugin from Sametime). They've also planned to write a developerworks article with more information about how exactly they've implemented this. The description below is from Pranav and Nizar.
This article discusses how existing applications written in XUL (XML User-interface Language) can participate in the Composite Application Infrastructure. As an effort to address this, we implemented a new container which should be generic enough to embed any application which can be rendered in a browser. So far, we have implemented this container framework to support XUL.
The container creates an instance of the com.ibm.swt.xulrunner.browser.SWTXULRunnerBrowser browser and registers the properties with the Property Broker.
The com.ibm.swt.xulrunner.browser.SWTXULRunnerBrowser plug-in is available as a part of Sametime 7.5.1.
The Sametime installable will be available at http://www.ibm.com/developerworks/downloads/ls/lst
Currently, the com.ibm.swt.xulrunner.browser.SWTXULRunnerBrowser is not part of the Notes 8.0 plug-ins.
The developer of the CA specifies the following:
In order to demonstrate a working implementation, we created a XUL application which uses the ThinkPlace APIs to extract ideas and display them in a table.
ThinkPlace is a collaborative tool that allows IBM employees to surface opportunities to grow our business, identify solutions to critical client business needs and offer ideas for process improvements that will enhance IBM's culture or make us more competitive in the marketplace.
The APIs exposed by ThinkPlace are REST APIs.
More information on REST APIs: http://en.wikipedia.org/wiki/Representational_State_Transfer
(Refer to the screen shot below).
The Composite Application is created with one of the components as the XUL application above and the other, a notes database. When we click on the “Search ThinkPlace” button, a property event is fired (search).
Haus Weilgut has implemented their mindplan product as component for a composite application in Lotus Notes 8. The component is a Swing component with static properties, output properties and actions documented here. With these properties you can now interact with other components, e.g. when you select a node a sametime buddy list component can display the associated people and allow you to chat with them.
Karsten Lehmann describes below more details.
MindPlan (->http://www.mindplan.com) combines mindmapping, project planning and Lotus Notes in one application. Each node you see in the MindPlan tree is stored as a Lotus Notes document.
The MindPlan application is implemented in Java using Swing to draw the mindmap and gantt chart. We integrated the former standalone java application as an Expeditor plugin (using the SWT-AWT-bridge) and replaced the standard menu bar and toolbars with those of the Expeditor/R8 client.
The MindPlan component exposes several Composite Application properties and actions, that are documented in the MindPlan blog at http://blog.mindplan.biz, for example you can track the selection and modification of nodes. The application provides actions to open/close a MindPlan and refresh part of the node tree. We're also planning to support CA component properties to define your own menu commands. When the command is invoked, we then publish the command id and the Notes URLs of the current selection via the Property Broker.
At the moment there are two example use cases. The first one combines the MindPlan CA with the DocumentViewer component of the Component Library at http://www.openntf.org: You select a MindPlan node and see the node's document (e.g. to edit the richtext) in the lower part of the screen.
In the second use case, we wire the resource names of selected nodes (like tasks and milestones) to a Sametime buddy list. Just select a few nodes and you can start a group chat with one click.
The IBM design partner SIT has implemented a nice composite application showing how to integrate a third party VoIP solution in Lotus Notes. The solution shows how to use the sidebar component to launch different comp apps based on the current selection by passing the sidebar context to the comp apps. The text below is from Heiko Voigt.
For the currently running CeBIT Tradeshow in Hannover Germany (the largest IT Fair worldwide) the IBM Lotus Design Partner SIT GmbH (www.sit.de) is showing a new Integration of CTI-Functions into IBM Lotus Notes 8.01. SIT integrates the VoIP-Telephony Software STARFACE 3.0 from their partner vertico Software GmbH (www.starface.de) into IBM Lotus Notes 8.01 applications using the composite application framework. The STARFACE Connector sideshelf application acts as a single gateway for all telephony interfering to and from Lotus Notes applications. Using the composite application framework, telephony functions like call recognition and click-to-dial are also available for Eclipse Components, Web-Sites and Portlets. The integration into the sideshelf is done using a proxy eclipse component that interacts directly with the Expeditor platform beneath the Lotus Notes Layer to automate the wiring of data flow between components in a omposite application and the STARFACE Connector Component.
As a first customer solution, SIT integrated a customers existing CRM application (KUMATronik DocHouse BRM) with STARAFCAE 3.0. Several dashboards for Helpdesk and Sales were built using call recognition and click-to-dial functionality from STARFACE. The STARFACE Connector allows customizations like which application should be launched, if a call comes in for the particular user. The screenshot below shows the STARFACE Connector sideshelf plugin as well as a personalized Dashboard for a sales agent. The dashboard shows the caller information, documents, opportunities and projects that are currently under way. A personalized phone note is also opened, so the call can easily be documented and stored in the customers context.
Using the composite application framework, the possibilities for integration of telephony functions into the Lotus Notes 8.x platform are now almost unlimited. SIT GmbH and vertico Software GmbH are showing this integration on CeBIT, Hall 13, Stand B40.
In the first public beta of Lotus Notes 8.0 there is another great feature called NSF based update sites. As you might know already Eclipse components are packaged as Eclipse features and plugins and put on Eclipse update sites which are accessed through HTTP. Lotus Notes and Lotus Expeditor pull down these features when they are required (this is called provisioning).
There are other advantages of NSF based update site compared with 'classic' update sites:
At this point the template updatesite.ntf is only part of the Domino 8.0 build and not part of Notes 8.0.
Nathan Freeman from Lotus911 has implemented a very nice carousel component for composite applications in Lotus Notes 8x. It is basically a graphical navigator that can be used in many different scenarios. The following screenshot shows a Notes database with contacts. When you select another view entry the carousel brings the appropriate person in focus and when you select an entry in the carousel the Notes view selection changes to that entry.
Here is a bigger version of that screenshot: http://www.ibm.com/developerworks/blogs/resources/CompApps/c1.jpg
In order to use it for your own Notes database you only need to add a few lines of code, primarily in the postopen view event and in the onselect view event. Both events use a script library that Lotus911 provides with classes like CarouselConnection and CarouselUIView.
Nathan has started a blog about this component: http://www.bleedyellow.com/blogs/carousel/
He uses JSON to put multiple values like the Notes URL and the display name in one property that is then published to the carousel component. Another thing that you don't see in the screenshot but that I really like is the packaging. The whole application is in one Notes database. He used (parts of) the updatesite.ntf to store the Eclipse code in the database together with the comp app definition and the contacts design notes and data.
It has been difficult to find certain information in the blog. I've created this entry with pointers to the most important blog entries. You can access this entry always from the Favorites section in the right column.
How to get started with Composite Applications on the Rich Client
Benefits and advantages of Composite Applications in Notes
Myths and facts about Composite Applications
Sample: BIRT component
Sample: Web clipper component
Building Composite Applications for Lotus Notes 8.0 movies
Redbook: Building Composite Applications
Sample Rich Client Applications and Components
Sample: BIRT component
Sample: Web clipper component
Sample: Browser integration
Sample: Lead Manager
Sample: Tagging service
Sample: Productivity Editor to preview attachments
Sample: Integration of MS Office
Sample: Team dashboard
Sample: Open mails in context
Sample: How to run XUL applications in Notes 8
Simple tutorials of NSF based applications with NSF and Eclipse components
Building composite applications for Lotus Notes 8.0 with IBM Education Assistant
More sophisticated tutorial of NSF based applications
Redbook - Building Composite Applications
Benefits and advantages of Composite Applications in Notes
Myths and facts about Composite Applications
Types of components in composite applications
Lotusphere 2007 presentations
Reusable components in Lotus Notes
Designing NSF and Eclipse components articles
Types of Composite Applications in Portal 6
Value add of Portal based composite applications
NSF based update sites
Installation of Composite Application Editor
Launch options for NSF based Composite Applications
Storage of NSF based composite applications in NSFs
How to run Notes from the Eclipse IDE
How to develop Eclipse components from Eclipse IDE
Usage of OSGI console
Installation of Eclipse features in Notes 8.0
Debugging of NSF components
Logging of composite applications in Notes 8.0
Cached composite application data in Notes 8.0
Property broker tool - Debug tools
Property broker tool - Action emulation
Property broker tool - Tracing a property
Debugging and provisioned features
Lotus Expeditor 6.1.1 toolkit
Patterns and Techniques
Property Broker on Rich Client
Notes 8.0.1 Features
Reusable Rich Client Components
Composite Applications in Portal
Ask your questions and provide feedback
For the PIM applications mail, calendar and contacts in Lotus Notes 8.0 we've currently planned to publish 10 components views that can be re-used in custom composite applications. Furthermore these component views will provide output properties and actions which I describe in this entry. The properties use either the simple type xsd:string or one of our standard datatypes.
Notes Mail View
Output properties (only published when the views/folders ($All) or Inbox are displayed in this component view):
Notes Calendar View
Notes Calendar Navigator
Notes Contacts View
Output properties (only published when the view/folder All_Contacts is displayed in this component view):
A typical composite application use case in Lotus Notes is that you select something in a Notes view and then want to update some other component based on the currently selected document. You can do this easily in a declarative way by publishing the value of a column in a property. However this only allows publishing a column's value, not a Notes URL of the currently selected document.
The value of the property is a Notes URL pointing to a Notes document, e.g. "Notes://www.mycompany.com/leads.nsf/By+Rep/35AE8FBFA573336A852563D100741784?OpenDocument".
In many scenarios you want to re-use existing NSFs in new composite applications as they are. Any change to the design of the databases must often be avoided. This is the same pattern for different types of components, e.g. native applications or web applications. Since the apps you want to integrate have been implemented by different people at different times it is often hard to find people that even could do the necessary changes. Even if you have skills in your company you really want to avoid touching running systems. And even if you get people to approve extensions you want to avoid them anyway if possible since the extensions cost money. Even if the development costs are minimal (e.g. add a WSDL file in database design) another deployment step is necessary.
So we were thinking about how to provide properties and actions with NSF components out of the box in 8.0.1. I think this is a first good step but we can and want to do certainly more in this area. And we want to provide more out of the box properties and actions for other types of components.
The description below is from Bhavan Kumar, the tech lead of the Notes property broker team.
The advantage of built-in properties and actions is that a separate WSDL file need not be added to any of the Notes components in order to take advantage of the publishing and action invocation. Thus any existing Notes component can take part in a composite application without any changes to its design.
Registration + The preference “com.ibm.notes.enablePreferences = true” needs to be set on the page containing the Notes components.
+ The preference “com.ibm.notes.enablePreferences = true” needs to be set on the page containing the Notes components.
+ “com.ibm.notes.enableBuiltInPB=true” preference should be set on each Notes view component in the advanced properties tab of the CAE to register the WSDL automatically.
+ The preference “com.ibm.notes.publishBuiltInPropsFromView = [viewname1],[foldername1]” should be set to publish the property from the specified view/folder.This will be honored on the Notes side only if one other column is also publishing.
Built-In Property - SelectedNotesDocumentURLChanged
Built-In Action - FilterCurrentUIViewViaCategory Built-In Action - SearchCurrentUIView + Restrictions: - does not allow to pass in a formula to do parametric searches.
Built-In Action - SearchCurrentUIView + Restrictions: - does not allow to pass in a formula to do parametric searches.
- does not allow to pass in a formula to do parametric searches.
Jo Grant asked me to post this entry since he is out on vacation this week. He describes how you can develop ViewParts that can be put as components in composite applications and in the sideshelf at the same time."Any legal ViewPart can be used as a shelf view. Any legal Viewpart with allowMultiple=True can be used as a component. So it is possible to create one view that can be used as both a shelf view and a component.
However a component isn't that interesting unless it has actions or properties that let it communicate with other components. And such actions and properties are not helpful for a shelf view. So, in general this is the architecture I would recommend for reusing code between shelf views and components.
1) First create all of the custom UI you wish to make in a SWT Composite or Canvas. Be sure to include public APIs for all of the features you wish to expose or consume that relate to that UI.
2) Create a ViewPart for your sideshelf and place an instance of your Composite or Canvas upon it. Connect up whatever way you wish your sideshelf component to interact with the rest of the platform (e.g. wiring in the eclipse selection model, etc) to your control.
3) Create a ViewPart for your component and place an instance of your Composite or Canvas upon it. Create your WSDL to expose the properties and actions you wish, and within this view part connect up the property broker to your UI control.
Using this approach you have all the work of the visualization in a single place. You can then reuse that in two different places that each require different ways of linking to your display logic. If other areas come up where you wish this sort of visualization (e.g. a pop-up dialog box from a toolbar icon) you can use your UI control again.
An example: I wish to display "business cards" from my name and address book. It would be nice to do so either in the sideshelf or as a component. So the first thing I did was create a ContactPanel control subclassed from Composite. It had an API setContactID() which, when called, would search your names and address book, find the corresponding record, extract the information, and display it on it's UI.
For the component then, I created a ViewPart whose UI was one of these ContactPanels. I created a WSDL file that declared a single action to receive a contact ID. The ViewPart then contained the glue to route the calling of that action to a call to the setContactID() API on the ContactPanel.
For the sideshelf, I created a ViewPart which had a drop down combo box, and an instance of the ContactPanel. The ViewPart registered as a listener to the PropertyBroker and looked for property changes that were of an email address type. As it noted these, it used the combo box as a "most recently used" type list. When the user selected a name from the drop down, that value was passed to the setContactID() API on the ContactPanel"[Read More]
In this blog entry and the one tomorrow I want to describe the different preferences that you can set on component views, pages and the application to modifiy the composite application.
In this entry I explain the different preferences for component views. All of these preferences can be set in the Composite Application Editor. Some of them in a nice/specialized UI, other ones only in the generic UI for advanced preferences.
Component view preferences
The following preferences can be set on any type of component/component view.
There are some more additional component view 'attributes' which are not set as generic preferences but there are specialized attributes:
- title (multiple languages): The CAE picks up whatever name you give your component view when adding to the palette (for current locale)
- description (multiple languages)
NSF component view preferences
The following preferences are supported by NSF component views in addition to the generic ones above.
- All preference names are case sensitive.
- You can access them in the Java code via the TopologyManager. See here for the API documentation in Expeditor 6.1.
The Groupware Competence Center in Paderborn/Germany has implemented a nice tool to manage composite applications:
I like especially the feature to figure out very easily which components are used by which/how many applications. I think that this functionality could be used well by administrators to get a better overview of the system.
There are also other features that help especially the component users/application assemblers. The components and their properties and actions are read and displayed in a nice UI via a Notes database. There is also a way to share common datatypes within a departement or enterprise to avoid an explosion of custom incompatible datatypes.
The management application might even be extended in the future to change certain aspects of the application design directly from here.
Please let us know how important this type of managebility capabilities are to help us figure out whether we need to provide some of these functions as part of the product.