Sharepoint: Listado de la listas de un Sitio

Vamos a mejorar la web part que estuvimos trabajando en el post anterior, agregándole el listado de las listas que tenemos en el sitio para luego seleccionarla y guardar lo que escribamos en el Cuadro de Texto. (Crear una Visual Web Part)

A la webpart anterior le agregamos un DropDownList o lista desplegable con los siguientes parámetros:

ID= ddlListado

AutoPostBack = true

AppendDataBoundItems = true

a este le creamos un ListItem con los siguientes parámetros:

Text= Seleccione...

Selected = true

les debería quedar algo así.

https://stucker2016.files.wordpress.com/2016/03/dropdownlist.png

Apretamos F7 y vamos a la función Page_Load y aca viene la parte divertida. Vamos a listar todas las listas que tenemos en el sitio que este la web part.

primero vamos a usar el famoso try catch, esto es para capturar todas las excepciones que pasen por si tenemos algún problema durante el proceso. para eso ponemos este fragmento de codigo.

try
{

}
catch (Exception ex)
{

}

Con esto le decimos que todo problema que pase en este segmento va a caer en la variable ex. Ahora vamos a decirle que la excepción se muestre en el label que tenemos.

en el catch(Exception ex) ponemos lo siguiente.

Quedaria asi:

catch`` (``Exception`` ex)
{
lblTexto.Text = ex.Message;
}

  Ahora volvemos al cuerpo del try y lo primero que hacemos es llamar al sitio en cuestión. Antes que nada quiero recordarles el modelo de datos de Sharepoint para que tengan en cuenta como podemos ir trabajando. Esta imagen no es de mi autoria fue sacada del curso de "Developing Microsoft SharePoint® Server 2013 Core Solutions" 

https://stucker2016.files.wordpress.com/2016/03/sharepoint-class.png

El primer objeto como verán es el SPFarm de donde salen todas las configuraciones de la Granja de este dependen los SPService,SPServiceApplication SPWebApplication  

Nos vamos a centralizar en el SPWebApplication ya que nos interesa consultar los sitios y las listas de ellos. Por lo tanto llamamos primero al sitio.

Arriba de todo llamamos a la libreria de Sharepoint colocando:

using Microsoft.SharePoint;

En el cuerpo del try  colocamos lo siguiente:

 using (SPSite sitio= new SPSite(SPContext.Current.Site.ID))
{
    
}

Les explico el fragmento este usando el using no tendriamos preocuparnos de usar los dispose. asi liberamos la memoria solicitada por cada clase. Despues definimos la variable tipo SPsite y como constructor usamos  el id del sitio. por eso usamos el SPContext que es el conjunto de variables de contexto en el que estamos. Este id corresponde al Guid del Site collection. Ahora vamos a llamar al Web en cuestion. 

dentro de las {} del using de SPSite ponemos lo siguiente. 

using (SPWeb web = sitio.OpenWeb(SPContext.Current.Web.ID))
{

}

Como verán estamos usando algo muy parecido al anterior pero quiero  hacer una aclaración. Si usamos el sitio.OpenWeb() solo vamos a acceder al sitio root de la colección de sitio. En cambio usando el ID vamos a acceder justo al sitio o subsitio. 

Ahora vamos a buscar las listas del sitio. 

dentro de las llaves del SPWeb ponemos lo siguiente:

ddlListado.DataSource = web.Lists;
ddlListado.DataTextField = "Title";
ddlListado.DataValueField = "ID";
ddlListado.DataBind();

Básicamente lo que le estamos diciendo es que el DataSource del ddlListado es la fuente web.Lists que es una colección de Objetos SPList. Después le indicamos cual va a ser el campo que vamos a usar para mostrar en este caso es "Title" por que lo llamo en ingles simplemente por que es como esta originalmente después con el Lenguaje pack que pone el Sharepoint para transformarlo en español le pone el nombre de Titulo pero de esta manera sabemos que no va a fallar, es como usar el nombre interno de la columna. 

***Nota: En otro tutorial les explicare el uso de los nombres internos. ***

Después como valor le ponemos que es el campo ID esto nos va a servir mas adelante para cuando queramos usar esa lista. 

Y por ultimo le decimos que aplique los cambios y que llenen el listado. 

El codigo completo deberia quedar asi:

using Microsoft.SharePoint;
using System;
using System.ComponentModel;
using System.Web.UI.WebControls.WebParts;

namespace TextoSimple.Mostrar_Texto
{
[ToolboxItemAttribute(false)]
public partial class Mostrar_Texto : WebPart
{
// Uncomment the following SecurityPermission attribute only when doing Performance Profiling on a farm solution
// using the Instrumentation method, and then remove the SecurityPermission attribute when the code is ready
// for production. Because the SecurityPermission attribute bypasses the security check for callers of
// your constructor, it's not recommended for production purposes.
// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Assert, UnmanagedCode = true)]
public Mostrar_Texto()
{
}

protected override void OnInit(EventArgs e)
{
base.OnInit(e);
InitializeControl();
}

protected void Page_Load(object sender, EventArgs e)
{
try
{
using (SPSite sitio = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb web = sitio.OpenWeb(SPContext.Current.Web.ID))
{
ddlListado.DataSource = web.Lists;
ddlListado.DataTextField = "Title";
ddlListado.DataValueField = "ID";
ddlListado.DataBind();
}
}
}
catch (Exception ex)
{
lblTexto.Text = ex.Message;
}

}

protected void btnTexto_Click(object sender, EventArgs e)
{
lblTexto.Text = "El texto ingresado es " + txtTexto.Text;
}
}
}

Si ejecutamos el proyecto apretando F5 vamos a ver que en se agrego un menú desplegable con todas las listas que tenemos en el. Y si cambiamos de sitio y agregamos la solución va a cambiar el listado. 

Les dejo una imagen de como lo deberían ver. 

https://stucker2016.files.wordpress.com/2016/03/listado.png

Como les digo siempre jueguen, disfruten y diviértanse codificando. 

Visitenme en mi Blog Lo que SharePoint me dejo
Les dejo las fuentes Fuentes