Los manejadores de eventos constituyen una de las funcionalidades más sencillas de utilizar a la hora de extender nuestras aplicaciones de SharePoint a través del desarrollo. Básicamente permiten agregar comportamiento a nuestra aplicación e implementar reglas de negocio.
Este post pretender describir todos los aspectos de esta técnica, desde la parte conceptual hasta la parte de código con algunos ejemplos en Visual Studio. Está basado en el webcast que dicté el 16/12/2009. Como siempre, espero que les sea útil.

WebCast

Si desean ver el webcast, pueden hacerlo desde:

Si desean ver la presentación que utilicé en el webcast pueden verla aquí:

Introducción

Los manejadores de eventos permiten extender a través de desarrollo una aplicación SharePoint. Agregan comportamiento a listas e ítems entre otros. Un manejador de evento se ejecuta automáticamente como respuesta a un evento como agregar una columna en una lista o modificar un ítem en una lista. Pueden servir para:

  • Validaciones de datos
  • Control de integridad referencial
  • Control de unicidad
  • Ejecución de procesos de negocio
  • Lo que no puede resolver un campo calculado
  • Protección de la parametrización
  • Cambios en la seguridad
  • Controles de seguridad funcional

Si conocen triggers de base de datos, verán que tienen un cierto parecido. Si bien son más potentes, podríamos decir que todo lo que se hace con un trigger, puede hacerse con un evento en SharePoint. Esto puede darles una idea del potencial de esta técnica.

¿Qué eventos maneja SharePoint?

El siguiente gráfico resume los eventos soportados por SP. Pueden observar que existen eventos a nivel de ítems de lista (los que se parecen a los triggers), pero también eventos a nivel de lista, sitio, colección de sitio o característica:
image

Imaginen lo que se puede hacer…

A continuación les daré algunas ideas de lo que se puede hacer con eventos. Son sólo ideas. Es mucho más lo que se puede hacer, pero les servirá de inspiración. Lo importante es que realmente resuelven temas que no existen en SP “out of the box”, en forma bastante sencilla:
image

Tipos de eventos ¿antes o después? ¿sincrónicos o a-sincrónicos?

Es importante aclarar que existen dos tipos de eventos, los que se ejecutan antes de que se efectúe el “commit” de la transacción en la base de datos de contenido y los que se disparan luego de que se ejecute el “commit”. Los primeros son sincrónicos, los segundos a-sincrónicos (en SP 2007, en 2010 es configurable).
image
El siguiente es el mapa completo de todos los eventos que SP 2007 maneja, incluye sus variantes sincrónicas y a-sincrónicas:
image

Evento o Flujo de Trabajo

Por sugerencia de Angel Acha Lizama luego del webcast, me pareció importante incluir una breve comparación entre Eventos y Flujos de trabajo porque son técnicas que tienen algún punto en común y el lector podría encontrar difícil la decisión de cuál usar en cada caso.
En líneas generales tengan en cuenta que un flujo de trabajo suele tener interacción con los usuarios a través de pantallas, puede perdurar en el tiempo (días, semanas, meses, etc.) y requiere persistir la información.
Un evento responde a una transacción y se ejecuta en el momento, no tiene pantallas asociadas, su duración es breve y no debe ser retomado luego de un tiempo, como sucede con un flujo de trabajo.
Les dejo este enlace que me pasó Angel, si quieren ampliar el tema: http://msdn.microsoft.com/en-us/library/ee413841.aspx

Pasos para crear un evento

La siguiente lámina muestras los pasos que se deben seguir para crear un evento. No estamos usando ninguna herramienta, ni extensión para SharePoint que nos facilite la creación, con el fin de explicar los conceptos básicos.
image

Paso 1: crear el proyecto

Si necesitan ayuda con este paso, les dejo este enlace que lo explica en forma detallada: http://sharepoint-puntodeencuentro.blogspot.com/2008/09/registrar-un-evento-mediante-una.html

Paso 2: definición de una clase

Ejemplo muy sencillo de definición de clase, cuyo objetivo es impedir que un administrador agregue columnas en una lista:
image

Paso 3: binding

Existen dos formas de vincular la definición de una clase de un evento a una entidad (lista, característica, etc): 1) a través de XML dentro de una característica y 2) programáticamente. Estas dos formas apuntan a objetivos distintos. A continuación veremos dos ejemplos:

Binding XML
image


Observaciones

  • Sólo pueden registrarse en características cuyo ámbito sea «site».
  • Sólo se puede registrar el evento para un «tipo de lista», no para una lista en particular.
  • También se puede registrar eventos para tipos de contenidos o features.
  • «SequenceNumber» indica el órden cuándo tengo más de un evento.
Binding en forma programática

A diferencia de la opción vía XML, nos permite vincular un evento a una lista específica, en lugar de a un tipo de lista. Ejemplo:

image

Demostraciones

A continuación dejamos el código fuente de las demostraciones que presentamos en el webcast. Tengan en cuenta que se trata de un prototipo, no una aplicación final, por lo cual nos hemos tomados algunas licencias para escribir código y notarán algunas desprolijidades.

Demo 1: completando una columna en un evento de ítem

Este ejemplo muestra como completar un campo dentro de un evento. En el código pueden ver dos ejemplo, un caso común para el campo “Proyecto” y otro para un campo de tipo URL, el campo “Actividad”.

image 

Demo 2: validando integridad en un evento de ítem

El siguiente ejemplo muestra cómo validar “unicidad” de una columna y cancelar la operación, emitiendo un mensaje al usuario, en caso que no se cumpla esta restricción.

imageimage 

image 

Demo 3: ejecutando un proceso de negocio en un evento de ítem

Este ejemplo muestra cómo a partir de la creación de un ítem, se dispara la creación de ítems en otra lista. Muestra cómo se leen los datos de la lista origen, cómo se recorren esos datos y como se crean los ítems en la lista destino.

imageimage image

Demo 4: ejecutando un evento al instalar una característica

Este último ejemplo nos muestra un ejemplo de evento para una característica. El objetivo es hacer cambios de estilos en SharePoint. Para una explicación más amplia pueden consultar este enlace: http://surpoint.blogspot.com/2009/07/cambios-de-estilos-en-sharepoint.html.

image

Paso 4: instalar

No voy a bajar a detalle con este paso, pero quería dejarles el contenido del .”bat” en dónde se muestra la instalación de la dll en la GAC, el copiado de los archivos XML y la instalación de la característica en SharePoint:

image

SharePoint 2010

El siguiente gráfico resume las novedades en SharePoint 2010 respecto a eventos. Lo más importante es saber que hay algunos eventos nuevos, pero fundamentalmente que los eventos “before” pueden ser sincrónicos o a-sincrónicos. Al final de este artículo les dejo un enlace por si necesitan ampliar este tema.

image

Un tema relacionado que no debemos dejar pasar es que SP 2010 agrega el concepto de validación de campos “Out of the box”. Esto es mucho más sencillo de usar que programar un evento para validar de datos. La validación se arma con fórmulas similares a la de los campos calculados y es posible especificar el mensaje de error para el usuario. Estas validaciones se pueden crear a nivel de columnas de sitio, o columnas dentro de una lista.

image

Fin

Aquí termino. Espero que les haya sido útil y lo hayan disfrutado. Hasta la próxima!

Bibliografía y enlaces interesantes

image Libros

  • Inside Microsoft Windows SharePoint Services 3.0 (Chapter 6)
  • By Ted Pattisonand & Daniel Larson (Microsoft Press)

Artículos

por Juan Pablo Pussacq Laborde , el 17.12.09 0 comentarios

