Saturday, January 3, 2009

Integrate Google Maps with the Web Intelligence Rich Client

I work for SAP Business Objects in Technical Customer Assurance. My speciality is the Software Development Kits (SDKs) that's provided with our Business Intelligence products - BusinessObjects Enterprise, Web Intelligence, Desktop Intelligence, Crystal Reports and Crystal Xcelsius.

In my blog, I discuss subjects that I personally find interesting - little known or not-well-documented corners of the SDK, new functionality or new SDKs, or interesting issues that I've come across in a SAP Incident or SAP Developer Network forums.

You're more than welcome to suggest any topic (SAP Business Objects SDK related, of course...) that you'd like me to discuss - I have a dozen or so items on my blog to-do list, but I'm always on the hunt for anything interesting with our SDKs.

You might have come across Rob Horne, either through his SCN Business Objects Community contributions - blog[1] and articles - or at one of several SAP Business Objects Developer Conferences. He's a real good guy and still very active in the BOC Developer community.

Rob was one of my technical mentors when I started at Business Objects (now SAP Business Objects), and I've always enjoyed talking tech with him. On the phone a couple weeks back, he wondered if it was possible to integrate Google Maps into the Web Intelligence Rich Client.

Google Maps integration is something that users just expect now - they want to click on something, and have its map location displayed.

Being always in the hunt for interesting stuff to do with our SDKs, I spent a couple of days during my training period looking around to see what's available for Maps integration.

As it turned out, it didn't take much effort to build up a very simple Proof-Of-Concept. Here's a screenshot:

image

When I click on a City cell, the Google Maps to the right updates to centre (ah, a Canadian!) on the City selected.

Let me describe what I did.

Dramatis Personæ

The heavy lifting is done by the stuff I used - all that I did was write a page of code to tie stuff together. So let me introduce the characters in this play:

  • Web Intelligence Rich Client - a desktop solution for ad-hoc reporting, that frees Web Intelligence documents from the Web.
  • Web Intelligence Extension Points - a Java-based API for the Web Intelligence Rich Client or Java Reporting Panel, allowing extension of the user interface.
  • JDICplus - an incubator project of JDesktop Integration Components (JDIC[2]) that integrates Microsoft Internet Explorer into Java.

The Web Intelligence Rich Client (WRC) is a new feature with BusinessObjects Enterprise XI 3.x. It's a desktop application that allow you to view, modify and create Web Intelligence documents. With the WRC, you no longer need web connectivity to do ad-hoc reporting with WebI - install it on your laptop, and now you can take your reports with you anywhere you go.

I've been playing with the Web Intelligence Extension Points (WebIExtPts) on and off for the past few months, and am pretty impressed with how it allows you to integrate your own components into the WRC. It may not have full document creation/modification functionality, but does give you plenty of hooks to embed your own Java stuff into the UI and have them triggered via user events on the document viewer. The WebIExtPts SDK is included with the WRC - there's no additional download required[3].

JDIC is an Open Source project bringing desktop integration to Java (WRC uses JDIC for Microsoft Outlook integration). JDICplus offers several ready-made Java components using Microsoft Internet Explorer. One of the featured components is a class that integrates the three most popular Internet Maps APIs - Google Maps, Yahoo! Maps or Microsoft Virtual Earth.

Web Intelligence Extension Points Code

Here's the Java code I wrote:

Java Code to Integrate JDICplus BrMaps class to WebI Rich Client

This creates a Java Report Panel plugin that opens JDICplug BrMap in the WRC right panel, then registers a Report Selection Listener to listen for Selection Events. If a Web Intelligence cell is selected, it checks the cell text to see if it's displaying a [City] value, and if so, pass the value of the cell to a JavaScript to pass it to Google Maps.

If you want to alter the selection rule, modify the code just after the "if(reportElementSelection.getSelectionCount() > 0) {" line.

Assuming the WRC is installed at the default folder, create the folder path and file:

c:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\classes\WRC_Embed_Google_Maps\com\sap\webi\richclient\sample\WRCReportingPanelMap.java

and copy-and-paste the code into the Java source file.

Download the JDICplus library from https://jdic.dev.java.net/documentation/incubator/JDICplus/index.html and copy the contents of the lib folder into the folder path:

c:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\classes\JDICplus

Inside the JDICplus folder, you should see the files JDICplus.jar, bin\jdicArc.dll and bin\jdicWeb.dll.

Compile the Java code by opening the Command Prompt, cd'ing to the WRC_Embed_Google_Maps folder, and running the command:

javac.exe -classpath ..\cdz_ext.jar;..\RCThinCadenza.jar;..\JDICplus\JDICplus.jar com\sap\webi\richclient\sample\WRCReportingPanelMap.java

Make sure you have the Java SDK javac.exe command in your Path environment variable to execute the above.

Now create a webi_plugin.properties file:

c:\Program Files\Business Objects\BusinessObjects Enterprise 12.0\classes\webi_plugin.properties

that contains the following text:

webi_plugin.properties files

This file ensures that the WRC can find the JDICplus library and our compiled WebIExtPts code, and registers our class to be used when the WRC reporting panel is started.

Start up the WRC, and try creating a document that displays a [City] value. You can use the "Island Resorts Marketing" sample Universe, and the Customer.City object within it.

Click on the City, and you should see Google Maps refresh to show you the city map!

Conclusion

This is a very bare-bones POC - but certainly shows how you can use the Web Intelligence Extension Points to extend the functionality of Web Intelligence.

There's plenty of other freely available Java integration components out there - if you find any interesting ones to embed in the Rich Client, do post below. I'm very interested in seeing what people can come up with.

Have fun!

References

[1] Rob's Blog: https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251939476

[2] JDIC site: http://jdic.dev.java.net

[3] The Web Intelligence Extension Points is a recent 'Graduate' of SAP Business Objects labs (http://labs.businessobjects.com) - the API documentation will soon move to SCN, but can currently still be found on the labs site. Note that, officially, the Web Intelligence Extension Points is supported for use by SAP Business Objects OEM/Partner customers only. If you're not a Partner, you're more than welcome to use it but questions should be directed to the BusinessObjects SDK forums (https://forums.sdn.sap.com/category.jspa?categoryID=46) rather than Customer Support.

Ted Ueda is a Senior Engineer with Technical Customer Assurance, SAP Business Objects.


Add to: del.icio.us | Digg | Reddit


Comment on this articleGot any interesting Web Intelligence Extension Points integration tasks? Post here!
Comment on this weblog

Showing messages 1 through 4 of 4.

Titles Only Main Topics Oldest First

awesome!
2009-01-01 06:34:46 A C Business Card [Reply]

I've experimented with EP + JDIC a while back and was impressed with what all could be done. Your GMaps stuff is an excellent testament to that - nice work!


I'm especially keen for JWebPane's release ( http://weblogs.java.net/blog/alex2d/archive/2008/12/jwebpane_projec.html ), which should bring a more sound browser component to the swing stage...

awesome!
2009-01-02 22:54:35 Ted Ueda SAP Employee Business Card [Reply]

There's so many components out there now for integration (beyond all the Eclipse plugins, that is).


There's certainly more choices out there for ready-made components now, that the first thing I do is Google...

No comments:

Post a Comment