How to deploy a remote event receiver?

Receptores de Eventos en SharePoint: Guía Completa

hace 2 años

Valoración: 4.42 (2530 votos)

Los receptores de eventos en SharePoint son componentes esenciales para extender y personalizar la funcionalidad de la plataforma. Permiten ejecutar código personalizado en respuesta a eventos específicos que ocurren dentro de SharePoint, desde la adición de un elemento a una lista hasta la instalación de una nueva característica. En este artículo, exploraremos en profundidad qué son los receptores de eventos, sus tipos, cómo implementarlos y las ventajas que ofrecen para optimizar tu entorno SharePoint.

Índice de Contenido

¿Qué son los Receptores de Eventos?

Un receptor de eventos es esencialmente un fragmento de código gestionado diseñado para reaccionar ante eventos desencadenados por SharePoint. Estos eventos pueden ser acciones del usuario, como añadir, mover o eliminar documentos, o eventos del sistema. Cuando se produce uno de estos eventos y se cumplen los criterios definidos para el receptor, se ejecuta el código asociado, permitiendo añadir funcionalidad adicional o automatizar tareas.

What are event receivers in SharePoint?
An event receiver is a piece of managed code that responds to SharePoint triggering events such as adding, moving, deleting, checking in, and checking out.

En términos técnicos, cuando objetos de SharePoint como listas, flujos de trabajo o características se configuran para "esperar" a que ocurran estos eventos, se les denomina hosts de eventos. Los receptores de eventos actúan como puentes entre las acciones en SharePoint y la lógica de negocio personalizada que deseas implementar.

La creación de receptores de eventos genera un archivo DLL. Este DLL puede ubicarse en la caché de ensamblados global (GAC), lo que permite que los receptores de eventos se activen en respuesta a cualquier cambio dentro del sistema SharePoint. Esta capacidad es crucial para la automatización y la integración con otros sistemas.

Ejemplo Básico de Receptor de Eventos

Para ilustrar mejor, consideremos un ejemplo simple. Imagina que deseas registrar cada vez que se añade un nuevo elemento a una lista. Puedes crear un receptor de eventos que se active cuando se produce el evento `ItemAdded`. Este receptor podría, por ejemplo, escribir un registro en otra lista o notificar a un usuario por correo electrónico. Este tipo de lógica personalizada, aunque sencilla, demuestra el poder de los receptores de eventos para automatizar procesos dentro de SharePoint.

Tipos de Receptores de Eventos

Dentro de SharePoint, podemos distinguir principalmente dos tipos de receptores de eventos:

  • Receptores de eventos tradicionales (on-premises): Estos son los receptores de eventos originales, diseñados para entornos SharePoint on-premises. Se ejecutan en el mismo servidor de SharePoint y ofrecen una integración directa y un alto rendimiento dentro del entorno local.
  • Receptores de eventos remotos (SharePoint Online y Add-ins): Introducidos con SharePoint Online y el modelo de Add-ins, los receptores de eventos remotos se ejecutan fuera del servidor de SharePoint, en un servicio web remoto. Son ideales para escenarios donde la lógica de negocio reside fuera de SharePoint, como en Add-ins o en integraciones con sistemas externos.

Receptores de Eventos Remotos en Detalle

Los receptores de eventos remotos representan una evolución significativa en la arquitectura de SharePoint. En lugar de ejecutar el código directamente en el servidor de SharePoint, como hacen los receptores tradicionales, los remotos invocan un servicio web externo cuando se produce un evento. Esta arquitectura ofrece varias ventajas, especialmente en entornos SharePoint Online y en el desarrollo de Add-ins:

  • Desacoplamiento: La lógica de negocio se separa del entorno SharePoint, mejorando la estabilidad y el rendimiento del servidor de SharePoint.
  • Escalabilidad: El servicio web remoto puede escalarse independientemente de SharePoint, lo que es crucial para aplicaciones con alta demanda o lógica de negocio compleja.
  • Flexibilidad: Permiten utilizar cualquier tecnología para desarrollar el servicio web remoto (WCF, Web API, etc.) y alojarlo en cualquier plataforma (Azure, AWS, servidores on-premises separados).
  • Seguridad: Al ejecutarse fuera de SharePoint, los receptores remotos evitan posibles problemas de seguridad o rendimiento que podrían surgir al ejecutar código personalizado directamente en el servidor.

Receptores de Eventos y Listas Externas

