Skip Ribbon Commands
Skip to main content

Flexibilidad de WSSv3: Creación de workflows!
Codigo

Una de las novedades (como ya habréis leído, oído, probado,...) de WSSv3 es la posibilidad de crear workflows que nos permitan gestionar contenidos, integrarnos con otras aplicaciones, etc.
Autor: Juan Carlos González Martín

Nota: Articulo de Juan Carlos González Martín publicado en el Blog del Centro de Innovacion en Integracion - CIIN.

Para definir estos workflows, tenemos dos herramientas tan distintas como son Sharepoint Designer 2007 (SD 2007, Technical Refresh) y Visual Studio 2005 (con las extensiones de Windows Workflow Foundation y las correspondientes plantillas de definición de workflows para WSS, disponibles con el starter kit de la beta 2). En este post os mostraré como podemos crear el mismo workflow con ambas herramientas, y como la forma de definición, modelado y despliegue del mismo son diferentes, pero conducen al mismo resultado. El workflow que crearemos consistirá en enviar un e-mail al responsable de gestionar los eventos del calendario de nuestra organización cada vez que se cree un ítem en él. Empecemos.

Creación del workflow con SD 2007

Tras abrir nuestro sitio WSSv3 con SD 2007, vamos al menú contextual de creación de workflows con lo que se abrirá un wizard para la definición del workflow. Le damos un nombre a la instancia de workflow, seleccionamos la lista de WSSv3 que nos interese (en este caso Calendar) y marcamos la opción de que nuestro workflow se inicie de modo automático.

Lo siguiente que haremos es configurar que tiene qué hacer nuestro workflow, en este caso enviar un e-mail cada vez que se cree una nueva entrada en el caledario. Como no vamos a definir ninguna condición para el envío del e-mail, lo único que tenemos que hacer es definir una acción (actividad en VS) de envío de e-mail.

Configuramos adecuadamente el e-mail a enviar cuando se cree el ítem en el calendario: destinatario del e-mail, subject, y el cuerpo del e-mail (en el ejemplo he añadido algunos campos del ítem utilizando la opción Añadir Campos de Búsqueda que nos ofrece SD 2007). Una vez configurado el workflow, probamos que funciona correctamente (botón Comprobar flujo de trabajo) y lo desplegamos contra nuestro sitio WSS (botón Finalizar), y ya tendemos vinculado el workflow con la lista Calendar de nuestro sitio.

Creación del workflow con VS 2005

Para crear el workflow anterior en VS 2005 dentro de la sección de C# escogemos de tipo Windows Sharepoint Services, y seleccionamos la plantilla adecuada (Sharepoint Sequential Workflow Library en este caso, puesto que estamos modelando un workflow de tipo secuencial).

Una vez creado el proyecto, abrimos el archivo workflow1.cs que nos permitirá modelar nuestro workflow de manera visual, así como acceder a la vista de código para definir su comportamiento. Al abrir este fichero, vemos que por defecto ya tenemos una actividad agregada, OnWorkflowActivated, que es la actividad de inicio del workflow. Lo siguiente que haremos será añadir la actividad de envío de e-mail sin más que seleccionarla en la toolbox y arrastrarla a la ubicación correcta en la superficie de diseño (debajo la actividad de inicio).

La actividad de envío de e-mail la tendremos que configurar para que tenga el mismo CorrelationToken que la actividad de inicio y establecer de esta manera el canal de ejecución del workflow. Además, para esta actividad también configuraremos las propiedades Header y Body (bien en modo visual o en la vista de código) para posteriormente definir el e-mail a enviar. Una vez configurado el workflow en modo diseño, tenemos que definir su comportamiento en la vista de código (a través de los Handlers de cada actividad). Este sería el código de los handlers de las actividades del workflow:

Lo siguiente que tenemos que hacer es compilar nuestro assembly, firmarlo (puesto que para poder desplegarlo en WSS es condición indispensable) y ya estamos listos para desplegarlo (lo haremos como una feature, que es la opción que nos da por defecto VS 2005) en el sitio de WSSv3, para ello tenemos que realizar los siguientes pasos:

§ Configurar el fichero de feature adecuadamente (tiene que referenciar al fichero de manifiesto del workflow).
§ Configurar el fichero de manifiesto, siendo la sección más importante la siguiente:

§ Configurar adecuadamente el archivo de instalación de la feature para que registre el assembly en la caché del servidor de WSSv3, instale la feature y la active.

Si todo ha ido bien, tendremos disponible nuestro workflow en el sitio de WSSv3. Para comprobarlo, vamos a asociar el workflow a la lista de tipo calendario (a través de List Settings -> Workflows Settings) de WSS.

Una vez creada la instancia del workflow, veremos como en la lista Calendar tenemos dos workfows disponibles.

Probando los workflows

Para probar los workflows, basta con que creemos un nuevo elemento en el calendario y comprobemos que nos llegan dos e-mails avisándonos de que tenemos un nuevo evento en el mismo.



Finalmente, para cerrar el post os pongo una comparativa de las implicaciones de modelar workflows con SD 2007 o VS 2005.

Worflows diseñados con el Diseñador VS 2005 Workflows diseñados con SD 2007
Se pueden escribir workflows para WSS o MOSS. Se pueden escribir workflows para WSS o MOSS.
Los archivos de código permiten escribir código customizado para modelar procesos de negocio. El fichero de reglas de workflow encapsula los procesos de negocio.
Se pueden asociar a múltiples sitios y listas. Sólo se pueden asociar a una única lista en tiempo de diseño.
Los distintos ficheros que componen el workflow se compilan en un assembly. Los distintos ficheros que componen el workflow se almacenan sin compilar en una librería de documentos específica de WSS.
El workflow (template) ha de estar asociado con cada lista o elemento en que debe estar disponible. La asociación se da en el momento en que se crea el workflow en una cierta lista.
Se puede usar cualquier tipo de formulario: ASPX o InfoPath. Solo se pueden utilizar formularios de tipo ASPX.
Se pueden incluir modificaciones en el workflow No permite incluir modificaciones en el workflow.
Se puede crear actividades customizadas. Sólo se pueden usar las actividades disponibles
El assembly y definición del workflow se empaquetan como una feature de WSS, y luego se despliegan en el sitio (manual). El despliegue es realizado de forma automática.
Se puede usar un formulario de inicialización para recoger información del usuario cuando se arranca el workflow. Se puede usar un formulario de inicialización para recoger información del usuario cuando se arranca el workflow.
Se pueden usar formularios customizados para interactuar con tareas de WSS. Se pueden usar formularios customizados para interactuar con tareas de WSS.
Disponible debugging de VS. No es posible el modo debugging.
Se pueden crear workflows secuenciales y de máquina de estados. Sólo se pueden crear workflows de tipo secuencial.

Bueno, puesto esto ha sido todo. Espero que el post os resulte de utilidad.

Comentario

Trasteando un poco más con como acceder a las propiedades de un elemento de una lista de WSS, y con la ayuda de mi compañero Ángel Acha, he encontrado una forma menos enrevesada para acceder a las propiedades del item a partir de la propia estructura del objeto SPWorkflowActivationProperties. Este sería el código: