Showing posts with label DNN. Show all posts
Showing posts with label DNN. Show all posts

Thursday, April 30, 2009

DNN News v4.0.01 Custom XSL - pubDate Sorting

by Phil 'iwonder' Guerra (Happy Rock, MO) -

First, in order to provide aggregation features to the module, all feeds used in the News module must be converted to an RSSv2.0 type of feed, which I'll call a DNN_RSSv2.0 format. The intention and goal was to allow different formats of feed sources to be aggregated, and rendering such a diverse collection called for some type of standard format, and RSSv2.0 was chosen.

So, how do you render a feed sorted by pubDate? Well, here' s where some of that sanitation and validation of source news feeds pays off. The News module takes an incoming news feed source, validates it, and transforms it into a new RSS feed, and one of the elements used in this process is a special custom namespace element called, pubDateParsed. This element is created during the transformation process, and turns out to be handy for providing a simple way to sort the item elements by it. You can see the feed that the module creates by looking at the database table for the News module, and looking at the data in the Cache attribute. I suggest copying an example, and pasting it into a text file for review, but here's what an example item element contains:

<item>
<description>Polish prosecutors are raising the death toll from a fire that ripped through a homeless shelter in mid-April to 23 after DNA ...<p>
<a href="http://feedads.g.doubleclick.net/~at/RWMBZpjtAANqdf4thEFQrwJI_pI/0/da"><img src="http://feedads.g.doubleclick.net/~at/RWMBZpjtAANqdf4thEFQrwJI_pI/0/di" border="0" ismap="true">
</img>
</a>
<br/>
<a href="http://feedads.g.doubleclick.net/~at/RWMBZpjtAANqdf4thEFQrwJI_pI/1/da"><img src="http://feedads.g.doubleclick.net/~at/RWMBZpjtAANqdf4thEFQrwJI_pI/1/di" border="0" ismap="true">
</img>
</a>
</p>
<img src="http://feeds2.feedburner.com/~r/usatoday-NewsTopStories/~4/O6aWvd6_g_Q" height="1" width="1"/>
</description>
<link>http://rssfeeds.usatoday.com/~r/usatoday-NewsTopStories/~3/O6aWvd6_g_Q/2009-04-30-poland_N.htm</link>
<pubDate>Thu, 30 Apr 2009 15:16:07 GMT</pubDate>
<pubDateParsed xmlns="http://www.dotnetnuke.com/modules/news">2009-04-30T15:16:07</pubDateParsed&gt;
<title>DNA results in; Poland raises fire death toll to 23</title>
</item>

The pubDateParsed element uses the pubDate information to convert it to a sortable format date, although there is no real support for its use yet, we can create a custom XSL to 'activate' it. All we have to do is add the sort statements to the default.xsl and save it as a custom xsl.

Here's how it works. We use the pubDateParsed element and define a custom namespace to declare it. Then, add the sort function call, feed it the sort key, and sort order. Resulting in the XSL that follows...

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dnn="http://www.dotnetnuke.com/modules/news">
<!-- DNNv4.0.1 pubDateSortDSC -->
<!-- by Phil 'iwonder' Guerra -->
<!-- 2008-11-23 -->
<!-- Use with attribution please -->
<xsl:output method="html" indent="yes"/>
<xsl:param name="ItemsToShow"/>
<xsl:param name="ShowItemDetails"/>
<xsl:param name="ShowItemDate"/>
<xsl:param name="Locale"/>
<xsl:template match="rss">
<xsl:for-each select="channel/item[position()&lt;=$ItemsToShow or $ItemsToShow&lt;1]">
<xsl:sort
select="dnn:pubDateParsed"
data-type="text"
order="descending"/>
<p class="DNN_News_ItemLink">
<a href="{link}" target="_main"> <xsl:value-of select="title"/>
</a>
</p>
<xsl:if test="$ShowItemDate='true'">
<p class="DNN_News_ItemDate">
<xsl:value-of select="pubDate"/>
</p>
</xsl:if>
<xsl:if test="$ShowItemDetails='true'">
<p class="DNN_News_ItemDetails">
<xsl:value-of select="description" disable-output-escaping="yes"/>
</p>
</xsl:if>
</xsl:for-each>
</xsl:template></xsl:stylesheet>

