在执行spsitedataquery之后,获取子网站的项目

时间:2012-03-08 22:22:54

标签: c# sharepoint sharepoint-2010

我有以下代码:

SPSiteDataQuery query = new SPSiteDataQuery();

                //Get List query string

                query.Lists = "<Lists BaseType='1'></Lists>";


                query.ViewFields = "<FieldRef Name='Title' Nullable='TRUE' />";
                query.ViewFields += "<FieldRef Name='ContentTypeId' Nullable='TRUE' />";
                query.ViewFields += "<FieldRef Name='ContentType' Nullable='TRUE' />";
                query.ViewFields += "<FieldRef Name='ArticleStartDate' Nullable='TRUE' />";
                query.ViewFields += "<FieldRef Name='Synopsis' Nullable='TRUE' />";
                query.ViewFields += "<FieldRef Name='PublishingRollupImage' Nullable='TRUE' />";
                query.ViewFields += "<FieldRef Name='Location' Nullable='TRUE' />";
                query.ViewFields += "<FieldRef Name='LOBGroup' Nullable='TRUE' />";
                query.Query = "<Where>" +
                                  "<Contains>" +
                                    "<FieldRef Name='ContentType'/>" +
                                    "<Value Type='Text'>DCP_Article</Value>" +
                                  "</Contains>" +
                                "</Where>";



                query.Query += "<OrderBy>" +
                                    "<FieldRef Name='ArticleStartDate' Descending='TRUE' />" +
                                "</OrderBy>";


                query.RowLimit = Convert.ToUInt32(loadsize);
                query.Webs = "<Webs Scope='Recursive' />";


                //Get Site Data from web
                DataTable dt = web.GetSiteData(query);

在我的搜索结果中,我想获得该项目来自的子网站,我知道如果我使用query.ViewFields += "<FieldRef Name='FileRef' Nullable='TRUE' />";我可以获得该项目的完整网址,但无论如何我可以获得该网站它来自哪里?这样的事情: query.ViewFields += "<FieldRef Name='SiteName' Nullable='TRUE' />";

3 个答案:

答案 0 :(得分:3)

尝试:

query.ViewFields += "<ProjectProperty Name=\"Title\" />";

有关详细信息,请参阅SPSiteDataQuery.ViewFields

  

可以使用ProjectProperty标记包含网站属性。 ProjectProperty标记的Name属性标识特定属性,可能包含以下值之一:

     
      
  • 标题 - 包含该项目的网站的标题。

  •   
  • WebId - 包含该项目的网站的GUID。

  •   

答案 1 :(得分:1)

您可以依赖EncodedAbsUrl和FileRef来检索网络。第一个将包含项目的整个路径,第二个将包含部分部分(如果我记得很清楚)。因此,执行子字符串应该为您提供托管项目的Web路径。

对不起,我没有在我面前使用我的虚拟机,但如果您使用SharePoint Explorer / Manager等工具查看,您将看到所有隐藏的列表项字段,您将能够获取一个最接近你的解决方案(但我最依赖EncodedAbsUrl和FileRef是最可靠的)

答案 2 :(得分:0)

另一种选择是使用WebId列,它将包含在结果集中。 这是一个guid,您可以使用它来打开网络,结果来自:

Guid webGuid = new Guid(row["WebId"].ToString());
using(SPWeb web = SPContext.Current.Site.AllWebs[webGuid])
{
     //Do some thing with the SPWeb
}