Procedimiento para enumerar sitios y colecciones de sitios
Última modificación: lunes, 12 de abril de 2010
Hace referencia a: SharePoint Foundation 2010
Disponible en SharePoint Online
Es posible devolver todos los sitios web dentro de una colección de sitios, todos los subsitios de primer nivel bajo un sitio web, todos los subsitios y listas para el sitio web actual, o la colección de colecciones de sitios en una aplicación web de SharePoint, como se muestra en los ejemplos siguientes.
Cada ejemplo requiere directivas using (Imports en Visual Basic) para los espacios de nombres de Microsoft.SharePoint y Microsoft.SharePoint.Utilities. Además, el último ejemplo requiere importar el espacio de nombres de Microsoft.SharePoint.Administration.
Se pueden ejecutar los fragmentos de código siguientes en un controlador de Button_Click desde el código subyacente de una página de aplicación que debe contener una etiqueta en la que se muestran los resultados. Para obtener información acerca de cómo crear una página de aplicación que funcione en el contexto de SharePoint Foundation, vea el tema sobre creación de páginas de aplicación para SharePoint. Cada ejemplo supone la existencia de un control de etiqueta en la página .aspx.
La propiedad AllWebs de la clase SPSite devuelve todos los sitios web de una colección de sitios, incluidos el sitio de nivel superior y todos los subsitios. En el siguiente ejemplo, se enumeran los títulos de todos los sitios web y las listas de la colección de sitios actual.
Dim oSiteCollection As SPSite = SPContext.Current.Site
Dim collWebsite As SPWebCollection = oSiteCollection.AllWebs
For i As Integer = 0 To collWebsite.Count - 1
Using oWebsite As SPWeb = collWebsite(i)
Dim collList As SPListCollection = oWebsite.Lists
For j As Integer = 0 To collList.Count - 1
Label1.Text += SPEncode.HtmlEncode(collWebsite(i).Title) & " " & SPEncode.HtmlEncode(collList(j).Title) & "<BR>"
Next
End Using
Next
SPSite oSiteCollection = SPContext.Current.Site;
SPWebCollection collWebsite = oSiteCollection.AllWebs;
for (int i = 0; i < collWebsite.Count; i++)
{
using (SPWeb oWebsite = collWebsite[i])
{
SPListCollection collList = oWebsite.Lists;
for (int j = 0; j < collList.Count; j++)
{
Label1.Text += SPEncode.HtmlEncode(collWebsite[i].Title) + " "
+ SPEncode.HtmlEncode(collList[j].Title) + "<BR>";
}
}
}
Para devolver una lista de todos los subsitios de primer nivel de un sitio web específico, use la propiedad Webs de la clase SPWeb. En el ejemplo siguiente se muestra una lista de títulos del subsitio. El método OpenWeb() se usa para abrir el sitio web raíz de la colección de sitios especificada.
Dim webUrl As String = "https://Server/sites/SiteCollection"
Using oWebsite As SPWeb = New SPSite(webUrl).OpenWeb()
Dim collWebsite As SPWebCollection = oWebsite.Webs
For Each subSite As SPWeb In collWebsite
Label1.Text += SPEncode.HtmlEncode(subSite.Title) & "<BR>"
subSite.Close()
Next
End Using
string webUrl = "https://Server/sites/SiteCollection";
using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb())
{
SPWebCollection collWebsite = oWebsite.Webs;
foreach (SPWeb subSite in collWebsite)
{
Label1.Text += SPEncode.HtmlEncode(subSite.Title) + "<BR>";
subSite.Close();
}
}
En lugar de usar una instrucción foreach, en el siguiente ejemplo se usan instrucciones for anidadas para mostrar la lista de direcciones URL de subsitios y títulos de lista.
Dim oWebsite As SPWeb = SPContext.Current.Web
Dim subSites As SPWebCollection = oWebsite.Webs
For i As Integer = 0 To subSites.Count - 1
Using subSite As SPWeb = subSites(i)
Dim collList As SPListCollection = subSite.Lists
For j As Integer = 0 To collList.Count - 1
Label1.Text += (subSite.Url & " :: ") + SPEncode.HtmlEncode(collList(j).Title) & "<BR>"
Next
End Using
Next
SPWeb oWebsite = SPContext.Current.Web;
SPWebCollection subSites = oWebsite.Webs;
for (int i = 0; i < subSites.Count; i++)
{
using (SPWeb subSite = subSites[i])
{
SPListCollection collList = subSite.Lists;
for (int j = 0; j < collList.Count; j++)
{
Label1.Text += subSite.Url + " " +
SPEncode.HtmlEncode(collList[j].Title) + "<BR>";
}
}
}
En el siguiente ejemplo de código se muestran todos los subsitios y listas del sitio web actual, así como el número de elementos de cada lista. En el ejemplo, se usan instrucciones foreach anidadas para procesar una iteración de las colecciones de sitios web y listas.
Dim webUrl As String = "https://Server/sites/SiteCollection"
Using oWebsite As SPWeb = New SPSite(webUrl).OpenWeb()
Dim subSites As SPWebCollection = oWebsite.Webs
For Each subSite As SPWeb In subSites
Label1.Text += SPEncode.HtmlEncode(subSite.Title) & "<BR>"
Dim collList As SPListCollection = subSite.Lists
For Each oList As SPList In collList
Label1.Text += SPEncode.HtmlEncode(oList.Title) & " " &
oList.ItemCount.ToString() & "<BR>"
Next
subSite.Close()
Next
End Using
string webUrl = "https://Server/sites/SiteCollection";
using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb())
{
SPWebCollection subSites = oWebsite.Webs;
foreach (SPWeb subSite in subSites)
{
Label1.Text += SPEncode.HtmlEncode(subSite.Title) + "<BR>";
SPListCollection collList = subSite.Lists;
foreach (SPList oList in collList)
{
Label1.Text += SPEncode.HtmlEncode(oList.Title) + " " +
oList.ItemCount.ToString() + "<BR>";
}
subSite.Close();
}
}
Para devolver la colección de colecciones de sitios en una aplicación web de SharePoint, use la propiedad Sites de la clase Microsoft.SharePoint.Administration.SPWebApplication. Use las propiedades de la clase Microsoft.SharePoint.SPContext para devolver la aplicación web actual. En el siguiente ejemplo de código, se muestran las direcciones URL de todas las colecciones de sitios de la aplicación web actual.
Dim webApplication As SPWebApplication = SPContext.Current.Site.WebApplication
Dim siteCollections As SPSiteCollection = webApplication.Sites
For Each siteCollection As SPSite In siteCollections
Label1.Text += siteCollection.Url & "<BR>"
siteCollection.Close()
Next
SPWebApplication webApplication = SPContext.Current.Site.WebApplication;
SPSiteCollection siteCollections = webApplication.Sites;
foreach (SPSite siteCollection in siteCollections)
{
Label1.Text += siteCollection.Url + "<BR>";
siteCollection.Close();
}
Para mejorar el rendimiento, los ejemplos de este tema no tienen en cuenta la colección de sitios y de los objetos de sitio web de los que se crea una instancia al enumerar las colecciones. Para obtener más información acerca de los procedimientos recomendados para deshacerse de objetos de SharePoint Foundation, vea Eliminación de objetos.
Vea también
Referencia
Conceptos
Trabajar con objetos de listas y colecciones
Uso de Visual Studio para el desarrollo de SharePoint
Validación de seguridad y realización de envíos para actualizar datos