I just create 2 custom XSL files, one to sort ascending and the other sorts descending. Then, I choose which one I want to use in the module instance setup. It's pretty simple once you understand what the module is emitting and giving you.

Hopefully, the next version will add support in the setup to allow passing a sort order, and the option to sort. Until then, you'll need to create two versions, one that sorts ascending and another to sort descending. Of course, you could add support to the News module yourself, which I did, but I would not advise it, as custom work done once to a DNN module needs to be done over and over as new versions are released. Sometimes the effort is worth it, others may not be. This is one of those times where it's not really a good idea, in my opinion, I am comfortable with having the two versions handy, all I have to do to change the sort order, is just specify the desired custom XSL in the module setup.

Wednesday, March 25, 2009

News v4.x Alternating color background...

by Phil 'iwonder' Guerra - (Mission, KS) - Sometimes you would like to change the look of your news feed presentation. One such possibility is alternating background color of a news feed item. It's fairly easy to do, but with the new version of the News module v4.x you must remember to fashion your new custom xsl to respect the parameters used in the module setup.

The simplest way to develop a custom xsl for the News v4.x module is to just copy the existing default.xsl which resides in the ~/DesktopModules/News/transformations folder. Use your favorite text editor and make whatever changes you need. Be careful to keep the parameters that are used in the default.xsl that match what is setup in the News v4.x module.

Now, after modifying your custom xsl, save the new file to your portals/n folder and change the module setting to use the new xsl. Always test your new xsl, either using a suitable XML/XSL editor, or in a test instance of your DNN site. Also, I find it works best to place your test News module in a special page of it's own, to avoid causing issues. If your test module fails to display with your new xsl, it could cause your site to 'freeze' or lock up, so you do not want to test a new moduel setup on your 'home' page.

Here's an example xsl that alternates the background of the items in a feed. Try it out and make it your own.

<?xml version="1.0" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<!-- alternating background color -->
<!-- for use with DNN News module v4.x -->
<!-- by Phil 'iwonder' Guerra' -->
<!-- 2008-09-21 -->
<xsl:output method="html" indent="yes" />
<xsl:param name="ItemsToShow" /> <xsl:param name="ShowItemDetails" /> <xsl:param name="ShowItemDate" />
<xsl:param name="Locale" />
<xsl:template match="rss">
<xsl:for-each select="channel/item[position()<=$ItemsToShow or $ItemsToShow<1]">
<div>
<xsl:if test="position() mod 2 != 0"> <xsl:attribute name="style">background-color: #F5F5F5</xsl:attribute>
</xsl:if>
<p class="DNN_News_ItemLink"> <a href="{link}" target="_blank">
<xsl:value-of select="title" /> </a>
</p>
<xsl:if test="$ShowItemDate='true'">
<p class="DNN_News_ItemDate">
<xsl:value-of select="pubDate" />
</p>
</xsl:if>
<xsl:if test="$ShowItemDetails='true'">
<p class="DNN_News_ItemDetails">
<xsl:value-of select="description" disable-output-escaping="yes" />
</p>
</xsl:if>
</div>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Sunday, January 4, 2009

Updating the RSSHandler and vw_Search

by Phil 'iwonder' Guerra

--- (Mission, KS) - I've wanted a better DNN internally generated news feed for quite some time. I had so much work in my queue that updating the DNN core code was one project held back. For the most part, I left the project up to the Core Team, afterall it is core code.

Well, I'm not satisified with the progress, and the DNN CT certainly has their priorities, and I'm not going to criticize the lack of attention, but I'm moving forward with taking on the project. It's not a very easy set of tasks to undertake, though. There's a lot involved, due to the coupling of the RSS feed generation to the Search mechanism, but I was surprised at how relatively fast I could deploy an improved news feed with a few minor changes to the RSSHandler, and the vw_Search SQL view. The results yield a much more rich RSSv2.0 feed, giving your public feed branding and support for many of the standard RSSv2.0 tags, not all mind you, but enough to allow you to syndicate with the internal methods, rather than a custom approach.

