2011-11-18 105 views
4

我正在嘗試從唯一ID(GUID)獲取SPListItem對象。從查看幾個站點(包括http://sharepoint400.blogspot.com/2011/04/using-spsitedataquery-to-find-list.htmlhttp://www.chakkaradeep.com/post/Retrieving-an-Item-from-the-RootWeb-and-Subwebs-using-its-UniqueId.aspx),我想出了下面的代碼。SharePoint:通過唯一ID獲取SPListItem

const string QueryFormat = 
@"<Where> 
    <Eq> 
     <FieldRef Name='UniqueId' /> 
     <Value Type='Lookup'>{0}</Value> 
    </Eq> 
</Where>"; 

      SPSiteDataQuery query = new SPSiteDataQuery(); 
      query.Webs = "<Webs Scope='SiteCollection' />"; 
      query.Lists = "<Lists BaseType='0'/>"; 
      query.Query = string.Format(QueryFormat, itemUniqueId); 
      query.RowLimit = 1; 
      //query.ViewFields = "<FieldRef Name='WebID' /><FieldRef Name='ListID' /><FieldRef Name='ID' />"; 

      var results = SPContext.Current.Web.GetSiteData(query); 

但是,無論如何...我似乎總是返回零行。我不明白爲什麼,因爲我知道我使用的Guids是正確的。

任何想法?

+0

您是否考慮過向查詢添加遞歸類型?你能不能告訴我們你在GUID中傳遞的方式和位置? 你只關心列表項目而不是列表,網站或網站?你知道該項目的目標列表或網頁嗎? 您是否僅限於使用CAML?你知道'$ listItem = $ spList.GetItemByUniqueId($ targetGuid)'方法嗎? 正如你所看到的,在任何人都能提供有意義的答案之前,有很多問題需要答案。 – Panoone

回答

-2

請嘗試刪除QueryFormat字符串中的所有空格。使用類似這樣的代替:

"<Where><Eq><FieldRef Name=\"UniqueId\" /><Value Type=\"Lookup\">{0}</Value></Eq></Where>" 

SharePoint不喜歡這些空間。

我也建議使用庫來產生CAML查詢: http://camldotnet.codeplex.com/http://camlex.codeplex.com/

-1

存在無效類型唯一識別碼,應該GUID。 更新您的查詢:

<Where> 
    <Eq> 
     <FieldRef Name='UniqueId'/> 
     <Value Type='Guid'>{0}</Value> 
    </Eq> 
</Where> 
+0

這是不正確的。 UniqueId的字段Type和TypeAsString確實是Lookup。 – Panoone