SharePoint 2013: Novedades en manejadores de eventos (II)!

Como continuación del post qué escribí hace tiempo en relación a las novedades en manejadores de eventos para SharePoint 2013, en este nuevo artículo quería explicar como quedaría el trabajo con dichos manejadores tanto para SharePoint 2013 RTM como para SharePoint Online en Office 365. Al lío pues:

using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Net;
  • A continuación, procederemos a codificar los dos métodos del servicio qué nos permiten responder a eventos de naturaleza síncrona (ing) y asíncrona(ed). Para los eventos síncronos, tenemos que codificar el método ProcessEvent siguiendo por ejemplo el primer post de la serie.
  • En cambio, para los eventos asíncronos tendremos que codificar el método ProcessOneWayEvent de acuerdo al siguiente fragmento de código:
            HttpRequestMessageProperty requestProperty =
                (HttpRequestMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name];
            string contextTokenString = 
                requestProperty.Headers["X-SP-ContextToken"];
 
            // If there is a valid token, continue. 
            if (contextTokenString != null)
            {
                SharePointContextToken contextToken =
                    TokenHelper.ReadAndValidateContextToken(
                        contextTokenString, requestProperty.Headers[HttpRequestHeader.Host]);
                Uri sharepointUrl =
                new Uri(properties.ItemEventProperties.WebUrl);
                string accessToken =
                TokenHelper.GetAccessToken(contextToken, sharepointUrl.Authority).AccessToken;
                using (ClientContext ctx = 
                    TokenHelper.GetClientContextWithAccessToken(sharepointUrl.ToString(), accessToken))
                {
                    if (properties.EventType == SPRemoteEventType.ItemAdded)
                    {
                        List lList =
                            ctx.Web.Lists.GetByTitle(
                                properties.ItemEventProperties.ListTitle);
                        ctx.Load(lList);
                        ListItem liItem =
                            lList.GetItemById(
                                properties.ItemEventProperties.ListItemId);
                        ctx.Load(liItem);
                        ctx.ExecuteQuery();
                        liItem["Title"] +=
                            " - Elemento Añadido";
 
                        liItem.Update();
                        ctx.ExecuteQuery();
                    }
                }
            }
  • Cómo veis, frente al primer artículo de la serie basado en la versión Preview de SharePoint 2013, en este caso hacemos uso de la clase TokenHelper proporcionada al crear el proyecto de aplicación qué nos da las clases y métodos necesarios para poder interactuar de vuelta con SharePoint mediante OAuth dado qué en este caso estamos actualizando información del elemento de lista que se ha añadido. Fijaros en la mecánica a seguir:
    • En primer lugar, al realizar una petición a SharePoint desde una aplicación (en este caso desde el servicio WCF qué implementa la lógica del manejador de eventos remoto), necesitamos disponer de un Token de Contexto qué es generado por ACS (Azure Token Service).
    • Con el Token de contexto disponible, estamos en disposición de poder hacer operaciones “de vuelta” (callback) contra SharePoint para lo que necesitamos disponer de un Token de Acceso. Fijaros en como este Token de Acceso es obtenido por la aplicación partiendo del Token de Contexto y de nuevo a través de ACS.
    • Con el Token de Acceso, ya podemos crear una instancia de ClientContext y empezar a interactuar con SharePoint.
  • Dicho esto, ya sólo queda comenzar a probar el manejador de eventos remoto y verificar que funciona de forma correcta.

image

Referencia: http://code.msdn.microsoft.com/office/SharePoint-2013-Use-event-8b5a551f/sourcecode?fileId=72211&pathId=989899932

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

2 comentarios en “SharePoint 2013: Novedades en manejadores de eventos (II)!”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *