Estos días he tiendo la suerte de estar en Londres.
Entre otras cosas chulas me quede con estas imágenes.
UAHHHHHHHH!!!!!!!!!!!!!!

En el post anterior comentaba como hacer un WebPart que muestre el árbol de sitios. Para ello se parte del nodo raíz (RootWeb) y se examinaban recursiva mente todos los sub-sitios dibujando en un control ASP.NET TreeView.
Ahora mostrare otro enfoque que permite pintar el árbol completo de todos los contenidos(incluyendo las listas y bibliotecas).
En realidad lo que se hace es reproducir el funcionamiento del control árbol de navegación lateral de WSS.
El mapa de contenidos se obtiene a partir de SPHierarchyDataSourceControl que es el control que proporciona la vista jerarquizada de los sitios y listas de SharePoint.
Para los experimentos lo práctico es usar las extensiones de SharePoint para VisualStuido tal y como comentaba en el post anterior, el código del WebPart es el siguiente:
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Navigation;
namespace TreeWebPart
{
[Guid("9bff5178-c411-4ede-a7fa-42be6d5df451")]
public class TreeWebPart : System.Web.UI.WebControls.WebParts.WebPart
{
public TreeWebPart()
{
this.ExportMode = WebPartExportMode.All;
}
private void ListSubWebs(SPWeb Web, TreeNode TreeNode)
{
TreeNode.Text = Web.Title;
TreeNode.NavigateUrl = Web.Url;
foreach (SPWeb WWeb in Web.GetSubwebsForCurrentUser())
{
TreeNode ContainerNode = new TreeNode();
TreeNode.ChildNodes.Add(ContainerNode);
ListSubWebs(WWeb, ContainerNode);
}
}
protected override void CreateChildControls()
{
base.CreateChildControls();
SPHierarchyDataSourceControl SPHDataSource = new SPHierarchyDataSourceControl();
SPHDataSource.RootContextObject = "Web";
SPHDataSource.ID = "TreeViewDataSource";
SPHDataSource.IncludeDiscussionFolders = true;
SPHDataSource.ShowListChildren = true;
SPHDataSource.ShowDocLibChildren = true;
SPHDataSource.ShowFolderChildren = true;
Controls.Add(SPHDataSource);
SPTreeView SitesTree = new SPTreeView();
SitesTree.DataSourceID = "TreeViewDataSource";
this.Controls.Add(SitesTree);
}
protected override void Render(HtmlTextWriter writer)
{
RenderChildren(writer);
}
}
}
Si desplegamos el WebPart veremos el resultado:
¡Curioso!
Estos días he estado "jugando" con las extensiones de VisauStudio para los Windows SharePoint Services(VSeWSS)
Las extensiones hacen que los experimentos con desarrollo SharePoint sean muy cómodos y fáciles.
Para mis experimentos he creado una maquina virtual(virtualPC) con:
- Windows Server 2003
- WSS3
- Visual Studio 2005
- Visual Studio 2005 Extensions
La instalación no tiene ningún misterio y en poco tiempo tenemos un entorno para explorar las posibilidades de desarrollo de SharePoint.
Mi primer experimento consiste en hacer un WebPart que pinte el árbol de los sitios.
El Webpart utiliza el control árbol de ASP.NET 2, recorre la jerarquía de sitios y añade los nodos correspondientes.
Lo primero es abrir Visual Studio y crear el proyecto tipo WebPart
El código que introducimos es:
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace TreeWebPart
{
[Guid("9bff5178-c411-4ede-a7fa-42be6d5df451")]
public class TreeWebPart : System.Web.UI.WebControls.WebParts.WebPart
{
public TreeWebPart()
{
this.ExportMode = WebPartExportMode.All;
}
private void ListSubWebs(SPWeb Web, TreeNode TreeNode)
{
TreeNode.Text = Web.Title;
TreeNode.NavigateUrl = Web.Url;
foreach (SPWeb WWeb in Web.GetSubwebsForCurrentUser())
{
TreeNode ContainerNode = new TreeNode();
TreeNode.ChildNodes.Add(ContainerNode);
ListSubWebs(WWeb, ContainerNode);
}
}
protected override void CreateChildControls()
{
base.CreateChildControls();
TreeView SitesTree = new TreeView();
SPSite ContextSite = SPContext.Current.Site;
SPWebCollection RootSites = ContextSite.RootWeb.Webs;
foreach(SPWeb RootSubSite in RootSites)
{
TreeNode RootTreeNode=new TreeNode();
SitesTree.Nodes.Add(RootTreeNode);
ListSubWebs(RootSubSite, RootTreeNode);
}
this.Controls.Add(SitesTree);
}
protected override void Render(HtmlTextWriter writer)
{
RenderChildren(writer);
}
}
}
Ahora solo falta presionar la tecla (F5) para ver el resultado, las extensiones de SharePoint compilarían el Webpart, crearan el fichero de despliegue, desplegaran el webpart y reiniciaran el IIS(tantas cosas con solo pulsar una tecla:-))
Nos queda ir a SharePoint y añadir nuestro nuevo WebPart a la página.
Ahora podemos incluso hacer depuración de nuestro WebPart, utilizando el menú "Debug" - "Attach to process" y seleccionando el proceso w3wp.exe.
Todo esto hace más agradable la experiencia con el desarrollo en SharePoint liberando al desarrollador de pesadas manipulaciones para desplegar el WebPart.
Ahora bien una vez hechos los experimentos fáciles hay que aplicar las buenas prácticas. No hay que olvidar que un WebPart puesto por nosotros en una página es una pieza que se ejecutara por muchos usuarios al mismo instante y en solicitudes sucesivas.
En la siguiente URL adjunta se enumeran las técnicas que se deben aplicar para desarrollar WebParts:
http://msdn2.microsoft.com/en-us/library/bb687949.aspx
Hola amigos, desde hace tiempo leo Geeks.ms. Ahora también tengo la oportunidad de participar en este espacio tan interesante (gracias a la ayuda de Bruno Capuano y Rodrigo Corral).
Mi nombre es Jorge Dieguez, tengo 32 años y me apasiona la tecnología:-)
Actualmente me interesan mucho las soluciones relacionadas con la gestión de contenidos, gestión documental, herramientas colaborativas, portales y otras herramientas que ayudan a gestionar el conocimiento en las empresas. En este sentido y a nivel practico estoy trabajando con la tecnología SharePoint.
También me gustan mucho todo lo que tiene que ver con el desarrollo de soluciones Web.
Estos son los temas que tratare en este blog.
Estaré encantado compartir con todos este espacio, aprender y hacer muchos amigos :-)