2011-04-12 13 views
7

Estoy tratando de recuperar todos los sitios y subsitios en sharepoint, pero me da acceso denegado.Sharepoint C# recuperar todos los sitios y subsitios

He leído a punto de usar la propiedad GetSubwebsForCurrentUser(), pero recibo el mismo mensaje.

Mi código es el siguiente

  foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications) 
      {      
       foreach (SPSite siteCollection in webApp.Sites) 
       { 
        foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser()) 
        { 
         dropDownSite.Items.Add(web.Url); 
        } 


       } 
      } 

por favor necesito ayuda! ¡Gracias!

+0

¿Dónde se está ejecutando este código? ¿Parte web? ¿Trabajo del temporizador? ¿Algo más? –

+2

Solo un aviso, ahora hay un [sitio de intercambio de pila de SharePoint] (http://sharepoint.stackexchange.com/). Está en beta pero deberías publicar allí (o el moderador podría mover esta pregunta allí). Ayudará al sitio a obtener más tracción :) – pstrjds

+0

¿Está buscando listas de sitios basadas en el contexto del usuario? Si es así, ¿estás haciendo esto solo para completar una lista de listas desplegables? Si es así, sugeriría el aprobador del portuario. Además, su código dejará cada una de esas webs en un estado no expuesto que resulta en una gran pérdida de memoria cada vez que esto se ejecute –

Respuesta

9

Es probable que tenga que llamar a SPSecurity.RunWithElevatedPrivileges(delegate())

Usted podría hacer un delegado en línea si lo desea, algo así como:

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications) 
      {      
       foreach (SPSite siteCollection in webApp.Sites) 
       { 
        foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser()) 
        { 
         dropDownSite.Items.Add(web.Url); 
        } 


       } 
      } 
    }); 
+0

que es exactamente lo que necesito, ¡muchas gracias! ¡¡¡¡Funciona genial!!!! – sergio

+0

Si funcionó, por favor marque mi publicación como la respuesta :) gracias. –

1

Solo para asegurarse, ¿se está ejecutando este código en el servidor que hospeda el portal Sharepoint? ¿Qué versión de Sharepoint estás ejecutando?

Además, ¿tendría sentido utilizar los servicios web que expone Sharepoint? http://msdn.microsoft.com/en-us/library/aa979690(v=office.12).aspx

Si está ejecutando este código en el mismo servidor que SP, asegúrese de que sus credenciales tengan acceso a SP. Si llama desde un sitio web, asegúrese de que no se está ejecutando como "Anónimo".

Sobre todo, creo que aprovechar los servicios web es la forma más fácil de hacerlo funcionar. Pero asegúrese de que tiene los permisos correctos que se envían y que ese usuario tiene acceso (en las configuraciones de SP) a esa información.

Espero que ayude!

0

Si utiliza aparece SPSite.AllWebs mensaje Acceso denegado! Esta declaración solo es correcta siempre que el usuario actual sea un administrador de colección de sitios

De modo que para todos los usuarios esta función obtenga todos los sitios y subsitios.

public static IEnumerable<SPWeb> DescendantSites(this SPWeb input) 
    { 
     foreach (SPWeb web in input.GetSubwebsForCurrentUser()) 
     { 
      yield return web; 
      foreach (var subnode in web.DescendantSites()) 
       yield return subnode; 
     } 
    } 
Cuestiones relacionadas