我缺少一定如此简单的东西,甚至不值得问...但是我有一个对象ID(GUID)...我如何找出它指向的文档?

例如,我有一个指导 137DA01F-9AFD-5d9d-80C7-02AF85C822A8 并需要知道指向什么文件/URL。

有帮助吗?

解决方案

如果您知道SPWEB,但不知道文档库,则可以使用 SPWeb.GetFile:

SPFile file = web.GetFile(guid);

其他提示

最简单的情况

考虑到您知道文档存储在团队站点模板中的标准“共享文档”库中,您应该使用此代码:

var library = web.GetListFromUrl("http://site/Shared%20Documents/Forms/AllItems.aspx");
var file = library.Items[new Guid("137DA01F-9AFD-5d9d-80C7-02AF85C822A8")].File;
// file.Url - site-relative url of the file
// file.OpenBinary() - get file contents (returns byte[])

MSDN参考:

  1. SplistItemCollection.Item(GUID)
  2. spfile.openbinary (带有示例代码)

带有文件夹的库

在更复杂的情况下,当您的文档库中有一些文件夹时,最好的方法是为此目的使用CAML查询:

var query = new SPQuery();
query.ViewAttributes = "Scope=\"Recursive\"";
query.View = 
@"<Where>
  <Eq>
    <FieldRef Name=\"UniqueId\">
    <Value Type='Text'>137DA01F-9AFD-5d9d-80C7-02AF85C822A8</Value>
  </Eq>
</Where>";
var items = library.GetItems(query);

库未知

如果您甚至不知道该文件存储在哪个库中,则应浏览网站的所有库:

 foreach (var library in web.Lists)
 {
     if (!library.Hidden && library is SPDocumentLibrary)
     {
         // ... try to get the file and so on
     }
 }

文档ID

另外,您一定应该阅读有关文档ID功能的信息,该功能使您可以从任何地方引用文档:

http://blogs.technet.com/b/blairb/archive/2009/10/20/new-document-id-feature-in-sharepoint-2010.aspx

注意:当然,您的GUID不是文档ID。

splist.getitembyuniqueID 功能,但是如果您不知道要搜索哪个列表,那么您就无法运气。

如果您使用的是SharePoint 2010,请查看文档ID功能(该功能将唯一的ID附加到列表项目,然后使用搜索来查找该项目)。根据您的要求,您可以考虑使用类似的方法来记录ID,使GUID成为托管属性并通过代码进行搜索。

许可以下: CC-BY-SA归因
scroll top