MOSS & .Net World

MOSS 2007 content query web part & RSS problem

You can get RSS feed from a content query web part, just be selecting the Enable feed check box.
It looks very easy to use, but the problem here is that RSS in the content query web part is not working fine.
If you have more than one RSS in the site, you will find them getting wrong data, or you may find them all get the same data. The problem is that content query web part inherits from a data form web part, and unfortunately the data form web part caches the content in a memory cache.
The conflict occured because the content query web part use the same key for all the cached instances, so you will find all the Rss feeds shows the same data. There are a lot of work around to solve this problem but unfortunately they don't work according the following link in the MSDN:
 
------------------------------------------
I customized MOSS RSS by developing a page that takes the same query and generates the RSS
 

public partial class FeedPage : System.Web.UI.Page

{

/// <summary>

/// write the RSS content to the page output stream.

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

protected void Page_Load(object sender, EventArgs e)

{

// get the RSS data

Microsoft.SharePoint.SPSite SiteCollection = SPContext.Current.Site;

DataTable tbl = null;

SPSecurity.RunWithElevatedPrivileges(delegate()

{

string WebPath, PageID, WebPartID;

WebPath = Request.QueryString[WebPartResources.web];

PageID = Request.QueryString[WebPartResources.page];

WebPartID = Request.QueryString[WebPartResources.wp];

// intialize the site with a token

SPWeb web = SiteCollection.OpenWeb(WebPath);

SPFile page = web.GetFile(new Guid(PageID));

ContentByQueryWebPart part = (ContentByQueryWebPart)page.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.User).WebParts[new Guid(WebPartID)];

CbqQueryVersionInfo query = part.BuildCbqQueryVersionInfo();

SPSiteDataQuery sQuery = new SPSiteDataQuery();

sQuery.Lists = query.VersionCrossListQueryInfo.Lists;

sQuery.Query = query.VersionCrossListQueryInfo.Query;

sQuery.RowLimit = query.VersionCrossListQueryInfo.RowLimit;

sQuery.ViewFields = query.VersionCrossListQueryInfo.ViewFields;

 

sQuery.Webs = query.VersionCrossListQueryInfo.Webs;

web = SiteCollection.OpenWeb(part.WebUrl);

tbl = web.GetSiteData(sQuery);

});

XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.UTF8);

WriteRSSPrologue(writer);

bool BodyExists=false;

//DateTime ArticleDate="";

for (int counter=0; counter<tbl.Columns.Count;counter++)

{

if (tbl.Columns[counter].ColumnName.ToLower() == WebPartResources.PublishingPageContent.ToLower())

BodyExists= true;

}

for (int itemsCounter = 0; itemsCounter < tbl.Rows.Count; itemsCounter++)

{

if (!BodyExists)

AddRSSItem(writer, tbl.Rows[itemsCounter][WebPartResources.ItemTitle].ToString(),

tbl.Rows[itemsCounter][WebPartResources.ItemLink].ToString().Split('#')[1],

string.Empty, tbl.Rows[itemsCounter][WebPartResources.ArtilceDate].ToString());

else

AddRSSItem(writer, tbl.Rows[itemsCounter][WebPartResources.ItemTitle].ToString(),

tbl.Rows[itemsCounter][WebPartResources.ItemLink].ToString().Split('#')[1],

tbl.Rows[itemsCounter][WebPartResources.PublishingPageContent].ToString(),

tbl.Rows[itemsCounter][WebPartResources.ArticleStartDate].ToString());

}

WriteRSSClosing(writer);

writer.Flush();

writer.Close();

Response.ContentEncoding = System.Text.Encoding.UTF8;

Response.ContentType = WebPartResources.textxml;

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.End();

}

/// <summary>

/// Write RSS

/// </summary>

/// <param name="writer"></param>

/// <returns></returns>

public XmlTextWriter WriteRSSPrologue(XmlTextWriter writer)

{

writer.WriteStartDocument();

writer.WriteStartElement(WebPartResources.rss);

writer.WriteAttributeString(WebPartResources.version,WebPartResources.two);

writer.WriteStartElement(WebPartResources.channel);

writer.WriteElementString(WebPartResources.Title.ToLower(),WebPartResources.RSSTitle);

writer.WriteElementString(WebPartResources.link, Request.Url.AbsoluteUri);

writer.WriteElementString(WebPartResources.RSSDescription.ToLower(), string.Empty);

writer.WriteElementString(WebPartResources.ttl.ToLower(), (60).ToString());

//writer.WriteElementString("copyright", "Copyright 2002-2003 Dan Bright");

// writer.WriteElementString("generator", "RSSviaXmlTextWriter v1.0");

return writer;

}

/// <summary>

/// Add RSS item

/// </summary>

/// <param name="writer"></param>

/// <param name="sItemTitle"></param>

/// <param name="sItemLink"></param>

/// <param name="sItemDescription"></param>

/// <returns></returns>

public XmlTextWriter AddRSSItem(XmlTextWriter writer,

string sItemTitle, string sItemLink,

string sItemDescription, string dItemArticleDate)

{

writer.WriteStartElement(WebPartResources.item);

writer.WriteElementString(WebPartResources.Title.ToLower(), sItemTitle);

writer.WriteElementString(WebPartResources.link,ConfigurationManager.AppSettings[WebPartResources.AppPath] + WebPartResources.slash + sItemLink);

writer.WriteElementString(WebPartResources.RSSDescription.ToLower(), sItemDescription);

//if (Request.QueryString[WebPartResources.web].ToLower().Contains(WebPartResources.arabicURL))

// writer.WriteElementString(WebPartResources.pubDate, dItemArticleDate.ToString(WebPartResources.PrintDateFormatArabic));

//else

writer.WriteElementString(WebPartResources.pubDate, dItemArticleDate);

writer.WriteEndElement();

return writer;

}

 

/// <summary>

/// Write RSS closing

/// </summary>

/// <param name="writer"></param>

/// <returns></returns>

public XmlTextWriter WriteRSSClosing(XmlTextWriter writer)

{

writer.WriteEndElement();

writer.WriteEndElement();

writer.WriteEndDocument();

return writer;

}

}

 
 
 
Ahmed Abdel Hameed (MCSD .Net)
Published Friday, April 18, 2008 9:58 PM by Ahmed.AHameed

Comments

No Comments
Anonymous comments are disabled

Post Calendar

<April 2008>
SuMoTuWeThFrSa
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

Syndication






© All rights are reserved