Estos días he tenido que trabajar con LightSwitch para crear una aplicación que se conectara a SharePoint que pudiera interactuar con una “Lista Personalizada” (Custom List).

Escenario

Antes de comenzar, es necesario que establezca el contexto en el que LightSwitch se convirtió en la opción buena o menos mala (según se mire). La idea era bien simple, tener una lista de SharePoint de tipo “Custom List” en la que insertar alertas y que éstas sean  notificadas por medio de Push Notifications a los usuarios con dispositivos Windows Phone. A priori esto podría resultar muy sencillo si disponemos de SharePoint Server 2013 server que ya dispone de un servicio de notificaciones, incluso en SharePoint 2010 server tampoco presenta un reto conseguir este objetivo pero, ¿qué ocurre con SharePoint Online? Independientemente de la versión, 2010 o 2013 preview, en el entorno online de SharePoint no disponemos de esta posibilidad de una forma trivial (al menos de momento) y tenemos que recurrir al desarrollo que, se nos complica porque nuestro objetivo incluye que la versión de SharePoint debe ser la 2013 online. Debido a estos “problemas”, hemos explorado diferentes medios por los cuáles alcanzar nuestro objetivo.

Primera opción

La primera de las opciones que evaluamos y, quizás la más lógica a priori, es el uso de un “Receptor remoto de eventos” (Remote Event Receiver) que es un nuevo elemento que trae SharePoint 2013 consigo y que consiste en un “servicio” que responde a los eventos que especifiquemos de una lista dentro de la app. Todo parecía ir genial, salvando ciertas complicaciones que se presentaron pero, finalmente descartamos esta opción porque nos fue imposible obtener el contexto (Context) del sitio de SharePoint desde el “Remote Event Receiver” y, era imprescindible que pudiéramos acceder a otra lista que contiene los usuarios/dispositivos a los que hay que enviar la “Push notification”.

Segunda opción

La segunda opción fue optar por LightSwitch, arriesgándonos al adentrarnos en terreno no habitual con la siguiente idea, crear una aplicación que recogiera las alertas, las propagara a la lista SharePoint y, además, leyera la lista de usuarios/dispositivos y les enviara la correspondiente Push Notification. Finalmente esta opción nos sirvió pero con algunos matices que explicaré más adelante.

 

Solución

El primer paso es crear nuestro proyecto de aplicación HTML de LightSwitch que usaremos para usar de pasarela entre SharePoint, sus listas y los dispositivos con Windows Phone de los usuarios.

LightSwitch-Project

 

Una vez se ha abierto el proyecto en blanco, deberíamos enlazar con la tabla de SharePoint online, peeeeero, es imposible realizar esta operación ya que SharePoint Online tiene problemas de autenticación con LightSwitch para esta acción, así que, procedemos a crear una tabla local a la aplicación de LightSwitch que llamaremos “Alerts” seleccionando la opción “Crear nueva tabla”

LightSwitch-Empty-Project

 

La tabla que he creado para las alertas contiendo los siguientes campos

  • Title: String
  • Body: String
  • DueDate: DateTime
  • AlertType: String (enumerado al que accedemos desde la opción “Choice List”)

LightSwitch-Add-Table

Ahora vamos a proceder a crear las páginas que necesitamos para nuestra aplicación, un listado de alertas que llamaremos BrowseAlerts y un formulario de edición llamado AddEditForm. Para ello hacemos click con el botón derecho del ratón sobre el nodo “Cliente” de la solución y seleccionamos “Añadir pantalla” (Add Screen).

Una vez se abra el selector de pantalla, seleccionamos el tipo “Browse Data Screen” para el listado de alertas y en Screen Data seleccionamos “AlertasSet” o el conjunto que corresponda con nuestra tabla.

image

 

Procedemos a realizar la misma operación para crear la pantalla de edición pero, esta vez seleccionamos “Add/Edit Details Screen” en el tipo de pantalla y “Alertas” en “Screen Data”.

image

 

Ahora tenemos que enlazar las pantallas para que desde el listado tengamos la opción de abrir el formulario y crear una nueva alerta. Para ello, abrimos la pantalla “BrowseAlerts” que representa al listado y seguir estas indicaciones:

  • En el árbol que veremos seleccionar el nodo “List”, lo que hará aparecer la opción “Añadir”.
  • Seleccionar “Añadir” y ponerle un nombre.
  • De la lista de opciones seleccionar “Añadir botón”.
  • De la ventana que se abre, seleccionar “Elegir un método existente” y en Navigate To seleccionar “Alert Form”

 

LightSwitch-Browse-Table-ItemsLightSwitch-Add-Button

 