Los Servicios de conectividad empresarial (BCS) utilizan receptores de eventos remotos conectados a listas externas y entidades. Esto permite escribir código que reaccione a cambios en datos alojados en sistemas externos. Imagina, por ejemplo, que tienes una lista externa que muestra datos de un sistema CRM. Con receptores de eventos, puedes automatizar acciones en SharePoint cuando se actualizan datos en el CRM, como enviar notificaciones o actualizar otros sistemas internos.

Para soportar esta funcionalidad, se han añadido dos estereotipos al esquema del modelo BDC: `EventSubscriber` y `EventUnsubscriber`. Estos estereotipos permiten definir operaciones de suscripción y desuscripción a eventos en sistemas externos, gestionando así el flujo de notificaciones entre el sistema externo y SharePoint.

Importante: Los receptores de eventos no son compatibles con las soluciones de espacio aislado (sandboxed solutions) en SharePoint Online.

Características y Capacidades de la Infraestructura de Receptores de Eventos Externos

La extensión de las funcionalidades de los receptores de eventos de SharePoint mediante BCS permite añadir características avanzadas como:

  • Alertas en Listas Externas: Anteriormente, las alertas de SharePoint no funcionaban con listas externas. Ahora, los usuarios pueden crear alertas en listas externas con el mismo comportamiento que en listas estándar de SharePoint.
  • Receptores de Eventos en Listas Externas: Se pueden adjuntar receptores de eventos a listas externas, igual que en listas estándar. Esto proporciona un mecanismo de extensibilidad para ejecutar código personalizado en momentos específicos en respuesta a cambios en datos externos.
  • Receptores de Eventos de Entidad: Ofrecen mayor flexibilidad, permitiendo escribir código más robusto que considere el contexto del usuario para filtrar datos, mejorando la personalización y la seguridad.

Escenario Práctico: Seguimiento de Clientes Potenciales

Un ejemplo práctico de la potencia de los receptores de eventos remotos es una aplicación de "Seguimiento de Clientes Potenciales". Imagina que un equipo de ventas necesita ser notificado cuando se introducen nuevos clientes potenciales en una aplicación externa. Al configurar la aplicación externa para que envíe una notificación a SharePoint cada vez que se crea un nuevo cliente potencial, SharePoint puede recibir esta notificación y, a través de un receptor de eventos, crear tareas para que los vendedores hagan seguimiento de cada nuevo cliente. Este flujo de trabajo automatizado mantiene a SharePoint actualizado con la información del sistema externo en tiempo real.

Prerrequisitos para Utilizar Receptores de Eventos en Listas Externas

Para utilizar receptores de eventos con listas externas, necesitarás:

  • SharePoint: Un entorno SharePoint funcional (on-premises o SharePoint Online).
  • Visual Studio: Visual Studio 2012 o posterior para desarrollar y desplegar los receptores de eventos.
  • Entorno de desarrollo SharePoint configurado: Asegúrate de tener configurado un entorno de desarrollo SharePoint adecuado.

Configuración del Sistema Externo para Notificar Eventos a SharePoint

Para que los eventos externos funcionen correctamente, tanto SharePoint como el sistema externo deben estar configurados adecuadamente. El sistema externo debe ser capaz de:

  • Determinar cuándo cambian los datos subyacentes: Implementa un mecanismo para detectar cambios en los datos. Esto puede lograrse mediante un servicio programado que sondee la fuente de datos a intervalos regulares.
  • Recibir y registrar solicitudes de suscripción a notificaciones de cambio: El sistema externo necesita un almacenamiento de suscripciones (por ejemplo, una tabla de base de datos) para guardar información sobre quién debe recibir notificaciones, incluyendo el ID de suscripción, la dirección de entrega (URL), el tipo de evento y el nombre de la entidad.
  • Enviar notificaciones a endpoints REST (Representational State Transfer): Para notificar a los suscriptores de SharePoint sobre un cambio, la aplicación del sistema externo debe enviar una solicitud HTTPWebRequest a la dirección de entrega (endpoint REST) que SharePoint genera durante el proceso de suscripción.

Configuración de SharePoint para la Comunicación con Sistemas Externos

SharePoint debe configurarse con los siguientes elementos para permitir la comunicación con sistemas externos:

  • Modelo BDC con estereotipos `EventSubscriber` y `EventUnsubscriber` configurados.
  • Receptores de eventos configurados en SharePoint para procesar las notificaciones recibidas del sistema externo.

Habilitación de Eventos Externos

Puedes habilitar los eventos externos en SharePoint a través de la Configuración del sitio o añadiendo el siguiente ID de característica personalizada a tu proyecto:

