2012-01-17 111 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来访问。