-
16-10-2019 - |
题
我缺少一定如此简单的东西,甚至不值得问...但是我有一个对象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参考:
带有文件夹的库
在更复杂的情况下,当您的文档库中有一些文件夹时,最好的方法是为此目的使用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成为托管属性并通过代码进行搜索。