Desarrollando un WebPart para SharePoint 2010 usando Silverlight

Como mencioné en un artículo anterior, SharePoint 2010 nos provee un modelo de objetos de cliente para Silverlight, JavaScript y CLR .NET, el cual es un subconjunto del modelo de servidor.

El propósito de este artículo es el de mostrarles como podemos utilizar estas librerías para Silverlight desarrollando un pequeño WebPart el cual será instalado mediante una SandBoxed Solution.

Para empezar con el desarrollo de nuestra aplicación Silverlight, haremos lo siguiente:

  1. Abrir Visual Studio 2010

  2. File –> New –> Project

  3. Silverlight Application, el cual llamaremos “SilverlightApp”

Luego de estos pasos veremos una ventana, la cual nos indica si queremos crear una aplicación web para hostear nuestra aplicación Silverlight, a lo cual le desmarcaremos la opción quedando de la siguiente manera:

1

Finalmente, presionaremos OK con lo cual se generará nuestro proyecto. Editamos el MainPage.xaml y agregamos un ListBox, luego agregamos una referencia a las DLL’s de SharePoint para Silverlight las cuales se encuentran en el siguiente directorio: “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ClientBin”

2

Volvemos a nuestro MainPage.xaml, esta vez en vista código en la cual agregaremos el siguiente using:

 using SP = Microsoft.SharePoint.Client;

Después declaramos la siguiente variable local

 SP.ListCollection listas;

Luego en el evento UserControl_Loaded, agregamos las siguientes líneas de código

 SP.ClientContext ctx = SP.ClientContext.Current;
listas = ctx.Web.Lists;
ctx.Load(listas);
ctx.ExecuteQueryAsync(OnExito, OnError);

Línea a línea, lo que estoy haciendo es:

1.

Obtener el contexto actual

  
  1. Solicitar todas las listas contenidas en el Web del Contexto actual

  2. Finalmente ejecuto la solicitud al servidor de una manera asíncrona, la cual en caso de que se ejecute exitosamente ejecutará el evento OnExito caso contrario ejecutará el evento OnError.

Vamos ahora a implementar los eventos OnExito y OnFail los cuales quedarían así:

 private void OnExito(object sender, SP.ClientRequestSucceededEventArgs e)
{     
      Dispatcher.BeginInvoke(() =>     
      {         
           foreach (SP.List lst in listas)         
           {             
                listBox1.Items.Add(lst.Title);         
           }     
      });
}
 
private void OnError(object sender, SP.ClientRequestFailedEventArgs e)
{      
      Dispatcher.BeginInvoke(() =>  
      {      
           MessageBox.Show("Se ha producido un error: " + e.Message);     
      });
}

Ahora bien, la primera pregunta que podría saltarles a la mente sería: ¿Por qué Dispatcher.BeginInvoke?. Simple, Dispatcher.BeginInvoke ejecuta en la UI de manera asíncrona las instrucciones contenidas.

Con respecto a los eventos, en el caso de OnExito uno de los parámetros es del tipo ClientRequestSucceededEventArgs, el cual nos provee información de la operación. En el cuerpo del evento nos encontramos con la instrucción Dispatcher.BeginInvoke y dentro de ella, mediante el uso de Lambda recorremos el objeto “Listas” llenado previamente.

En cuanto al evento OnError, tiene un parámetro ClientRequestFailedEventArgs, el cual nos provee información de una excepción producida en el método ExecuteQueryAsync. Como cuerpo del evento, nuevamente nos encontramos con una expresión Lambda y dentro de ella un MessageBox, el cual nos muestra un mensaje de error, con la descripción del error provista por la variable “e” la cual es del tipo ClientRequestFailedEventArgs.

Ahora bien, una vez que tenemos listo nuestra pequeña aplicación Silverlight, llego el momento de hacer deploy de la misma hacia nuestro sitio SharePoint. Como les comentaba al principio de este artículo, es una buena idea hacerlo como una SandBoxed Solution por lo cual presionaremos el botón derecho del mouse y agregaremos un nuevo proyecto a nuestra solución, tomen como referencia la imagen a continuación:

3

Nos aparecerá una pequeña ventana en la cual nosotros ingresaremos la URL del sitio sobre el cual instalaremos nuestra aplicación y luego seleccionamos la opción “Deploy as a SandBoxed Solution”. Después, agregaremos un nuevo item al proyecto del tipo Module como veremos en la siguiente imagen:

4

Esto nos crea por defecto un archivo llamado “Sample.txt”, el cual esta situado a modo de ejemplo por lo que lo eliminaremos inmediatamente.

5

Ahora tenemos que referenciar a nuestro archivo XAP del proyecto Silverlight, en nuestro proyecto SharePoint para lo cual presionamos el botón derecho del mouse sobre el item SilverlightModule (es el nombre que yo utilicé) luego seleccionamos “Properties” y finalmente “Project Output References”, quedando como la siguiente imagen:

6

Con lo cual nos aparecerá una pequeña ventana con un botón Add, el cual presionaremos creando un nuevo item el cual lo editaremos dejándolo de la siguiente manera:

7

Si luego vemos nuestro archivo “Elements.xml” veremos como aparece el nuevo elemento agregado recientemente:

8

Luego presionaremos el botón derecho del mouse sobre nuestro proyecto SharePoint y seleccionaremos la opción “Deploy”

9

Hecho esto nuestra solución quedara activada en nuestro sitio, en mi caso en “https://localhost:2010/”. Ahora lo único que necesitamos hacer es ir a nuestro sitio SharePoint, editar la página y agregar un WebPart del tipo Silverlight como veremos a continuación:

10

Ahora tenemos que proveerle la dirección de nuestro XAP, en mi caso sería “/SilverlightModule/SilverlightApp.xap”. Con lo cual ahora veremos nuestra pequeña aplicación Silverlight:

11

Simple, ¿verdad? Espero que con este artículo hayan aprendido un poco más del modelo de objetos de cliente de Silverlight y lo sencillo que es hacer deploy de ella mediante una SandBoxed Solution. Si gustan descargar el fuente pueden hacerlo aquí.