|
Tuesday, May 6, 2008, 03:57 PM - help
Posted by Bob Balfe
Mikkel wrote about the CAI url posting Niklas put on the Composite Application wiki. These are all good comments about the format of the URL so I am not going to address the ugliness - I will just say there is a method to the madness. Posted by Bob Balfe
What I can show you is, you can actually create the URL in code fairly easy (if you are on the Java side of the house of course). Since the page id is the perspective identifier you can use the Eclipse Workbench API's to get that. Then, you can use the method I wrote about in the wiki to get the meta-data associated with the page. Once you get the page object, the application the page is contained in is stored in the property "applicationGUID". You now have the GUID and the page ID for the cai url.
You can also use the OSGI console to see this same information. Start with using the "thsh p" command on the osgi console. Then use the "thsh nctx <page id>" to get the properties that are written to the extension registry for the page. Lastly, you can do the same thing with components: get the list of components on a page with "thsh sc <page id>" and that will show the properties for that component.
See the sample console output below.
Topology OSGI commmands:
---Topology Handler Commands---
thsh n - Show all navigation elements
thsh p - Show all Pages
thsh l - Show all Labels
thsh f - Show all topology files
thsh apps - Show all application GUIDs
thsh e <namespace> - Show all registered extensions under the given namespace
thsh dp - Show all dirty pages
thsh nattr <navigation id> - Show all navigation preferences
thsh nctx <navigation id> - Show navigation context
thsh sc <page id> - Show components for a page
thsh b <page id> - Show copies of the specified page
Sample console output:
osgi> thsh p
------------------------------------------------
Topology Handler All Page Elements
------------------------------------------------
Application GUID: 11_5JMPDRH1000980269G784H2GO41209749441490
--------------------------------
TYPE_PERSPECTIVE; NAME = test application; ID = 6_5JMPDRH1000980269G784H2GO11209749441490; Application GUID = 11_5JMPDRH1000980269G784H2GO41209749441490
Application GUID: 11_ITM9DGL1087KE02MQFOQ5C2GK3
--------------------------------
TYPE_PERSPECTIVE; NAME = Browser sample; ID = 6_ITM9DGL1087KE02MQFOQ5C2G26; Application GUID = 11_ITM9DGL1087KE02MQFOQ5C2GK3
TYPE_PERSPECTIVE; NAME = Portlet to Portlet Communication sample; ID = 6_ITM9DGL1087KE02MQFOQ5C2GQ6; Application GUID = 11_ITM9DGL1087KE02MQFOQ5C2GK3
TYPE_PERSPECTIVE; NAME = Portlet to SWT Communication sample; ID = 6_ITM9DGL1087KE02MQFOQ5C2GE5; Application GUID = 11_ITM9DGL1087KE02MQFOQ5C2GK3
TYPE_PERSPECTIVE; NAME = SWT to Portlet Communication sample; ID = 6_ITM9DGL1087KE02MQFOQ5C2BB1; Application GUID = 11_ITM9DGL1087KE02MQFOQ5C2GK3
TYPE_PERSPECTIVE; NAME = Double Browser sample; ID = 6_ITM9DGL1087KE02MQFOQ5C2GP7; Application GUID = 11_ITM9DGL1087KE02MQFOQ5C2GK3
TYPE_PERSPECTIVE; NAME = URL Selector to Launch Dynamic Action Page; ID = nav_CrossPageSource1; Application GUID = 11_ITM9DGL1087KE02MQFOQ5C2GK3
TYPE_PERSPECTIVE; NAME = Dynamic Action Accepts a URL; ID = nav_CrossPage_ShowURL1; Application GUID = 11_ITM9DGL1087KE02MQFOQ5C2GK3
Application GUID: 1F_3KE527R20OGG702ELBAT9T10P0
--------------------------------
TYPE_PERSPECTIVE; NAME = Getting Started; ID = 6_3KE527R20OGG702ELBAT9T1091; Application GUID = 1F_3KE527R20OGG702ELBAT9T10P0
Application GUID: 1F_3KE527R20OGG702ELBAT9T10K7
--------------------------------
TYPE_PERSPECTIVE; NAME = Home; ID = 6_3KE527R20OGG702ELBAT9T10K6; Application GUID = 1F_3KE527R20OGG702ELBAT9T10K7
Application GUID: 11_5JMPDRH1000980269G784H2GO41209697938390
--------------------------------
TYPE_PERSPECTIVE; NAME = testApp; ID = 6_5JMPDRH1000980269G784H2GO11209697938390; Application GUID = 11_5JMPDRH1000980269G784H2GO41209697938390
Application GUID: BD973A4E8C0FCDED54C69CB23940B5FC_1F_3KE527R200VQ502MGJOIMC2096
--------------------------------
TYPE_PERSPECTIVE; NAME = Mail; ID = BD973A4E8C0FCDED54C69CB23940B5FC_6_3KE527R200VQ502MGJOIMC20H7; Application GUID = BD973A4E8C0FCDED54C69CB23940B5FC_1F_3KE527R200VQ502MGJOIMC2096
TYPE_PERSPECTIVE; NAME = Calendar; ID = BD973A4E8C0FCDED54C69CB23940B5FC_6_3KE527R200VQ502MGJOIMC20T2; Application GUID = BD973A4E8C0FCDED54C69CB23940B5FC_1F_3KE527R200VQ502MGJOIMC2096
TYPE_PERSPECTIVE; NAME = To Do; ID = BD973A4E8C0FCDED54C69CB23940B5FC_6_3KE527R200VQ502MGJOIMC20T7; Application GUID = BD973A4E8C0FCDED54C69CB23940B5FC_1F_3KE527R200VQ502MGJOIMC2096
osgi> thsh nctx BD973A4E8C0FCDED54C69CB23940B5FC_6_3KE527R200VQ502MGJOIMC20H7
------------------------------------------------
Topology Handler Navigation Element Context
------------------------------------------------
Context values for navigation BD973A4E8C0FCDED54C69CB23940B5FC_6_3KE527R200VQ502MGJOIMC20H7
com.ibm.portal.app.input.launchUrl = notes:///852568BD0051EF1E/MailFS?OpenFrameset&or1flg=32&hashId=BD973A4E8C0FCDED54C69CB23940B5FC
requestUrl = nrpc:/__852568BD0051EF1E/composite.xml?file=mail%5Cbbalfe.nsf&name=NotesMailApps.xml&launchUrl=notes%3A%2F%2F%2F852568BD0051EF1E%2FMailFS%3FOpenFrameset%26or1flg%3D32%26hashId%3DBD973A4E8C0FCDED54C69CB23940B5FC
com.ibm.portal.app.input.name = NotesMailApps.xml
com.ibm.portal.app.input.file = mail\bbalfe.nsf
applicationGUID = BD973A4E8C0FCDED54C69CB23940B5FC_1F_3KE527R200VQ502MGJOIMC2096
osgi> thsh sc BD973A4E8C0FCDED54C69CB23940B5FC_6_3KE527R200VQ502MGJOIMC20H7
Component data for component id = BD973A4E8C0FCDED54C69CB23940B5FC_5_3KE527R208CCC02M6C5LO53091
----------------------------------------------------
portletname = Notes 8.0 Mail Nav
portletwindowid = BD973A4E8C0FCDED54C69CB23940B5FC_5_3KE527R208CCC02M6C5LO53091
com.ibm.portal.app.input.launchUrl = notes:///852568BD0051EF1E/MailFS?OpenFrameset&or1flg=32&hashId=BD973A4E8C0FCDED54C69CB23940B5FC
com.ibm.rcp.id = TMP_10006
com.ibm.rcp.ratio = 0.5
com.ibm.rcp.viewId = com.ibm.rcp.csiviews.viewpart.CSINavViewPart
com.ibm.rcp.fastView = false
applicationGUID = BD973A4E8C0FCDED54C69CB23940B5FC_1F_3KE527R200VQ502MGJOIMC2096
com.ibm.rcp.closeable = false
com.ibm.rcp.csiviews.viewpart.dburl = notes:///852568BD0051EF1E/MailFS?OpenFrameset
requestUrl = nrpc:/__852568BD0051EF1E/composite.xml?file=mail%5Cbbalfe.nsf&name=NotesMailApps.xml&launchUrl=notes%3A%2F%2F%2F852568BD0051EF1E%2FMailFS%3FOpenFrameset%26or1flg%3D32%26hashId%3DBD973A4E8C0FCDED54C69CB23940B5FC
com.ibm.rcp.moveable = true
com.ibm.rcp.title = Notes Mail Navigator
com.ibm.rcp.extensionType = simple view
com.ibm.rcp.showTitle = true
com.ibm.rcp.showquota = true
com.ibm.portal.app.input.file = mail\bbalfe.nsf
com.ibm.rcp.objectId = BD973A4E8C0FCDED54C69CB23940B5FC_5_3KE527R208CCC02M6C5LO53091
com.ibm.portal.app.input.name = NotesMailApps.xml
com.ibm.rcp.standalone = true
com.ibm.rcp.visible = true
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
add comment
| 0 trackbacks
| permalink
|
|
Tuesday, May 6, 2008, 03:12 PM - fun
Posted by Bob Balfe
Ok, if you have not seen the movie go see it. It was great! It had the usual non-believable super hero stuff but your kids and the kid in you will love the movie. And yes, there is a sneak peak at what's to come after the credits are complete. However, the movie was so long I had to go to the bathroom right after. I went to the bathroom when the credits started and got back in time to see the clip - btw, the credits are also amazingly long.Posted by Bob Balfe

I don't know about anyone else but I wish I was as smart as Stack and I also wish I had that lab of his.
|
|
Tuesday, April 29, 2008, 10:37 AM - fun
Posted by Bob Balfe
I purchased tickets for Jeff's show back in February for Valentines day - we finally saw him Sunday night. The concert was the Spark of Insanity tour and was absolutely hilarious. You have to have a pretty opened mind and not be sensitive (of course). If you get a chance to see his show its well worth it. You can see his tour schedule here.Posted by Bob Balfe
You can get a sneak preview here:
|
|
Friday, April 25, 2008, 12:53 PM - lotus
Posted by Bob Balfe
More and more Notes developers are diving into the Eclipse site of the equation. One of the books I used as a good primer was the SWT/JFace In Action book from Manning publishing. The book is a great resource for learning about SWT programming and architecture. The one I had was for Eclipse 3.0 and a lot of it is still relevant but much has also been added in the last few releases.Posted by Bob Balfe

|
|
Friday, April 18, 2008, 09:34 AM - fun
Posted by Bob Balfe
I like to do this every so often. Go to your favorite blogs and click a few ads!Posted by Bob Balfe
Of course, mine are on the left side down a bit.
|
|
Lotus Notes has a very cool UI where you can contribute launcher items to the Open menu. You can not only contribute bookmarks and databases but you can create a custom handler to have just about anything launch from the Open menu.
You can check out the Info Center help here where it shows you how to add a contribution to the menu. The one area the help does not go into is the handler implementation (TestURILauncherItemHandler()). The great thing is the object passed in just needs to extend org.eclipse.core.commands.AbstractHandler and override the execute event. So really, you can pretty much do whatever you want in that method.
From the help in the info center here are the out of the box handlers that get installed with the platform:
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
You can check out the Info Center help here where it shows you how to add a contribution to the menu. The one area the help does not go into is the handler implementation (TestURILauncherItemHandler()). The great thing is the object passed in just needs to extend org.eclipse.core.commands.AbstractHandler and override the execute event. So really, you can pretty much do whatever you want in that method.
From the help in the info center here are the out of the box handlers that get installed with the platform:
* nativeProgramLaunchItem -- Identifies the item as being a NativeProgramLauncherContributionItem class, which is a contribution item that starts a native program.
* perspectiveLaunchItem -- Identifies the item as being a PerspectiveLauncherContributionItem class, which is a contribution item that starts a standard client application by specifying an Eclipse perspective.
* urlLaunchItem -- Identifies the item as being a UrlLauncherContributionItem class, which is a contribution item that opens a URL.
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
|
|
Tuesday, April 15, 2008, 02:53 PM - info
Posted by Bob Balfe
I will admit, I had no idea this entry was at the perfect length for the Planet Lotus tooltips.Posted by Bob Balfe

