Parte 4 del kit de herramientas de integración de notificaciones, Azure y SharePoint

Esta es la cuarta parte de una serie de cinco partes sobre el kit CASI (del inglés Claims, Azure, and SharePoint Integration).  En la parte 1 vimos una introducción general de todo el marco y la solución, así como una descripción de los temas que se cubrirán en la serie.  En la parte 2 se proporcionaron instrucciones para crear aplicaciones WCF, configurarlas para notificaciones y, a continuación, moverlas a Windows Azure.  En la parte 3 vimos una descripción de la clase base que usará para conectar el sitio de SharePoint con datos de Azure, agregando un nuevo control personalizado a una página en el directorio _layouts.  En esta entrada me voy a referir al elemento web que se incluye como parte de este marco.  Está diseñado específicamente para que funcione con el control personalizado que creó y agregó a la página de diseños en la parte 3.

Uso del elemento web

Antes de empezar a usar el elemento web, se supone que tiene un servicio WCF activo hospedado en Windows Azure y que ha creado un control personalizado y lo ha agregado a la página de diseños, tal como se describe en la parte 3 de esta serie.  También se supone que ha implementado el ensamblado de la clase base del kit CASI y el ensamblado del control personalizado en la GAC en cada servidor del conjunto o granja de servidores de SharePoint.  Se supone asimismo que ha implementado la página aspx personalizada que hospeda el control personalizado en el directorio de diseños de cada servidor front-end web de la granja de servidores.  Para describir cómo usar el elemento web, usaré el proyecto de ejemplo AzureWcfPage que he cargado y adjuntado a la entrada de la parte 3.  Veamos ahora cómo combinar estas dos cosas para representar datos de Azure en un sitio de SharePoint.

NOTA:  aunque no es obligatorio, por lo general es mucho más fácil usar el elemento web si los métodos WCF que se llaman devuelven HTML, de modo que se pueda mostrar directamente en la página sin procesamiento adicional.

El primer paso consiste en implementar la solución AzureRender.wsp en la granja de servidores; el archivo wsp se incluye en el archivo ZIP que se adjunta a esta entrada.  Contiene la característica que implementa el elemento web DataView de Azure y jQuery 1.4.2 en el directorio de diseños.  Una vez que se haya implementado la solución y que la característica esté activada para una colección de sitios, puede agregar el elemento web a una página.  Ya está casi listo para empezar a representar los datos de Azure, pero antes debe configurar como mínimo una propiedad.  Veamos entonces cuál es esa propiedad y las demás propiedades del elemento web.

Propiedades del elemento web

Todas las propiedades del elemento web se encuentran en la sección Propiedades de conexión.  Como mínimo, debe establecer la propiedad Página de datos en la página de diseños que creó e implementó.  Por ejemplo, /_layouts/AzureData.aspx.  Si la etiqueta del servidor del control personalizado ha definido al menos las propiedades WcfUrl y MethodName, entonces esto es lo único que debe hacer.  Si no hace nada más, el elemento web invocará la página y usará el método y el extremo de WCF que se configuró en la página, y aceptará todos los datos que devuelva el método (con formato HTML) y los representará en el elemento web.  En la mayoría de los casos es conveniente usar algunas de las otras propiedades del elemento web para obtener la máxima flexibilidad. Por lo tanto, veamos cada una de ellas:

·         Nombre del método*: el nombre del método de la aplicación de WCF que se debe invocar.  Si debe invocar la página de diseños con su propia función javascript, el parámetro de cadena de consulta correspondiente a esta propiedad es "methodname".

·         Lista de parámetros*: una lista delimitada por punto y coma de los parámetros del método WCF.  Tal como se indica en las partes 2 y 3 de esta serie, solo se admiten los tipos de datos básicos: string, int, bool, long y datetime.  Si necesita un tipo de datos más complejo, primero debe deshacer la serialización en una cadena y, a continuación, llamar al método y serializarla como un tipo complejo en el extremo de WCF.  Si debe invocar la página de diseños con su propia función javascript, el parámetro de cadena de consulta correspondiente a esta propiedad es "methodparams".

·         Dirección de devolución de llamada correcta: la función javascript que se llama de nuevo después de que la solicitud de jQuery para la página de diseños se haya completado correctamente.  De forma predeterminada, esta propiedad usa la función javascript que se incluye con el elemento web.  Si usa su propia función, la firma de la función debe tener esta forma:  función nombreDeSuFunción(resultData, resultCode, queryObject).  Para obtener más detalles, vea la documentación de jQuery AJAX en http://api.jquery.com/jQuery.ajax/.

·         Dirección de devolución de llamada de error: la función javascript que se llama de vuelta si la solicitud de jQuery para la página de diseños encuentra un error.  De forma predeterminada, esta propiedad usa la función javascript que se incluye con el elemento web.  Si usa su propia función, la firma de la función debe tener esta forma:  función nombreDeSuFunción(XMLHttpRequest, textStatus, errorThrown).  Para obtener más detalles, vea la documentación de jQuery AJAX en http://api.jquery.com/jQuery.ajax/.

·         Mensaje de error estándar: el mensaje que se mostrará en el elemento web si se produce un error durante el procesamiento del lado servidor del elemento web.  Esto significa que NO incluye escenarios en los que los datos se capturan de Azure.

