2010-11-26 8 views
5

¿Hay alguna manera de obtener un objeto List por una URL?Sharepoint 2010 Client Object Model obtener un elemento de la lista de una Url

Sé que usted puede obtener una lista por un título:

ClientContext context = new ClientContext("http://foo"); 

List list = context.Web.Lists.GetByTitle("title"); 

context.Load(list); 
context.ExecuteQuery(); 

pero quiero que el usuario sea capaz de copiar y pegar una URL de su navegador en un cuadro de texto (por ejemplo http://foo/subsite/ListName/Forms/AllItems.aspx) y luego extraer el Lista de objetos desde esa url.

Respuesta

5

No, no hay un método para obtener un objeto List directamente desde una URL. Como ha señalado, puede obtenerlo del título de la Lista, y también puede obtenerlo a través de su ID (vea ListCollection.GetById).

Mi sugerencia es hacer algo de piratería de URL; Las URL de SharePoint siguen un patrón predecible. Si un usuario está copiando/pegando una URL de lista, seguramente tendrá la URL de una vista, que terminará en algo como /Forms/[ViewName].aspx. Busque "/ Forms /" en la ruta, tome la subcadena anterior, luego use el nuevo final de la ruta como el nombre de la lista.

Y es bastante fácil hacer una codificación defensiva tratando de cargar la lista, capturando el ArgumentException que se lanza si la Lista no existe, y usando eso como una oportunidad para presentar un mensaje de error al usuario.

+1

Gracias. Es un caso claro de bricolaje. –

+0

Voy a trabajar en eso. Gracias de nuevo. –

0

Prueba esto:

private static List GetListByServerRelativeUrl(string serverRelativeUrl) 
{ 
    using (ClientContext ctx = new ClientContext("http://yoursite")) 
    { 
     var q = from list in ctx.Web.Lists 
       where list.RootFolder.ServerRelativeUrl == serverRelativeUrl 
       select list; 
     var r = ctx.LoadQuery(q); 
     ctx.ExecuteQuery(); 
     return r; 
    } 
} 
Cuestiones relacionadas