Ahora que ya tenemos las pantallas enlazadas, tenemos que conectar nuestra aplicación con SharePoint. Para ello nos vamos a las propiedades del nodo del proyecto y en la sección SharePoint deberemos habilitar la conexión mediante el botón “Habilitar SharePoint”, lo que añadirá las referencias necesarias en nuestra aplicación para poder trabajar y, posteriormente deberemos poner la ruta de nuestro servidor.

LightSwitch-Enable-SharePoint

 

Por último, nos queda escribir el código necesario para que al crear una nueva alerta en la aplicación de LightSwitch, ésta se propague a la lista que le indiquemos de SharePoint. Para conseguirlo, debemos ir primero a la vista de código de la aplicación.

Toggle-View

 

Una vez tengamos la vista de código, en el nodo “Server” he creado una clase llamada “AlertHelper” que será la encargada de realizar la propagación del registro de la alerta.

   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Web;

   5: using Microsoft.LightSwitch;

   6: using Microsoft.LightSwitch.Security.Server;

   7: using Microsoft.SharePoint.Client;

   8: using System.Linq.Expressions;

   9: using System.Net;

  10: using System.Text;

  11: using System.IO;

  12:  

  13: namespace LightSwitchApplication.Helpers

  14: {

  15:     public class AlertsHelper

  16:     {

  17:         public static bool AddAlert(Alert alert, ClientContext siteContext)

  18:         {

  19:             // Comprobamos el contexto del servidor de SharePoint

  20:             if (siteContext == null)

  21:                 throw new InvalidOperationException("Could not retrieve the Sharepoint context");

  22:  

  23:             // Obtener la lista

  24:             List alertsList = siteContext.Web.Lists.GetByTitle("Alerts");

  25:  

  26:             // Recordar que siempre hay que hacer un Load y un ExecuteQuery

  27:             siteContext.Load(alertsList);

  28:             siteContext.ExecuteQuery();

  29:  

  30:             try

  31:             {

  32:                 // Añadir la alerta a la lista

  33:                 var alertItem = alertsList.AddItem(new ListItemCreationInformation());

  34:                 alertItem["Title"] = alert.Title;

  35:                 alertItem["Body"] = alert.Body;

  36:                 alertItem["AlertType"] = alert.Type;

  37:                 alertItem["Expires"] = alert.DueDate;

  38:                 alertItem.Update();

  39:                 siteContext.ExecuteQuery();

  40:                 SendPushNotification(alert, siteContext);

  41:                 return true;

  42:             }

  43:             catch (Exception ex)

  44:             {

  45:                 return false;

  46:             }

  47:         }

  48:     }

  49: }

 

Ya sólo nos queda hacer que alguien llame al método de este “Helper”, y el encargado de hacerla será la clase “ApplicationDataService.cs” que se encuentra en la carpeta UserCode. Lo abrimos y le incluimos el método Alerts_Inserted que realizará la instancia del contexto del servidor de SharePoint y hará la llamada a la función del Helper que se encarga de propagar la alerta.

   1: public partial class ApplicationDataService

   2: {

   3:     partial void Alerts_Inserted(Alert entity)

   4:     {

   5:         var appWebContext = this.Application.SharePoint.GetHostWebClientContext();

   6:         var a = Helpers.AlertsHelper.AddAlert(entity, appWebContext);

   7:     }

   8:     

   9: }

 

Ahora ya lo tenemos todo listo y sólo nos queda ejecutar la aplicación y probar que funciona. Así es que le damos a F5, abriéndose así el navegador que nos pedirá autenticarnos en SharePoint y después nos mostrará una pantalla tal que así para “Confiar” en la aplicación que estamos desplegando. Seleccionamos “Trust It” para continuar.

SharePoint-Trust-Application

 

El siguiente paso nos lleva a la aplicación de alertas, mostrando la pantalla de listado con el botón para añadir alertas tal y como hemos diseñado.

LightSwitch-Application-Empty

 

Añadimos las alertas que queramos, en este caso he añadido 4 alertas para poder tener una visión de la aplicación con datos.

LightSwitch-Application-Form

 

Comprobamos en el listado que aparecen las alertas que vamos creando en la aplicación.LightSwitch-Application-List

 

Hasta aquí todo correcto pero… ¿qué ocurre con la lista de SharePoint? ¿Se han propagado los datos? Navegamos hasta ella y comprobamos que todo ha salido correctamente.

SharePoint-List

Espero que os sirva de ayuda. En el siguiente artículo completaré el proceso con el envío de las alertas a los dispositivos Windows Phone.