There's a lot more to be done, as I've only been targeting one module to incorporate the changes, the Announcements module. The enhanced approach requires some tweaking of a module's support of RSS, which is seriously deficient in most modules. I don't understand why most module's even have the ability to syndicate without providing support for it. Oh, well, that's another story.

I'll post more about the effort and provide the code in another post. Right now, it's time to celebrate my son's 21st birthday.

Cheers

Tuesday, December 30, 2008

DNN and Podcasting

by Phil 'iwonder' Guerra

- (Mission, KS) - Here's a bit of something I ran across while looking into a question about DNN and whether or not it supports podcasts. First, out of the box, DNN will support podcast with only the XML/XSL module, and you'll need a custom xsl to do it.

Secondly, the presentation and results vary by browser. I created a custom xsl that enables presentation of the information in a newsfeed that point (links) to the actual podcast, which is usually an mp3 or video file of some sort. It's pretty straightforward transformation of the enclosure element, which contains a URL, type, and size. All 3 attributes are important as there are some issues with downloading that content for some browsers, at least that's the case when IE7 is used. Firefox did not have a problem, but I ran into issues when I used IE7. Why?

Well, it took some googling, but here's a link to the secret, IE7 has a 'limit' on the size it will allow to be downloaded. No file larger than 15MB on servers that do not support HTTP range requests. Since, I'm using a test environment built on Windows XP, and using IIS v5.0, I'm not sure if that's the real problem or not. I'll toss the custom XSL I created to test and show how I'm doing this for a particular site, DNN Creative DotNetNuke Podcasts and give me feedback. (I don't have a public DNN website, it's a matter of controlling my expenses, which is why I blog freely.)

Anyway, using FireFox, tells me that DNN will support presentation of news feeds that include podcasts, and that's the good news.

Here's an example XSL to use with the DNN XML/XSL module to present the DNNCreative Podcast newsfeed. Just a couple notes:
1) I'm not advocating adding the ability to include enclosures wholesale on a website. There are a number of security issues with doing so. I provide this example as quick 'how-to' not as a reccommended practice. Above all know your newssource and test on a non-production site to aovid issues.

2) This example was specifically built to transform the DNN Creative DotNetNuke Podcast feed. As such, you would have to modify it for any other use. Also, feeds change formats from time to time, so it may not always work. However, if you are seriously considering doing this type of thing, you'll need to be more than a novice with XML and XSL to get the most of this type of transformation.

3) To use this code, cut and paste it into a text file using a simple text editor. Save it as PodcastEnabled.xsl, and then upload it to you site during the setup conversation of a DNN XML/XSL module. I know the formatting of this code is less than desireable, but that's a function of my blogger app, so sorry. If you have a lot of problems with the xsl example, leave a comment and I'll go over it.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" >
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<!-- phil 'iwonder' guerra - PodcastEnabled.xsl - custom xsl for DnnCreative Podcasts -->
<xsl:template match="/">
<div>
<xsl:apply-templates select="rss/channel"/>
</div>
</xsl:template>
<xsl:template match="rss/channel">
<xsl:apply-templates select="item"/>
</xsl:template>
<xsl:template match="item">

<xsl:variable name="item_link" select="link"/>
<xsl:variable name="podlink" select="enclosure/@url"/>
<xsl:variable name="podmedia" select="enclosure/@type"/>
<xsl:variable name="altmedia" select="feedburner:origLink"/>
<xsl:variable name="item_title" select="description"/>
<div class="rssItemDescription">
<xsl:value-of select="description" disable-output-escaping="yes"/>
</div>
<div class="rssItemSub">
<xsl:if test="enclosure/@url">
<a href="{$podlink}">Listen Now</a> (<xsl:value-of select="$podmedia"/> - Size <xsl:value-of select="enclosure/@length"/>)<br></br>
</xsl:if>
<xsl:if test="not(enclosure/@url)">
<a href="{$altmedia}">See the Video</a>
</xsl:if>

(<xsl:value-of select="pubDate"/>) <hr/>
</div>
</xsl:template>
</xsl:stylesheet>

Saturday, October 4, 2008

