2012-03-08 11 views
1

我有以下代碼後的子網站:獲得一個項目來自執行spsitedataquery

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' />";

回答

2

嘗試:

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

欲瞭解更多信息,請參閱SPSiteDataQuery.ViewFields

站點屬性可以通過使用ProjectProperty標籤被包括在內。在ProjectProperty標記的名稱屬性標識的特定屬性,並可能包含下列值之一:

  • 標題 - 包含該項目的網站的標題。

  • WebId - 包含該項目的網站的GUID。

1

你可以依靠這兩個EncodedAbsUrl和FileRef檢索網頁。第一個將包含項目的整個路徑,第二個僅包含部分部分(如果我沒記錯的話)。因此,做一個子字符串應該爲您提供託管項目的網絡路徑。

對不起,我沒有我的虛擬機在我面前,但如果你用SharePoint Explorer/Manager這樣的工具看,你會看到所有隱藏的列表項字段,你就可以抓住一個是最接近你的解決方案(但我依靠EncodedAbsUrl和FileRef的安全最好是可靠的)

0

另一個選擇是使用WebId列將包括在你的結果集。 這是一個guid,你可以用它來打開網頁結果來自:

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