2012-01-17 104 views
2

尋找一種方法來查找在Sharepoint中註冊的文檔。我可以通過以下代碼在文檔庫或列表中找到文檔。在Sharepoint中查找文檔

SPSite oSPSite = new SPSite(_serverUrl); 
SPWeb oSPWeb = oSPSite.OpenWeb(); 
SPList oSPList; 
SPListItemCollection oSPListItemCollection; 
oSPList = oSPWeb.Lists["Listname"]; 
SPListItem listItem = null; 
listItem = oSPList.GetItemByUniqueId(new Guid(spGuid)); 

但我需要遍歷所有槽名單,如果我不知道在哪個列表中選擇文檔被註冊或是否有更有效的方式。

+0

你知道文檔的URL嗎? – Howard 2012-01-17 10:44:10

回答

0

如果您不知道文檔放置在哪個列表中,則需要遍歷SPWeb中可用的SPList對象。

+0

感謝您的回答。想想我找到了解決方案。如果我知道guid文件,我可以做.... fileItem = oSPWeb.GetFile(新的Guid(spGuid));其中spGuid是字符串引導 – klashagelqvist 2012-01-17 11:02:53

+0

是的,如果你有導引,這將是一個更好的解決方案:) – JoJa 2012-01-17 11:04:22

+0

你應該看看這個奇妙的功能http://www.sharepointanalysthq.com/2010/04/document-id-feature/http://office.microsoft.com/en-us/sharepoint-online-enterprise-help/enable-and-configure-unique-document-ids-HA101790471.aspx – 2012-01-17 14:42:00

1

如果唯一ID爲是你唯一的信息,那麼你必須創建一個SPSiteDataQuery檢索文檔的URL:與SPWeb.GetFile(string)

SPWeb web = // ... 

SPSiteDataQuery q = new SPSiteDataQuery();    
q.Query = String.Format(
      "<Where><Eq><FieldRef Name='UniqueId' /><Value Type='Lookup'>{0}</Value></Eq></Where>", 
      spGuid); 
q.Lists = "<Lists BaseType="1" />"; // restrict to document libraries 
q.RowLimit = 1; 
// q.Webs = "<Webs Scope='SiteCollection' />"; add to broaden the search on the whole site collection 
q.ViewFields = "<FieldRef Name='EncodedAbsUrl' />"; 

DataTable tbl = web.GetSiteData(q); 

if (tbl.Rows.Count == 0) throw new FileNotFoundException(...); 

return tbl.Rows[0]["EncodedAbsUrl"]; 

然後你就可以加載SPFile(文檔)。如果你只需要SPListItem,你可以通過SPFile.Item來訪問。