·         Mensaje de acceso denegado*: se trata de un mensaje de error acceso denegado que se mostrará si se ha denegado al usuario el acceso a un método determinado.  Por ejemplo, tal como se explica en la parte 2 de esta serie, dado que estamos pasando el token del usuario a la llamada de WCF, se puede decorar cualquiera de los métodos con una petición de PrincipalPermission, como por ejemplo "este usuario debe formar parte del grupo de jefes de ventas".  Si un usuario no cumple con una petición de PrincipalPermission, se producirá un error de acceso denegado en la llamada de WCF.  En ese caso, el elemento web mostrará el mensaje de acceso denegado correspondiente.  Tenga en cuenta que puede usar formato enriquecido en este mensaje para realizar tareas como establecer la fuente en negrita o en rojo mediante etiquetas HTML (por ejemplo, <font color='red'>No dispone de acceso; póngase en contacto con su administrador</font>).  Si debe invocar la página de diseños con su propia función javascript, el parámetro de cadena de consulta correspondiente a esta propiedad es "accessdenied".

·         Mensaje de tiempo de espera*: éste es el mensaje que se mostrará si se produce un error de tiempo de espera al intentar ejecutar la llamada al método WCF.  También es compatible con formato enriquecido; por ejemplo, para establecer la fuente como negrita o en rojo, etc.  Si debe invocar la página de diseños con su propia función javascript, el parámetro de cadena de consulta correspondiente a esta propiedad es "timeout".

·         Mostrar el vínculo Actualizar: active esta casilla de verificación para representar un icono de actualización sobre los datos de Azure.  Si se hace clic en el icono, se volverá a ejecutar el método WCF para obtener los datos más recientes.

·         Actualizar estilo: permite agregar atributos de estilo adicionales al atributo de estilo principal en la etiqueta IMG que se usa para mostrar el vínculo de actualización.  Por ejemplo, puede agregar "float:right;" con esta propiedad para que la imagen de la actualización se alinee a la derecha.

·         Caché de resultados: active esta casilla de verificación para que la biblioteca jQuery almacene en la memoria caché los resultados de la consulta.  Esto significa que cada vez que la página se cargue, usará una versión almacenada en caché de los resultados de la consulta.  Esto ahorrará idas y vueltas a Azure y permitirá a los usuarios tener un rendimiento más rápido.  Si los datos que recupera no cambian con frecuencia, el almacenamiento en caché de los resultados es una buena opción.

·         Decodificar resultados*: active esta casilla de verificación en caso de que la aplicación de WCF devuelva resultados codificados en HTML.  Si establece esta propiedad en true, se aplicará descodificación HTML a los resultados.  En la mayoría de los casos esto no es necesario.  Si debe invocar la página de diseños con su propia función javascript, el parámetro de cadena de consulta correspondiente a esta propiedad es "encode".

*: estas propiedades se pasarán por alto si la propiedad AllowQueryStringOverride del control personalizado se establece en false.

Caso de uso típico

Suponiendo que el método WCF devuelva HTML, en la mayoría de los casos le conviene agregar el elemento web a una página y establecer dos o tres propiedades:  Página de datos, Nombre del método y, posiblemente, Lista de parámetros. 

Si tiene necesidades de procesamiento o de presentación más avanzadas para los datos devueltos por Azure, puede convenirle usar una función javascript personalizada.  En ese caso, debe agregar el javascript a la página y establecer la propiedad de dirección de devolución de llamada correcta en el nombre de la función de javascript.  Si su elemento requiere devoluciones (postbacks) adicionales a la aplicación de WCF para, por ejemplo, agregados, actualizaciones o eliminaciones, debe agregarlos a sus propias funciones de javascript y llamar a la página de diseños personalizada con los valores de Nombre del método y Lista de parámetros correspondientes; los nombres de las variables de cadena de consulta que se deben usar se documentan más arriba.  Al invocar el método ajax en jQuery para llamar a la página de diseños, debería poder usar un método similar al que usa el elemento web.  La convención de llamada que usa se basa en la función de script indicada a continuación. Tenga en cuenta que es probable que desee seguir usando la propiedad dataFilter que se muestra ya que elimina toda la salida de la página que NO es del método WCF:

$.ajax({

type: "GET", 

       url: "/_layouts/SomePage.aspx",

dataType: "text",

data: "methodname=GetCustomerByEmail&methodparams=steve@contoso.local",

dataFilter: AZUREWCF_azureFilterResults,

success: yourSuccessCallback,

error: yourErrorCallback

});

 

¡Pruébelo!

Ya debería tener toda la información necesaria para probar la solución completa.  En esta entrada encontrará un archivo ZIP adjunto que incluye la solución para el elemento web.  En la entrada siguiente, la última de esta serie, voy a explicar cómo usar el control personalizado desarrollado en la segunda parte para recuperar datos de Azure y cómo usarlos en la memoria caché de ASP.NET con otros controles y, además, cómo usarlos en tareas de SharePoint; en este caso, un trabajo del temporizador de SharePoint personalizado.

Esta entrada de blog es una traducción. Puede consultar el artículo original en The Claims, Azure and SharePoint Integration Toolkit Part 4