SourceForge DNN News Zips

by Phil 'iwonder' Guerra

- (Mission, KS) - In case you need a previous version of the DNN News module, you can still find them at SourceForge. These previous versions are no longer available on the DNNN Downloads page. Thanks to Jan Olsmar for the info. Of course, you could opt to use the XML/XSL module instead, which basically performs the same type of functions as the previous v03.00.xx module.

Some folks are reluctant to move to the new DNN News module due to the 'breaking' issues reported in the forums. My advice for folks is to install a version of the new News module in a test environment ONLY. Then, evaluate the issues BEFORE moving it to Production areas.

If you are using a lot of non-RSSv2.0 newssources with custom XSLs, these will not work with the new module, and you'll need to move the setup information into an XML/XSL module. There is NO backward compatibilty provided with the new module.

All of your newssources will be converted to DNN's custom RSSv2.0 format, which may not include all of the content you may have provided for with a custom XSL. Some newssources are failing due to using non-standard formatting in the pubDate, and author elements. Validation is strictly enforced with DNN v04.00.00 with an XSD. The issues prompted a 'fix' to the code, which will relax the validation requirements. The Beta version is close to release on this fix, however, there may be other issues that are not fixed in this newer release.

So, again, my recommendation:

Install a version of the new News module in a test environment ONLY. Then, evaluate the issues BEFORE moving it to Production areas.

Note: Currently DNN offers downloads on the Codeplex site. Thanks to
Sebastian Leupold for the updated information. As of 3/10/2009, the DNN Codeplex site has versions:


Default Release 04.00.01
Nov 3 2008, Stable

04.00.00
Aug 21 2008, Stable

03.01.01
Jun 21 2006, Stable

03.01.00
Jun 9 2005, Stable

Wednesday, October 1, 2008

Can't See the Tree for the Forest...

by Phil 'iwonder' Guerra

-- (Mission, KS) - A question popped up on the forums the other day asking a simple question, 'Why would the 4.0.0 upgrade not preserve XSLs?'. My answer was to offer that the module was completely redesigned and the new design took a path that changed how news feeds were handled. The module takes an incoming news source file, converts it to a 'standard' RSS v2.0 feed. This processing is needed only for the aggregation of dissimilar feeds, but is forced in the case of a module setup for just single feeds, which is what most folks have with existing modules using the previous version of the Newsfeeds (RSS) module.

You can combine different feed formats into a module for presentation, but they all must ultimately be in the same format. The trouble with this design is that the underlying conversion of feeds has issues that you would never see without digging into the code. Mostly, when that type of issue happens, the feed will just throw an exception saying the feed could not be downloaded, or you get errors in feed validation. I've been working on testing the beta correction to the issues with the new module, but what I found last night was that many of these types of errors could probably be attributed to feed conversion issues rather than due to the validation of the final feed formatting. I'll take about that more in another entry, though.

My main point with this entry is that many folks are seeing a lot of extra work because they lost all of the formatting in their feeds if they used a custom xsl for presentation. The new module only allows 3 basic xsl choices. One of them really doesn't work well, the Horizontal Ticker. Now, you can write a custom xsl for your feeds that are converted to the RSS v2.0 DNN standard, but it has to be written for the DNN RSS v2.0 format, which is very limited in what it will include from a feed. Again, this is due to the need to have content that is similar, with a small subset of the RSS v2.0 elements. Basically, what you get is similar to the RSS v0.91 content.

Now, on the way to work I had a thought. Why not just add a Module 'Mode' option? You could allow a module to be setup that only is used for 'Single Feed' Mode, and an option for 'Aggregate' mode. The 'Single Feed' mode would allow the user to specify the URL, and the XSL for use in presentation, without worrying about having to conform to one standard presentation format. If the mode is 'Single Feed' you don't have to use the logic that converts the incoming format to the DNN RSS v2.0 format. You would just use a custom xsl for the feed type you are using. Sounds simple enough, right?

Well, that's the theory. Now, in practice, more is required. The beauty of one standard presentation layer is that users don't have to think about the type of feed format their chosen feed is in, the module takes care of it all. However, I think that with a little more effort, a feed can be analyzed, and then present the results to the user, or give a dropdown of available xsl choices to use for the feed type. Admittedly, that's more work, but it is a slicker, backward compatible design.

Now, with a site that is already using different types of news formatted feeds, and custom xsl files, the upgrade would simply default to 'Single Feed' mode, and use the existing settings for use in the new module setup. Thus, you preserve the existing feed setup, and the loss of functionality by merely upgrading is gone.

That's my thinking this morning, anyway. Instead of not seeing the 'tree' for the 'forest', you can actually see the 'tree' and if you want to see the 'forest', you can do that too!

Let me know what you think?

Saturday, September 13, 2008

DNN News Module Too Strict?

by Phil 'iwonder' Guerra

One thing that is difficult to manage is the aggregation of feeds without standards. Unfortunately, the strict enforcement of RSS v2.0 implementation is more for the aggregation rather than just the display of a single feed. At this point, I believe the DNN News module is being too strict, as most newsfeed sources will never all comply with the specs for any version of the RSS or Atom specs. One of the more common errors is in the display of date of publication, which is not even a standard element between RSS v2.0, RSS v1.0 (RDF), and Atom feeds. Also, the date formatting is totally out of whack for for a lot of feeds, even when somethings gives GMT as its' base, you cannot rely on the develper actually giving you that correctly.

Other troublesome elements are those that are supposed to include and email in the content, but only provide a name. This is a common error emitted for a lot of popular newsfeeds, but one easily avoided with including the Dublin Core namespace in a feed, and using one of the 3 included metadata elements that do not require email:

- creator
- publisher
- contributor

There are other DC elements that are useful, as well. In fact many newsfeeds incorporate them as extensions to whatever version RSS they emit.

The other option is for the DNN module to include the Dublin Core namespace and use one of the above elements in place of the RSS v2.0 author element when an email format fails, and always provide the associated DC element with the email stripped when one is present. In this way the feed validates and can be used without penalty.

With the apps I write for desktop, I just take this information without trying to validate it or use it for anything other than displaying it as given. If I can't make sense of a date element in a feed, I find it easier to fashion a date for sorting, or caching, which I take from the time I first bring in the element. It's not going to make a whole lot of difference in the presentation anyway IMHO. The main usage for me of having a pubDate is for sorting, and accuracy in attribution of the news source.

It's mostly a matter of lack of attention by developers writing the feed generators. We see it in the DNN modules as well. The whole point of specs is to keep folks from having to worry about issue with code that is supposed to be compliant. Of course, that's not what we see in the real information world. If auto makers disregarded safety specifications as much as developers, we'ld have pulled the offenders off the market. Unfortunately, there is no similar enforcement in our IS world.

I think going into this update, most didn't realize the number of newsources that were not compliant. If something says it's RSSv2.0 then it should be expected to be a valid feed. There's the trouble, even larger news providers don't offer compliant RSS, so it's something the industry just avoids by coding around it. In the end, that's probably what will have to be done in the module, because aggregation should not cause aggrevation.

Monday, September 17, 2007

DNN v04.06.00 Feed Explorer (FeedBrowser)...

Just to clarify something, I've been referring to the module as the FeedBrowser,and mistakenly stated that the module does not show up in the list of modules in the Modules Definitions area. I was wrong. The module is listed as 'Feed Explorer v01.00.00, and in the dropdown box of modules to add, it is listed similarly. In my rush to get the word out, I used the name associated with the codebase that supports it. So, hopefully I've not confused too many folks, because it really is worth checking out.

You'll find the controls code in the Admin/Syndication folder, which is where the default news.opml file is located. The rendering scripts are located in the Website/Resources/FeedBrowser folder.

Also, wanted to mention a change I made to the core code this morning, not much really, just a change to the default News.opml. Over the weekend, I found some issues in the included News.Opml file that were causing some display issues. So, to avoid them, I replaced the News.Opml file with my own.

One thing to understand though is that the FeedBrowser is pretty strict about the format of the OPML used in rendering. If the module encounters any translation issue, it will display opml content similar to the Solution Explorer. The fallback opml is hard-coded into the scripting for the module. Also, you can place your News.opml file in your site that matches your portal/#. I placed mine in the portals/0 folder. DNN automatically refreshes the content when it detects a change, so the new changes will display, as long as they are in the proper format for the module to render.

Post a comment if you want a copy of my opml to use for a starting point.

DNN v04.06 Released

The new version of DNN was released yesterday. I downloaded it and got it setup on my test workstation, an XP Pro using SQL2005. Seems to be functioning fine.

The installation went fine, and I use the source version, because I want to inspect the code. I'm still not making any changes to the core codebase, but it helps to see the code, when you have some questions about how it works. Came in handy when looking at the FeedBrowser stuff.

Now, I've heard from others that you might want to setup an install locally of the 'Install' version of DNN to actually use for development purposes. That probably makes sense. I've not done that chore, and really haven't developed using the DNNv4.x platform, so I guess it's time to head down that road. I've got a lot of custom work in the queue, and need to get rolling on pushing out my new website.

Friday, September 14, 2007

FeedBrowser, the 'Hidden' news aggregattor...

DotNetNuke includes support for an RSS syndication aggregator, part of the Solution Explorer used to present available 3rd party modules. What’s not widely known is that the built-in support can be used to provide your DNN site with a functional news aggregator, called the FeedBrowser. Using either a custom OPML file, or simple OMPL outline code, you can present RSS feeds from multiple sources.

I've been working with the DotNetNuke project since about 2003, so it's no surprise that many of the projects' features are not easily found. The codebase includes so much support for a wide array of 'stake-holders', you need a whole lot of time to get a thorough understanding of it.

I admit that I've got very little time, but still have a big interest in keeping up with the features of DNN that interest me the most - RSS newsfeeds, XML, and XSL. I'm not sure why I became so focused on these topics, except maybe the need to take in a lot of info daily in as little time as possible, and the need to find ways to share data between disparate systems. I manage various systems using operatings systems from Windows, Linux, OpenVMS, and soon - HP-UX. Getting data from one system to the other is always a task in the queue. As such, I review a lot of technical journals, and information resources daily. Couple that need with being almost completely deaf, and it's no wonder why 'reading' and consuming information in digest forms is essential to me.

With the release of DNN v04.06 coming up shortly (maybe this weekend!), I thought I'd take a moment to thanks those folks on the DNN Core Team, and various Project Teams for their efforts. I, actually, am a former Core Team member, but dropped out due to time conflicts - really couldn't keep up with the day gig, and DNN CT tasks, so I had to drop out.

Also, wanted to give folks a heads up on a feature of DNN that you may not know about - the FeedBrowser. Part of the rollout of DNN includes a listing of various DNN validated, tested, and available Modules for sale. The listing is available using the ADMIN account for your DNN site, and is called the Solutions Explorer. There are a lot of cool modules listed. As I was looking around at it, I began to wonder how this information was being generated, and how I could tap into that kind of resource for my DNN site usage. So, I did some code review, and what I found, really surprised me.

I was the Project Lead for the DNN Newsfeeds (RSS) module, and part of our roadmap included bringing the module up-to-date to become a news agregattor. Well, short story, not much happened to update the module, though folks did work on it. In fact, some work was done, but only released in Beta module code available only to Beta Testers. So, many folks were left without a way to aggregate syndication sources.

That's exactly where the FeedBrowser module comes in. What 'FeedBrowser' module you ask? Well, you won't see it in the listing of available modules to install, because it's part of the codebase used to provide the Solution Explorer information. However, if you go to the ADMIN toolbar, you can find it listed in the dropdown box of modules to add.

I missed that piece for a bit, and only last week found it, and began playing with it. I'll give you more info on how to set it up, but basically, it is a simple news aggregator using OPML to give you a nice way to display syndication sources.

More to follow, so stay tuned. Drop me an email, and I'll send you my WizzoDawg.opml that is customized for use with the FeedBrowser, or if you prefer, just take a look at this post, where I've included some instructions and example code to get you going.

http://www.dotnetnuke.com/Community/Forums/tabid/795/forumid/48/threadid/168802/scope/posts/Default.aspx

Cheers