Вопрос

Мне не хватает чего -то, что должно быть настолько простым, что это даже не стоит спрашивать ... но у меня есть идентификатор объекта (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
     }
 }

Идентификаторы документов

Кроме того, вам обязательно следует прочитать о функции идентификаторов документов, которая позволяет ссылаться на документ из любого места:

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

Примечание. Ваша GUID, конечно, не является идентификатором документа.

Есть Splist.getitembyuniqueid Функция, но если вы не знаете, какой список искать вам не повезло.

Если вы используете SharePoint 2010, посмотрите на функциональность идентификатора документа (который прикрепляет уникальный идентификатор к элементу списка, а затем использует поиск для поиска элемента). В зависимости от ваших требований, вы можете рассмотреть возможность реализации «finditeminsitecollectionbyuniqueid» с использованием аналогичного подхода к идентификаторам документов, что делает GUID управляемым свойством и проводя поиск через код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top