Cómo crear Workflows usando Sharepoint Designer 2010

01/04/2014

Una de las utilidades más importantes de Sharepoint son los flujos de trabajo (workflows). Los workflows permiten automatizar muchas de las tareas que realizamos. Por defecto Sharepoint dispone de 6 workflows que podemos utilizar en nuestras listas, pero no son lo suficientemente potentes para muchas de las tareas que queremos realizar.

Una forma de mejorar o crear nuestros propios workflows es utilizando Sharepoint Designer. Designer es una herramienta gratuita que podemos descargar y que permite personalizar los sites de Sharepoint y lleva un diseñador de workflows basado en pasos, estados y acciones. Desde este enlace podemos descargarlo

http://www.microsoft.com/es-es/download/details.aspx?id=16573

En este post vamos a diseñar un pequeño workflow para tramitar incidencias.

Inicialmente disponemos de una lista personalizada que le hemos llamado incidencias y que contiene estos campos: ID, descripción, estado, creado y creado por. La idea de este workflow es que un usuario denominado Help Desk tramite las incidencias. Para ello le pediremos información indicándole si puede o no resolver la tarea. Si la puede resolver él mismo, el workflow termina. Sino puede terminarlo, el workflow pide información al usuario que generó la incidencia para que rellene más información, y con esta nueva información, el HelpDesk pueda volver a decidir si puede o no finalizar la tarea. Es un workflow que genera un pequeño bucle (Loop) y se queda ahí hasta que el HelpDesk pueda finalizar.

Workflow con un Loop

Workflow con un Loop

Inicialmente creamos la lista de incidencias con un Custom List de Sharepoint

Lista de incidencias

Lista de incidencias

Nada más generar la incidencia, se ejecutará un workflow para tramitarla. Inicialmente, se genera una acción que pide al Help Desk si puede resolver la incidencia. Para eso definimos una acción de recolección de información (Collect Data from a User) y añadiremos un campo booleano que denominaremos eleccion_HELPDESK en donde guardaremos la respuesta.

Tarea y campo personalizado para pedir información al Help Desk

Tarea y campo personalizado para pedir información al Help Desk

Esta acción del Designer, generará automáticamente una nueva tarea en donde Help Desk debe indicar si puede resolverlo. Para poder saber el valor de la respuesta, debemos obtener el valor de la variable. Para eso añadimos una nueva acción (Set Workflow Variable) para que en una nueva variable denominada eleccion_HELPDESK, guardemos el valor.

Búsqueda del ID en la lista de tareas

Búsqueda del ID en la lista de tareas

Para poder buscar dicho valor, es necesario hacer una búsqueda (lookup). De hecho, en decicion_HELPDESK lo que tenemos es un ID. Ese ID se corresponde con el ID de la nueva tarea que se generó. Es por ello que debemos buscar en la lista de Tareas, el campo eleccion_HelpDesk (el campo booleano del formulario) y hacerlo correlacionar con el campo ID de la lista de tareas y con la variable decision_helpdesk (seleccionamos Workflow Variables and Parameters) que asignamos en la acción anterior.

Una vez ya tenemos el valor real (no el ID) de la respuesta del HelpDesk, podemos añadir una decisión if any value equals value para comprobar el valor y decidir qué hacer. Este paso quedaría así.

Estado Help Desk

Estado Help Desk

Dependiendo de si puede o no realizar la tarea, el estado de la incidencia pasará a Finalizada o Reenvio. Fijémonos que al inicio hemos puesto también otra condición para entrar en esta tarea si estamos en HelpDesk. De hecho, al rellenarse la incidencia, el estado inicial será HelpDesk para que entre directamente en este paso.

Para generar el estado finalizado es muy simple: añadimos otro paso y añadimos una condición if any value equals value para comprobar si el valor del estado de la incidencia es Finalizada. Si es así, registramos en el log del Workflow la finalización con la acción Log to History List  y generamos una acción de finalización de workflow con Stop Workflow.

Estado Finalizada de la incidencia

Estado Finalizada de la incidencia

Si la incidencia no ha sido resuelta, debemos pedirle más información al usuario. Para ello, generamos un nuevo estado llamado Reenvio en el que solicitaremos al usuario que generó la incidencia más información. Guardaremos la información en la variable decision_usuario y la obtendremos con eleccion_usuario. Pero el detalle más importante aquí, es cómo devolvemos la incidencia a Help Desk.

