martes, 11 de octubre de 2016

Flujos de trabajo en Apps Parte1

Desde tiempo atrás, los flujos de trabajo han sido una parte importante de varios proyectos de colaboración y automatización de procesos empresariales.


Aunque es cierto que en cada organización, los procesos se ajustan de acuerdo a sus capacidades, necesidades, madurez, etc.; lo cierto es que una herramienta de desarrollo de soluciones como los flujos de trabajo no pueden quedar fuera del mapa de complementos de SharePoint y SharePoint Online.

Diagrama del flujo de trabajo
Al momento de este post, la documentación sobre los flujos de trabajo es limitada, sin embargo, esperemos que con este escrito puedas comprender un poco de sus capacidades y limitantes.

Para nuestro ejemplo, generaremos un flujo de aprobación sencillo en dos pasos. El flujo estará asociado a una lista dentro de nuestra App y se iniciará automáticamente al crear un nuevo ítem.

En cuanto inicie el flujo, esperará a que el ítem alcance el estatus Enviado con lo que generará una tarea de aprobación.
Antes de finalizar el flujo, éste notificará al autor del ítem del resultado del proceso de aprobación mediante un correo electrónico.

En la imagen de la derecha puedes ver el flujo que se busca alcanzar.

Lo primero a realizar es crear es nuestra estructura de datos, es decir, nuestras columnas de sitio, tipos de contenido y listas/biblioteca (Si requieres más información de cómo crear Columnas, Tipos de contenido y listas/bibliotecas, por favor, revisa nuestro post anterior). Nosotros ocuparemos:

Proyecto en Visual Studio
  1. Columna: Estatus
  2. Tipo de contenido: Solicitud
  3. Lista: Solicitud
En la imagen puedes ver cómo queda configurado nuestro proyecto en Visual Studio. El orden o nombre de las carpetas no es necesario sin embargo, lo recomiendo mientras se trabaja con proyectos grandes.

El siguiente paso es crear nuestro flujo de trabajo. Para el ejemplo nos enfocaremos en un flujo secuencial; y al igual que con la estructura de datos, comenzaré colocando una carpeta en la que agregue todos los flujos derivados del proyecto. Sólo como nota personal, sean pacientes cuando trabajan con flujos en su lista, esto debido a que el tamaño del proyecto crece considerablemente y generar pruebas será cada vez más lento.

Para agregar nuestro primer flujo, presiona con el botón derecho del mouse sobre la carpeta Workflow y selecciona las opciones Add > New Item del menú contextual. Esta actividad lanzará el Wizard con el que podemos elegir el objeto Workflow. Nombra el flujo de acuerdo a tus estándares y presiona el botón Add.
Agregando un objeto de tipo Workflow al proyecto
Una vez presionado el botón Add, se dispara un nuevo Wizard en el que colocamos el Nombre del Workflow y el Tipo de flujo a generar (sitio o lista). Nosotros ocuparemos el tipo Lista.
Seleccionando el tipo de flujo de trabajo
Presiona el botón Next para continuar. En la siguiente pantalla, el Wizard solicitará seleccionar la lista o biblioteca a la que se vinculará, así como la opción de seleccionar las lista de tareas e historial.
Configurando los insumos para el flujo e trabajo
Presiona el botón Next. En la siguiente pantalla puedes indicar en qué momento se inicia la ejecución del flujo de trabajo (Manualmente, al crear un ítem o, al modificar un ítem). Para este ejemplo seleccionaré: manualmente y al crear un ítem.
Configurando la ejecución del flujo de trabajo
Al presionar Finish, Visual Studio creará el flujo de trabajo y las listas de Tareas e Historial requeridas. Tienes la opción de mover las listas a las carpetas para mantener un orden en tu proyecto.
Proyecto con el flujo de trabajo
En el área central de Visual Studio se tiene el lienzo en el que puedes comenzar a arrastrar las actividades que te permiten los flujos de trabajo. Existen varias herramientas y, a diferencia de los flujos de trabajo de SharePoint 2010 y 2013, éstos te limitan el uso de código como C#; es decir, sólo podrás colocar código en determinadas partes de tu proyecto y, no podemos hacer uso de todo el abanico de opciones que tiene C#, sin embargo, la extensión de herramientas es bastante buena para los fines del ejercicio.
En este punto del proyecto, te sugiero que vayas guardando periódicamente porque llega a ocurrir que Visual Studio se congele y se cierre automáticamente sin poder recuperar tus ajustes y configuraciones del flujo de trabajo.

Comencemos por identificar las áreas de herramientas y configuración en Visual Studio. En la siguiente imagen se muestra en rojo cuatro secciones principales:


Áreas de trabajo en Visual Studio
Del lado izquierdo tenemos todas las herramientas de las que disponemos, te recomiendo que le des un buen vistazo a cada una de las opciones y sus propiedades para que te vayas dando una idea de qué parámetros requiere de entrada y cuál es su salida. En el área central arriba tenemos el lienzo en el que iremos acomodando cada una de nuestras herramientas y formando el flujo de trabajo. En el área central abajo, tenemos tres espacios, el primero es para definir las variables de nuestro flujo de trabajo (así como su ámbito o alcance, es decir, en dónde estarán vivas nuestras variables); el segundo espacio es para definir argumentos de entrada y salida; finalmente, el último espacio permite agregar librerías de C# estándar. Finalmente, del lado derecho está la ventana de propiedades que nos permite configurar cada uno de los controles que coloquemos sobre el lienzo. Si en algún momento tienes dudas de qué tipo de información se requiere como entrada para algún componente, coloca el mouse sobre el nombre del Input y éste te dará una idea de la entrada requerida; no es mucho pero es algo jejeje.

Cuando nuestro flujo de trabajo inicia, coloco un control del tipo LookupSPListItem, con el que puedo recuperar la información del ítem actual. Para ello simplemente configuro sus propiedades tal como lo muestra la imagen siguiente.
Obteniendo el ítem actual
Una vez configurado el ítem actual, presiona el vínculo Get Properties; con ello se agregará automáticamente el control GetDynamicValueProperties con la variable dv_0 como fuente. Si prestas atención a la imagen anterior, el resultado de nuestro control LookupSPListItem es dv_0. Al presionar el vínculo View properties..., éste nos dará un cuadro de diálogo con el que podremos:

  1. Seleccionar la lista de la que se obtienen los datos con el control Entity Type.
  2. Seleccionar los campos que nos interesa recuperar con el cuadro de selección en la columna Path.
  3. Generar las variables y asignarles el valor que obtienen del ítem de la lista al presionar el vínculo Populate Variables.

Al configurar los campos y presionar el botón OK, nuestra recuperación y asignación de información quedará completa. El siguiente control que usamos es WaitForFieldChange, el cual espera a que ocurra un evento en el ítem actual y valida si un campo determinado cuenta con un valor específico. En la siguiente imagen se muestra la configuración que valida si el campo Estatus cuenta con el valor "Enviada". Si observas la manera en la que se escribe el valor del campo, te darás cuenta de en qué momento se usa código C#.

Para nuestro siguiente post, mostraremos cómo generar el proceso de aprobación mediante tareas y la personalización de los correos electrónicos usando HTML; así como ciertas consideraciones sobre los límites al desarrollar los flujos.
Espero que este post les de un buen inicio a sus proyectos y recuerden comentar sobre lo que les pareció el artículo y los temas que les gustaría que tocáramos.

¡Mucha suerte y felices trazos!