2012-01-17 2 views
2

Ищете способ найти документ, зарегистрированный в Sharepoint. Я могу найти документ в библиотеке documet или в списке по следующему коду.Найти документ в 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

ответ

0

Если вы не знаете, в каком списке находится документ, вам нужно будет перебирать доступные объекты SPList из SPWeb.

+0

Спасибо за ваш ответ. Думаю, я нашел решение. Если я знаю guid of document, я могу сделать ... fileItem = oSPWeb.GetFile (новый Guid (spGuid)); где spGuid - строка guid – klashagelqvist

+0

Да, это было бы лучшим решением, если у вас есть guid :) – JoJa

+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 –

1

Если UniqueID единственная информация у вас есть, то вы должны создать SPSiteDataQuery для получения URL документа:

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 (документ) с SPWeb.GetFile(string). Если вам просто нужен SPListItem, вы можете получить к нему доступ через SPFile.Item.

Смежные вопросы