Formulario para solicitar más información al usuario

Formulario para solicitar más información al usuario

Un problema que tiene designer y que no ha sido resuelto hasta la versión Designer 2013, es que no tenemos ninguna acción denominada Loop. o no hay manera de volver a un estado anterior, osea el de HelpDesk que ya estuvimos en él. Para poder devolver la incidencia al HelpDesk, debemos generar una acción de Loop en el que la incidencia se quede así hasta que la pueda finalizar. Para hacer esto, hay que generar una nueva lista con un nuevo workflow. En esa nueva lista, lo que haremos es cambiar el estado de la incidencia a HelpDesk y volver a ejecutar el mismo workflow. De esa forma “volveremos” a un paso anterior.

Para empezar a hacer el Loop, en el estado de Reenvio, fijémonos que en el último paso Creo un nuevo elemento en una nueva lista denominada bucle en la acción Create List Item.

Estado Reenvio y creación de un elemento en otra lista

Estado Reenvio y creación de un elemento en otra lista

En esta acción de creación de nuevo elemento, guardamos en un campo de la lista bucle Title, el id de la tarea actual. Luego usaremos este mismo id para poder actualizar la incidencia original y así poder volver a ejecutar el mismo workflow. Fijémonos que lo estamos creando en otra lista denominada bucle. Para hacer el Loop, necesitamos 2 listas con 2 workflows distintos.

Creación de un elemento nuevo, guardando el id de la incidencia original

Creación de un elemento nuevo, guardando el id de la incidencia original

¿Y qué hacemos en la segunda lista denominada bucle? Añadimos una condición if any value equals value comparando 1=1 para que siempre entre y generamos una acción de modificación de un elemento en otra lista con la acción Update List Item.

Actualización del estado de la incidencia con el id guardado en la lista bucle

Actualización del estado de la incidencia con el id guardado en la lista bucle

En esta acción, actualizamos el campo estado de la lista de incidencias cambiándolo a HelpDesk para que así pueda reiniciar el Workflow y “volver” al estado de HelpDesk. Para ello, usamos el campo Title de la lista actual Current Item, de la lista bucle.

Así quedaría el paso inicial del workflow de la lista bucle.

Acciones del workflow de la lista bucle

Acciones del workflow de la lista bucle

Para que el Loop funcione correctamente, en la lista de incidencias, le diremos en las propiedades que el Workflow se inicie cuando creamos un elemento y también cuando se modifique. De hecho, para que el Loop funcione, el workflow debe reiniciarse cuando se modifique un elemento, osea cuando cambiamos el estado a HelpDesk desde la lista de bucle.

Opciones del workflow de la lista de incidencias

Opciones del workflow de la lista de incidencias

y así quedarían las opciones del workflow de la lista del bucle. Aquí sólo iniciaremos el workflow cuando se cree un elemento nuevo.

Opciones del workflow de la lista bucle

Opciones del workflow de la lista bucle

Ya sólo nos queda publicar los dos workflows con el botón de Publish.

Publicar el Workflow  con el botón de Publish

Publicar el Workflow con el botón de Publish

Una cosa a tener en cuenta, es que el estado de la Incidencia lo vamos cambiando nosotros, y  no es un campo que debería modificar el usuario, osea debería ser de sólo lectura. Para hacer esto, podemos pulsar el botón de InfoPath. Este botón está accesible desde las propiedades de la lista y permite modificar los formularios.

Botón de personalización de los formularios de las listas con InfoPath

Botón de personalización de los formularios de las listas con InfoPath

Vemos que con InfoPath se abre el formulario en formato edición.

Formulario de la lista de incidencias en InfoPath

Formulario de la lista de incidencias en InfoPath

Si seleccionamos las propiedades del campo Estado con el botón derecho, veremos que tenemos una propiedad para indicar que sea de sólo lectura.

Propiedades del campo estado

Propiedades del campo estado

Ya sólo nos queda tramitar la incidencia, creando un nuevo elemento.

Formulario actualizado con InfoPath

Formulario actualizado con InfoPath

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: