Pregunta

Me falta algo que debe ser tan simple que ni siquiera vale la pena preguntar ... pero tengo una identificación de objeto (GUID) ... ¿Cómo creo el documento al que señala?

Por ejemplo, tengo un guía de 137DA01F-9AFD-5d9d-80C7-02AF85C822A8 y necesita saber a qué apunta el archivo/URL.

¿Fue útil?

Solución

Si conoce el spweb pero no la biblioteca de documentos, puede usar SPWeb.GetFile:

SPFile file = web.GetFile(guid);

Otros consejos

Caso más simple

Considere que sabe que el documento se almacena en la biblioteca estándar de "documentos compartidos" de la plantilla del sitio del equipo, debe usar este código:

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[])

Referencias de MSDN:

  1. SplistitemCollection.Item (GUID)
  2. Spfile.openbinar (con código de muestra)

Biblioteca con carpetas

En un caso más complejo, cuando tiene algunas carpetas en su biblioteca de documentos, probablemente la mejor manera será usar la consulta CAML para este propósito:

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);

Biblioteca desconocida

Si incluso no sabe en qué biblioteca se almacena el archivo, debe pasar por todas las bibliotecas del sitio:

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

IDS de documentos

Además, seguramente debe leer sobre la función IDS de documentos, que le permite hacer referencia a un documento desde cualquier lugar:

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

Nota: Su GUID, por supuesto, no es una identificación de documento.

Ahí está el Splist.getItembyuniqueID Funciona, pero si no sabes qué lista buscar, no tienes suerte.

Si está utilizando SharePoint 2010, mire la funcionalidad de ID del documento (que adjunta una ID única a un elemento de lista y luego usa la búsqueda para encontrar el elemento). Dependiendo de sus requisitos, puede considerar implementar "FindIteminSitecollection ByUniqueID" utilizando un enfoque similar para las ID de documentos, haciendo de GUID una propiedad administrada y realizando una búsqueda a través del código.

Licenciado bajo: CC-BY-SA con atribución
scroll top