|
|
I have been asked a few times how we create perspectives dynamically in Lotus Expeditor and Notes in the composite application space. We actually create many extensions dynamically using the Eclipse RegistryFactory API. The getRegistry() method returns an instance of the extension registry factory (IExtensionRegistry) where you can call addContribution(). Once this method is called the extension becomes available for use - usually reflected in a toolbar, menu, etc.
What would this kind of stuff be good for?
Say you have data stored in some other format - like an NSF, database, a external system - and you want that to be represented as some existing extension. You can now dynamically create those extensions from those other sources. This is exactly what we do for perspectives and other extensions in composite applications.
Another great sample would be to clone an existing perspective but maybe add a different context to it. For example, you could have your IPerspectiveFactory class create the layout for your perspective and base the contents on the Page data stored in the composite application model. This would allow your perspective to use this data space to initialize views and the data that is used in them. This means you could then contribute a special launch contribution item to the Open menu, dynamically create a new perspective off of the current workbench selection and initialize that perspective with the selection data. This would be yery similar to the Web Browser and Symphony documents. Your perspective may be a "user session" for a banking application. Each perspective may be a specific customer profile - so when you open up multiple instances of this perspective they would all point to different customers.
The cool thing about using page and component data is it can be conditionally used. You can use core Eclipse API's to get the data and if nothing is returned then its not available - if the data is returned you can use it! Check out the Wiki page I wrote about this model.
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
To see code samples Read More...
What would this kind of stuff be good for?
Say you have data stored in some other format - like an NSF, database, a external system - and you want that to be represented as some existing extension. You can now dynamically create those extensions from those other sources. This is exactly what we do for perspectives and other extensions in composite applications.
Another great sample would be to clone an existing perspective but maybe add a different context to it. For example, you could have your IPerspectiveFactory class create the layout for your perspective and base the contents on the Page data stored in the composite application model. This would allow your perspective to use this data space to initialize views and the data that is used in them. This means you could then contribute a special launch contribution item to the Open menu, dynamically create a new perspective off of the current workbench selection and initialize that perspective with the selection data. This would be yery similar to the Web Browser and Symphony documents. Your perspective may be a "user session" for a banking application. Each perspective may be a specific customer profile - so when you open up multiple instances of this perspective they would all point to different customers.
The cool thing about using page and component data is it can be conditionally used. You can use core Eclipse API's to get the data and if nothing is returned then its not available - if the data is returned you can use it! Check out the Wiki page I wrote about this model.
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
To see code samples Read More...
|
|
Tuesday, April 15, 2008, 12:53 PM - family
Posted by Bob Balfe
Ok, my kids loved lincoln logs and Legos - and actually still use them a lot - mostly legos. Now, my kids (even my five year old), only want to create maps in Halo 3. They are creating some amazing maps and doing all sorts of things with the map building tool. Floating crates, weapons, etc. I watch them use the Halo tool and I am amazed by the user interface Halo has created for this. I hate to say it but Microsoft actually did something really great. I love the XBox and I love their games - and to have a 5 year old pick up such a complicated tool is pretty impressive.Posted by Bob Balfe
This reminds me of other games like Zoo Tycoon - another very popular game among my kids. They learn so many things by these games it amazes me. My youngest tells me what kinds of shelters and food certain animals like. Very cool.
Tags: Halo : maps : legos
|
|
Many may not be aware that Lotus Notes 8 has most of the Lotus Expeditor platform underneath it. This means you have a wide range of new architectural and programmability options in the client. There is a page in the Expeditor Info Center that lists the range of samples (with code) that can be referenced. The link I reference is the one for installing the sample into base Eclipse.
Lotus Expeditor platform can be considered a client side middle-ware platform because it houses a transaction container, a web container, and a portlet container. This means you can distribute JSP's and portlets that run off-line in the client. You can do other things like sync data for store and forward architectures with the synchronization services.
Tags: Lotus Expeditor : Lotus Notes
Lotus Expeditor platform can be considered a client side middle-ware platform because it houses a transaction container, a web container, and a portlet container. This means you can distribute JSP's and portlets that run off-line in the client. You can do other things like sync data for store and forward architectures with the synchronization services.
Tags: Lotus Expeditor : Lotus Notes
|
|
Just listened to the latest Taking Notes podcast - I really love this series.
One thing that caught my attention was the comment about product documentation and samples. We are in the process of revamping the Notes and Lotus Expeditor documentation around composite applications so if you have any requests or feedback I would love to take that back to our documentation team. Anything, really. From spelling mistakes, typos, format, you name it.
I really like Mikkel's comment about the "business problem" and how to solve those. It reminds me of a book I reviewed a while back "The MFC Answer Book"
Thanks,
Bob
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
One thing that caught my attention was the comment about product documentation and samples. We are in the process of revamping the Notes and Lotus Expeditor documentation around composite applications so if you have any requests or feedback I would love to take that back to our documentation team. Anything, really. From spelling mistakes, typos, format, you name it.
I really like Mikkel's comment about the "business problem" and how to solve those. It reminds me of a book I reviewed a while back "The MFC Answer Book"
Just the format alone of this book is priceless. The question-answer format makes it very easy to find things and makes a great quick reference with good examples.
Thanks,
Bob
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
|
|
Ok, I am not sure if this came from Eclipse 3.4 or this is something Rational added but I absolutely love it!
Now, I don't have to change all of the manifests to provide patches or export my plugins to a configured runtime. This is going to save so much time and get rid of a big headache.
What the feature does is automatically replace ".qualifier" with what you specify in the field to the right. I matched it to my Notes 8.5 install for the property broker plugin. Very cool.

Tags: Lotus Expeditor : Lotus Notes : Composite Applications
Now, I don't have to change all of the manifests to provide patches or export my plugins to a configured runtime. This is going to save so much time and get rid of a big headache.
What the feature does is automatically replace ".qualifier" with what you specify in the field to the right. I matched it to my Notes 8.5 install for the property broker plugin. Very cool.

Tags: Lotus Expeditor : Lotus Notes : Composite Applications
|
|
I will be speaking next week at Impact 2008. If any business partners or customers want to meet up for a brew let me know. Here is my session information:
Title: Building rich client support with Lotus Expeditor Version 6.1
Session Number: 1738A
Session Time: Thu, 10/Apr, 03:15 PM - 04:30 PM
Location: MGM Grand - Room 320
Hope to see you there!
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
Title: Building rich client support with Lotus Expeditor Version 6.1
Session Number: 1738A
Session Time: Thu, 10/Apr, 03:15 PM - 04:30 PM
Location: MGM Grand - Room 320
Hope to see you there!
Tags: Lotus Expeditor : Lotus Notes : Composite Applications
|

Calendar