<ActivationDependency FeatureTitle="BCSEvents" FeatureId="60c8481d-4b54-4853-ab9f-ed7e1c21d7e4" />

La activación de eventos para un sistema externo se completa cuando SharePoint crea la dirección de entrega y la envía al sistema externo durante el proceso de suscripción.

Flujo General de Eventos Externos entre SharePoint y Sistemas Externos

El uso de receptores de eventos externos implica tres pasos principales: suscripción, notificación y desuscripción.

Proceso de Suscripción

Para recibir notificaciones sobre cambios en los datos subyacentes, un usuario (objeto de SharePoint) debe suscribirse a las notificaciones de una entidad. El esquema del modelo BDC se extiende para incluir el estereotipo `Subscribe`. SharePoint utiliza este estereotipo para informar al sistema externo de que se solicita recibir notificaciones sobre cambios en los datos subyacentes.

El proceso de suscripción implica los siguientes pasos:

  1. Solicitud de suscripción del usuario: A través de una interfaz de usuario personalizada, SharePoint inicia una solicitud al sistema externo para recibir notificaciones.
  2. Generación de dirección de entrega por SharePoint: Como parte del proceso de suscripción, SharePoint crea un endpoint REST donde se entregarán las notificaciones.
  3. Envío de solicitud de suscripción al sistema externo: SharePoint encapsula la información del solicitante junto con la URL REST generada dinámicamente y envía una solicitud web al sistema externo.
  4. Recepción de la solicitud por el sistema externo: El sistema externo recibe la solicitud y procesa la información.
  5. Generación de `subscriptionId` por el sistema externo: Se genera un nuevo ID de suscripción (GUID) en la aplicación del sistema externo.
  6. Registro de la suscripción por el sistema externo: La aplicación del sistema externo guarda el `subscriptionId`, la dirección de entrega, el tipo de evento y otra información en el almacenamiento de suscripciones.
  7. Envío del `subscriptionId` de vuelta a SharePoint: El `subscriptionId` se devuelve a SharePoint para que pueda enrutar correctamente las actualizaciones enviadas por el sistema externo. SharePoint guarda esta información en su base de datos.

Proceso de Notificación

Una vez creada la suscripción, el sistema externo necesita un método para informar a SharePoint sobre los cambios que ocurren en una entidad específica. Se espera que el sistema externo entregue notificaciones a la dirección de entrega proporcionada por SharePoint durante la suscripción, utilizando una carga útil en formato OData Atom.

El proceso de notificación se desarrolla de la siguiente manera:

  1. Se añade un nuevo registro al sistema externo: Un nuevo registro se añade al sistema externo a través de la interfaz de usuario o directamente en la base de datos.
  2. La aplicación del sistema externo es notificada del cambio: La aplicación del sistema externo debe ser consciente de los cambios en los datos subyacentes. Esto puede lograrse mediante triggers de SQL, mecanismos de sondeo, u otros métodos.
  3. El sistema externo envía una solicitud de notificación a SharePoint a través de la dirección de entrega: Para comunicar los cambios, se envía una solicitud en formato Atom a la dirección de entrega almacenada en el sistema de suscripciones de la aplicación LOB.

Proceso de Desuscripción

La operación de desuscripción elimina una suscripción de la lista de notificaciones. Este proceso es más simple que la suscripción, ya que SharePoint ya tiene registrado el ID de suscripción. Para desuscribirse, se envía una solicitud de desuscripción con el `subscriptionId` correcto.

Ejemplo de Código: Adjuntar un Receptor de Eventos a una Lista Externa (Conceptual)

El código proporcionado en el artículo original muestra un ejemplo de cómo adjuntar un receptor de eventos a una lista externa utilizando C#. Este código ilustra el proceso de añadir un receptor de eventos del tipo `ItemAdded` a una lista específica en SharePoint. Aunque el código real no se incluye aquí, el ejemplo demuestra la lógica básica para asociar un receptor de eventos a una lista, lo cual es fundamental para activar la funcionalidad personalizada cuando se producen eventos en la lista externa.

Más Allá de lo Básico: Conceptos Avanzados

Para profundizar en el uso de receptores de eventos externos, es importante explorar conceptos avanzados como:

  • Servicios de datos OData: Aprender a crear un servicio WCF (Windows Communication Foundation) accesible por Internet que utilice OData para enviar notificaciones a SharePoint cuando cambian los datos subyacentes.
  • Despliegue de receptores de eventos remotos: Comprender cómo desplegar receptores de eventos remotos en Add-ins de SharePoint, ya sea en la nube o en servidores on-premises.

Despliegue de un Receptor de Eventos Remoto en Add-ins de SharePoint

Desplegar un receptor de eventos remoto en un Add-in de SharePoint implica varios pasos, que incluyen la creación del servicio web remoto (WCF o similar) y la configuración del Add-in para registrar el receptor de eventos. El proceso típicamente incluye:

  • Crear el servicio web remoto: Desarrollar un servicio web que implemente la interfaz `IRemoteEventService` y contenga la lógica de negocio para manejar los eventos.
  • Registrar el receptor de eventos en el Add-in: Utilizar marcado declarativo (Elements.xml) para registrar el receptor de eventos con el Add-in, especificando el tipo de evento, el servicio web remoto y la lista o entidad asociada.
  • Desplegar el Add-in: Desplegar el Add-in en SharePoint, lo que registrará automáticamente el receptor de eventos remoto.

Creación de Receptores de Eventos en SharePoint 2013 (Conceptual)

En SharePoint 2013, la creación de receptores de eventos para bibliotecas de documentos y listas personalizadas seguía un proceso similar a los receptores tradicionales. Los pasos generales incluían:

  1. Crear un proyecto de SharePoint en Visual Studio: Utilizar una plantilla de proyecto de SharePoint vacío o de granja.
  2. Añadir un nuevo elemento de Receptor de Eventos: Seleccionar la plantilla de Receptor de Eventos y especificar el tipo de receptor (Lista de Elementos, Sitio Web, etc.) y la fuente del evento (Biblioteca de Documentos, Lista Personalizada, etc.).
  3. Implementar el código del receptor de eventos: Sobreescribir los métodos de eventos correspondientes (ItemAdded, ItemUpdating, ItemDeleting, etc.) en el archivo .cs del receptor y añadir la lógica de negocio deseada.
  4. Configurar Elements.xml: Asegurarse de que el archivo Elements.xml del receptor de eventos esté configurado correctamente para apuntar a la biblioteca o lista deseada y a los eventos que se van a manejar.
  5. Desplegar la solución: Construir y desplegar la solución de SharePoint en el entorno on-premises.

Interfaz Heredada para Receptores de Eventos en SharePoint Online

Para desarrollar receptores de eventos en SharePoint Online, se hereda la interfaz `IRemoteEventService`. Esta interfaz define los métodos `ProcessEvent` y `ProcessOneWayEvent`, que son los puntos de entrada para el código del receptor de eventos remoto. Además, dependiendo del tipo de evento que se desee manejar (elementos de lista, listas, sitios web, características), se utilizan clases base como `SPItemEventReceiver`, `SPListEventReceiver`, `SPWebEventReceiver`, y `SPFeatureReceiver`. Estas clases base proporcionan métodos virtuales para los diferentes eventos que se pueden sobrescribir para implementar la lógica personalizada.

Preguntas Frecuentes (FAQ)

¿Cuál es la diferencia principal entre receptores de eventos tradicionales y remotos?
Los receptores tradicionales se ejecutan en el mismo servidor de SharePoint, mientras que los remotos se ejecutan en un servicio web externo.
¿Cuándo debería usar receptores de eventos remotos?
Son ideales para SharePoint Online, Add-ins y cuando la lógica de negocio debe estar desacoplada del servidor de SharePoint.
¿Puedo usar receptores de eventos con listas externas?
Sí, BCS permite usar receptores de eventos remotos con listas externas para reaccionar a cambios en sistemas externos.
¿Qué necesito para desarrollar receptores de eventos remotos?
Necesitas un entorno de desarrollo SharePoint, Visual Studio y conocimientos de desarrollo web services (WCF, Web API, etc.).
¿Los receptores de eventos remotos funcionan en SharePoint on-premises?
Sí, aunque tradicionalmente se usan más en SharePoint Online y escenarios de Add-ins, también pueden utilizarse en entornos on-premises para desacoplar la lógica de negocio.

Conclusión

Los receptores de eventos son una herramienta poderosa y versátil en SharePoint. Permiten automatizar tareas, integrar sistemas externos, personalizar el comportamiento de SharePoint y extender sus funcionalidades de manera significativa. Ya sean receptores tradicionales para entornos on-premises o remotos para la flexibilidad y escalabilidad de SharePoint Online y Add-ins, comprender y utilizar los receptores de eventos es fundamental para cualquier desarrollador o administrador de SharePoint que busque optimizar y personalizar su entorno.

Subir