Click on pen to Use a Highlighter on this page
Tagged with:
 
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Workflow New!
  • MSDN Virtual Lab: Rich Internet Applications with Silverlight and Sharepoint New!
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Content Types New!
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Page Branding New!
  • MSDN Virtual Lab: Integrating the New Mobility Features of Microsoft Office SharePoint Server 2007 with Windows Mobile New!
  • MSDN Virtual Lab: Getting Started with the Business Data Catalog in Microsoft Office SharePoint Server 2007 New!
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Event Handler
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Content Types
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Data Lists – C#
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Page Branding
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Page Navigation
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Web Parts
  • MSDN Virtual Lab: A SharePoint Developer Introduction – User Management
  • MSDN Virtual Lab: A SharePoint Developer Introduction – Web Services – C#
  • MSDN Virtual Lab: Microsoft Office SharePoint Server 2007 Installation and Configuration
  • MSDN Virtual Lab: Microsoft Office SharePoint Server 2007 Records Management Deployment and Configuration
  • MSDN Virtual Lab: Microsoft Office SharePoint Server 2007 Enterprise Features Administration
  • MSDN Virtual Lab: What’s New in Microsoft Office SharePoint Server 2007 Feature Walkthrough
  • Click on pen to Use a Highlighter on this page
    Tagged with:
     

    Background:
    There is no parent-child relationship support in MOSS 2007 lists by default. But as a developer, we all know it is the most common functionality while storing and displaying the data. Following is the technique that I discovered somewhere on the internet to display the data using DataView Control in SharePoint Designer(while developing reports for my last project), but unfortunatily I lost the original source and thought to reproduce it in my blog with some enhancements.

    Implementation:
    Following are the steps to perform Inner Join on two lists using DataView Control in SharePoint Designer:

    1. We need following two lists(with data in them):

  • Department (ID, Title)
  • Student (ID,Department_x0020_ID, Title)

    2. Open SharePoint Designer and create a new ASPX page.

    3. Create a linked datasource by following steps:

    1. Select Create a new Linked Source… from Data Source Library tab.
    2. In Data Source Properties dialog, select Configure Linked Source… button.
    3. From Link Data Sources Wizard, select Students and Department Lists and hit Next.
    4. Choose Join the contents… option and select Finish.
    5. Then select OK to get the New Data Source.
    6. Expand the New Data Source and select Show Data option.
    7. Under Data Source Details tab, you should see both lists (Department and student).

    4. Insert a Data View control into the ASPX page.
    5. Under Data Source Details tab, expand the Students list and drag and drop the Title column to Data View control and it will display all the students.
    6. Now place your cursur in Title column and select Table -> Insert -> Column to Right. In this column we will display Department.Title.
    7. Place your cursor on the first row of new column, select Title Column from Department list and select the Insert selected field as… button and choose Joined Subview opion.
    8. In Join Subview dialog, select Department_x0020_ID = ID and hit OK. (Pic 12)
    9. Thats it :o ).
    10. Play with the HTML to make it look like a report.

  •  

    http://mysplist.blogspot.com/2009/12/inner-join-two-lists-using-sharepoint.html

    Click on pen to Use a Highlighter on this page
    Tagged with:
     

    Un blog es una libreta de apuntes.

    Pienso que mantener un blog es al final del día una buena opción para contar con una libreta de apuntes personal, escribir notas o incorporar notas encontradas en la red sobre temas que uno esta investigando, resolviendo o simplemente post interesantes que a uno mismo le dejan alguna enseñanza…. así que siguiendo esa idea voy a incorporar una serie de apuntes sobre un aspecto que me parece es una debilidad en las soluciones SharePoint, lo cual no signfica nada mas que eso una debilidad que es necesaria para brindar otras fortalezas.

    Conocer una plataforma es conocer sus limites y estar atento a esos aspectos antes que se transformen en una amenaza…. como ven esto va en linea de FODA o (DAFO en Ingles). Toda solución tiene sus debilidades y fortalezas, lo importante es que exista un equilibrio respecto de las amenazas y oportunidades, que las amenazas choquen contra las fortalezas y las fortalecen rompan sobre las oportunidades para ponerlas en su dirección. Minimizar las debilidades, conociéndolas, y no aplicarle el algoritmo del avestruz (ocultando la cabeza en el suelo) es una labor que nos debe ocupar algun tiempo.

    Voy al grano, los aspectos relacionales de las listas de SharePoint, la Integridad de datos, su auditoria, su capacidad de enfrentar tareas de misión crítica, etc. en esa línea iran una serie de artículos, la mayoría no propios sino de mucha gente que sabe mucho y que generosamente exponen sus conocimientos al resto de una gran masa de trabajadores del conocimiento que luchamos día a día por no ser sorprendidos y que no nos quedamos en un círculo de comodidad que al final siempre se va encogiendo y de no enfrentarlo sistemàticamente terminaría por achatarnos.

    Ahí van, algunos de ellos, espero les sirvan, si los que envío directamente en inglés no son entendidos hagánmelo saber para irlos traduciendo.

    Un abrazo

    Rolando Escobar

    Consultor New People Group.

    Click on pen to Use a Highlighter on this page
    Tagged with:
     

    Un Workflow (Flujo de Trabajo) tiene por objetivo ser un modelo de un proceso de negocio (o producción) e implica un conjunto de actividades (tareas) que se aplican y operan en forma progresiva. El Workflow describe el orden de ejecución y las relaciones de dependencia entre las distintas activdades para que estas trabajen progresivamente a través de un modelo desde un inicio a un fin. Estas son actividades realizadas por las personas en forma manual y/o con el apoyo de funciones del sistema. 

     El Motor de Workflow en “Tiempo de Ejecución” (Runtime)

    Cada instancia de un workflow en ejecución es creada y mantenida en tiempo de ejecución por un motor que actúa en el domino de proceso de una aplicación determinada (in-process runtime engine) y que la da albergue. Pueden existir varios procesos en ejecución dentro del dominio de proceso de una aplicación, cada instancia del motor en ejecución puede soportar multiples instancias de workflow que se ejecutarán de modo concurrente y podrán orquestar un conjunto de tareas o actividades.

    Cuando un módulo de workflow se compila, este puede ser ejecutado “dentro” de cualquier proceso Windows, incluyendo una aplicación de consola, aplicaciones basadas en formularios, Servicios Windows, Sitios Web de ASP.NET, y Servicios Web, entre otros, como por ejemplo, los workflows que podemos ejecutar dentro de los procesos de SharePoint (independientemente de su versión). A este proceso lo llamamos “hosted” (alojados) en proceso, la idea es que el flujo de trabajo pueda comunicarse facilmente con la aplicación que le da alojamiento.

    Asi por ejemplo, un workflow asociado a una biblioteca de documentos de SharePoint puede comunicarse a través de eventos con la instancia de la biblioteca de SharePoint que le da alojamiento (con la que se vincula). Si el vinculo se pierde estas piezas de software ya no podrían comunicarse entre sí.

    Estudiando la ilustración siguiente podemos comprender esquemáticamente como se realiza este proceso de alojamiento (hosting), cual es el orden en que se comunican y se determinan entre si las distintas piezas de software que los desarrolladores construimos. 

    Aa349006.44c79d1d-178b-4487-87ed-3e33015a3842(en-us,VS.90).gifEn particular, respecto de SharePoint, podemos construir estas piezas de software básicamente con 3 herramientas.

    1.- SharePoint Designer (una herramienta poderosa y muchas veces insustituible, seguramente con la versión 2010 lo seguirá siendo, es recomendable aprender a usarla, para un desarrollador que espera avanzar en profundidad y amplitud el peor error que puede cometer es despreciar su utilidad.)

    2.- Visual Studio (2005, 2008 y ahora 2010, siempre mejorando e imprescindible a la hora de tener que satisfacer requerimientos sofisticados por parte de nuestros queridos clientes. Un programador no puede olvidar jamás esa máxima de la economía que dice: el cliente siempre tiene la razón. Y todo es posible, solo son horas sillas, algunos dolores de cabeza, pero siempre mas tiempo y costos más elevados..je..je.. cada quien paga su propio costo…je..je.je.., nosotros dispuestos a la esclavitud de la silla, y nuestros clientes a decidir entre tiempo y costos, ROI y TCO… en fin Anton Pirulero… cada cual atiende su juego.. es la moraleja.)

    3.- Herramientas de Terceros. De estas hay varias en el mercado, distintas en funcionalidades y costos, la herramienta de mejor relación costo-funcionalidades es sin duda Kaldeera.

    Un par de links al respecto.

    Kaldeera Diseñador de Workflows.

    Y el sitio de Tito… Aquí.

    Para Workflow en el MSDN pulse acá.

    Esperando que les sea útil, y por supuesto esperando quejas, contribuciones, insultos, etc…je..je..

    Un abrazo

    Rolando

    Click on pen to Use a Highlighter on this page

    Skype Online Status 

    Contáctanos por Skype Call me! - Rolando Escobar: Offline
    » Get Skype, call free! Servicios en Línea
     
     
    Servicios Interdata Ltda. Colaboración e Inteligencia de Negocios, SQL Server 2008, Analysis Services, SharePoint, Excel Services, Reporting Services

    Switch to our mobile site