27 de julio de 2008

Ejemplo de workflow con SharePoint Designer

SharePoint Designer (SPD) es una versión evolucionada de FrontPage, que a sus nuevas capacidades de diseño de sitios web, añade funcionalidades específicas de SharePoint, la herramienta de colaboración para grupos de trabajo de Microsoft.

Normalmente, los entornos de colaboración Web requieren de conocimientos de programación para desarrollar pequeñas utilidades (avisar a varios usuarios para que revisen un documento, aprobar un documento…) que si bien no son imprescindibles, simplifican el trabajo y ayudan a tener procedimientos conocidos y usados por todos.

Es decir, que no se implantan nunca, porque la relación aparente coste/beneficio suele ser pequeña y “total, con el correo electrónico y un par de añadidos, te lo haces…”.

SPD es una herramienta que permite que usuarios no programadores puedan crear flujos de trabajo muy sofisticados.

Esto no pretende ser un curso de SPD o workflows, sino un ejemplo de una cosilla que he hecho (queda un poco rara fuera del entorno en que se plantea, pero en cualquier caso, aquí queda). Es muy recomendable empezar con uno básico, que funcione de principio a fin, y luego empezarr a enredar con las diferentes acciones.

Introduzcamos unos términos:

  • Paso: cada una de las secuencias que compone un workflow, puede haber varias, y podemos elegir que se ejecuten en serie (una detrás de otra) o en paralelo (todas a la vez, por ejemplo, si queremos esperar a que varias personas aprueben un documento, y tenemos que comprobar si hay quorum cada vez que alguen lo aprueba.
  • Condición: Cada paso, parte de una condición opcional, que pregunta si el paso se realiza o no, en función de una pregunta
  • Acciones: las tareas que se ejecutarán si la condición de un paso es cierta, pueden ser varias encadenadas
  • Variables de inicio: unas variables que el workflow pedirá al iniciarse. Pueden ser texto, fecha/hora, número o enumeraciones
  • Variables: otras que definimos en el procesamiento del workflow para nuestras necesidades

Objetivo

Queremos automatizar mínimamente la gestión de citas de un servicio. En una lista de SharePoint, tenemos las solicitudes de cita, que básicamente tienen nombre y email de contacto, además de unos campos de estado y control. A esta lista, asociaremos el workflow

Además, tenemos además un calendario en el que se apuntan las citas

  • Cada cita tiene una referencia que apunta a su solicitud (un campo Lookup de SharePoint)
  • Cada solicitud mantiene una referencia a la última cita propuesta

image

Nuestro workflow hará lo siguiente:

  • Pedirá la fecha/hora de la cita y la duración
  • Hará unas comprobaciones
  • Apuntará la cita en el calendario
  • Enviará un email personalizado con los datos de la cita
  • De la misma forma, podemos hacer otros para modificar o cancelar una cita

Evidentemente, esto no es una aplicación de gestión de calendario, pero nos puede quitar bastante trabajo rutinario. Veamos los pasos más importantes.

Inicio

Pedimos dos variables, la fecha/hora de la cita y su duración. La duración se pide como un campo enumerado, con opciones.

image

image

Comprobaciones iniciales

Unas comprobaciones básicas para ver si la fecha de cita es anterior a “Hoy”, en este caso:

  • Usamos la acción “Definir campo en el elemento actual” para rellenar en el campo Avisos (un campo de texto asociado a la solicitud) con el texto “Fecha cita incorrecta”
  • Detenemos el workflow y cambiamos su estado de terminación a “Fecha cita incorrecta”

image

Definiciones de variables

  • Usamos la acción “agregar hora a fecha” para calcular la fecha fin de la cita sumando la duración a la hora de inicio
  • Incrementamos en 1 el contador de citas del solicitante
  • Usamos la acción “generar cadena dinámica” para generar el título de la entrada en el calendario (solicitante+número de cita) y un campo nombreunicocalendario (solicitante+fechacreaciónsolicitud+numero de cita) que usaremos para vincular solicitudes y citas

image

Comprobar si la hora está libre

Este es uno de los puntos débiles de SPD, no podemos comprobar si un rango de tiempo en el calendario tiene citas. Lo único que haremos es ver si una cita empieza a la misma hora que la nuestra.

image

Usamos la condición “Comparar cualquier origen de datos” para buscar un elemento en la lista “calendario” cuya hora de inicio sea igual a la variable “Fecha Cita”. Si es igual, paramos el workflow con un error.

image

Crear entrada de calendario

Como todo ha ido bien, creamos la entrada en el calendario, definiendo todos los campos del calendario con datos que sacamos de la solicitud de cita. Como elemento importante, guardamos en una variable nueva el resultado de crear esta entrada de calendario. Esta variable contendrá el Id del item de calendario creado, que usaremos más adelante.

image

image

Actualizar estado de la solicitud

Ahora registramos en la solicitud que todo ha ido bien. Parar ello, cambiamos varios campos de la solicitud (estado, fecha de cita y número de cita (un contador que se incrementa en cada paso). Además, aprovechamos el campo Id del elemento de calendario creado para asignárselo al campo CitaRelacionada, que almacena un campo búsqueda sobre la lista de calendario.

image

Enviar email

Esto no tiene ningún misterio, SPD tiene una actividad que permite enviar emails personalizado. Sin embargo, esta actividad tiene una limitación, que no es posible cambiar el ‘Remitente’ del correo. Para solventar este problema, hemos usado una acción personalizada disponible en Codeplex, SPD custom workflow activities.

image

Eliminar una cita

Este workflow es muy similar al anterior. Usando la capacidad de búsqueda sobre el calendario, con el campo de referencia única que hemos creado, localizamos una entrada de calendario que tenga la referencia de la última cita. Si existe, la eliminamos, buscamos además la cita anterior, y asignamos el campo de cita relacionada al Id de esta entrada. Actualizamos el contador de citas en la solicitud y notidicamos los cambios por email.

Y esto es todo… espero que a alguien le sirva como idea para aprovechar estas capacidades y automatizar tareas rutinarias en la colaboración con documentos y elementos de Sharepoint.

26 de julio de 2008

Gmail siempre seguro (https)

Via Genbeta, me entero de una interesante novedad en Gmail. Hasta ahora, el acceso a gmail sólo encriptaba (https) el intercambio de contraseña, pero el resto del diálogo (toda la lectura del correo) iba en claro por la red, sin cifrar. Esto se podía cambiar forzando a mano el acceso a gmail con https://mail.google.com.

Sin embargo, ahora es posible usar siempre el acceso seguro al correo, algo totalmente recomendable.

Para ello, en la configuración de Gmail, en la ficha “General”, al final de la página, aparecerá una nueva opción que permite realizar el cambio.

image

6 de julio de 2008

Agua y verde

En Cantabria suele llover, y eso nos permite tener verdes de todos los colores:

IMG_0595 
IMG_1170

Por suerte, de cuando en cuando, las nubes se van, y tenemos cielos preciosos…

IMG_1180

Eso si, mejor aprovéchalos mientras duran (que puede ser poco)!

Weave: Firefox en la ‘nube’

Mozilla Labs acaba de publicar la versión 0.2 de su servicio Weave. La propuesta es interesante, almacenar en un servicio de red todos los datos del navegador (favoritos, cookies, tabs abiertas…) y permitir su sincronización remota desde varios ordenadores. Firefox multiplataforma only, claro.

image

Como se podía esperar de una versión 0.2, no funciona demasiado bien, he conseguido hacer una sincronización completa desde dos equipos, pero en general el servicio es todavía demasiado lento y da problemas. Mi recomendación es usarlo sólo para sincronizar los favoritos (bookmarks), que funciona razonablemente bien.

Se puede descargar desde aquí (recuerda hacer una copia de seguridad de todo tu perfil). Necesitaremos registrarnos (el asistente nos ayudará) y conseguir un usuario/contraseña en los servicios de Mozilla. Además, todos nuestros datos allí se almacenan cifrados, por lo que necesitaremos proporcionar una contraseña de cifrado adicional.

Estos este procedimiento se repetirá en cualquier ordenador que quieras vincular. Yo lo he probado entre dos Windows y un Mac y funciona.

image

Creo que es un servicio interesante, aunque un poco verde todavía. Puestos a pedir, sería bueno poder consultar online este perfil cuando estamos en un ordenador no habitual, en el que configurar Weave es inviable porque dejaría demasiados datos personales.

5 de julio de 2008

Workflows en SharePoint Designer

Creo que escribo mis posts empezando por el tejado… primero una nota de cómo conseguí replicar workflows, ahora cuento qué son los workflows y lo siguiente debería ser contar algo de SharePoint… A menudo uso el blog como recordatorio de cosas que aprendo, por lo que queda todo muy desorganizado. Bueno, seguro que en el remoto caso de que esto interese a alguien, Google será capaz de ponerlo en orden!

SharePoint es una herramienta de trabajo en grupo (y muchas otras cosas) que permite compartir listas. Una lista es un calendario, tareas, notas, documentos, o cualquier cosa que nos inventemos, sin más que añadir columnas a una lista, al estilo de una hoja de cálculo Excel. Las listas se pueden relacionar, de forma que se puede añadir una propiedad ‘cliente’ en nuestra lista de ofertas emitidas, en la que, aparte del estado en que está la oferta (remitido, rechazado, aceptado) podemos añadir el cliente al que se envió desde la lista de clientes.

Las listas pueden tener asociados Workflows, flujos de trabajo que ejecutan secuencias de pasos. Típicamente se usan en escenarios de revisión de información. Quiero aprobar una hoja de gastos, que tiene que ser revisada y aprobada por tres personas, una detrás de otra, cada una puede aprobar o rechazar, incluyendo comentarios, en un determinado tiempo. Si este tiempo pasa, avisa a no se quién, si alguien cambia la hoja de gastos, cancela la aprobación…

Hay varios tipos de workflows:

  • Los proporcionados por la herramienta, típicamente, aprobaciones sencillas de documentos
  • Los programados en Visual Studio, basados en Workflow Foundation
  • Los diseñados en SharePoint Designer, que ofrece una herramienta visual, sencilla pero a la vez potente, para diseñar flujos

Veamos lo que caracteríza a un workflow

  • Se asocia a una lista de sharepoint (y sólo a una, para clonarlo, ver post anterior)
  • Se puede elegir arrancarlo manualmente, o automáticamente, cuando se crea o modifica un elemento
  • Tiene unas variables de inicio, son una serie de campos que se nos pedirán al arrancarlo
  • Además, se pueden definir variables, para ir haciendo ‘cuentas’ en nuestro workflow. El resultado de una búsqueda, una operación matemática o una con fechas pueden ser guardadas en una variable. Las hay numéricas, texto, fecha o elección.

image

Un workflow en si está formado por pasos. Cada paso tiene:

  • Condiciones: una o varias preguntas que indican si se ejecutarán las acciones
  • Acciones: una serie de operaciones, de entre una extensa lista

image

Los pasos normalmente se ejecutan ‘en serie’, se va pasando de uno a otro, comprobando las condiciones, y ejecutando las acciones en caso de que se cumplan. También se pueden ejecutar partes ‘en paralelo’, es decir, varios pasos se ejecutan simultánemente, por ejemplo, para esperar a varias personas en una aprobación de documento por ‘quorum’ (si más de la mitad de los revisores dan el visto bueno, adelante).

Las condiciones disponibles aparecen abajo, sirven para comprobar campos, fechas de modificación, valores de variables…

image

Las acciones predeerminadas (y otras instaladas de SPD Custom Workflow Activities) están en la siguente imagen. Permiten enviar correos electrónicos, crear, borrar o modificar elementos, esperar durante un tiempo, esperar a que un elemento cambie, pedir información a otro usuario (se le asignará una tarea en la que tiene que rellenar información, que cuando se completa, reactiva el workflow), construir una cadena a partir de datos o variables…

image

En el siguiente artículo, intentaré usar todo esto para una aplicación “real”.

2 de julio de 2008

SPD: copiando workflows entre listas o sitios

SharePoint Designer permite crear potentes workflows de forma muy sencilla, utilizando un asistente visual. Con ellos, se automatizan tareas en un sitio de colaboración SharePoint, en cuanto pueda, publicaré un ejemplo.

Una de sus principales limitaciones es que el workflow creado queda asignado a la lista base para la que se crea, y esto no se puede cambiar posteriormente, lo que obliga a crear desde cero el workflow de nuevo.

Sin embargo, el propio SharePoint Designer nos puede ayudar a hacer más fácil esta tarea. Lógicamente, esto sólo tiene sentido si el workflow que queremos aprovechar es muy complejo, si no, puede que acabemos antes haciéndolo de nuevo.

Los workflows son ficheros agrupados en una carpeta (una por workflow), situados debajo de la carpeta Workflows del sitio que estamos modificando. Un fichero xoml con la definición del workflow, un .rules con las reglas de ejecución, un .xml con la configuración de asociación y un aspx con el formulario de arranque.

image

Dentro de estos ficheros, hay referencias a las listas a los que se asocia el workflow o que usa para crear datos en forma de GUIDs. Nos vendrá bien tener a mano el Stramit SharePoint Caml Viewer para conectarnos a los sitios y coger los GUIDs de las listas que nos interesen.

Copiar un workflow a un sitio nuevo

En este caso, el workflow se llamará igual en los sitios de origen y destino (si no, recurrir al caso de abajo). Estos serían los pasos a seguir:

  • Abrir dos SPD, uno en cada sitio
  • Arratrar la carpeta que contiene el workflow del sitio origen a la carpeta workflow del sitio de destino
  • Localizar con Stramit CAML Viewer los GUIDs de todas las listas a las que el workflow haga referencia, como poco, el de la lista al que está asignado y el de cualquier otra lista que use como consulta o referencia (por ejemplo, listas de tareas si estamos creándolas para comunicar con usuarios)
  • Seleccionar todos los ficheros del workflow, y usar la función Reemplazar para modificar todas las referencias de las listas afectadas. Asegurarse de que está activa la opción “Buscar en el código fuente”

image

  • Abrir y guardar de nuevo el workflow, comprobando antes si todas las referencias han sido actualizadas (de no ser así, los nombres de las listas aparecerían con su GUID)

Asignar el mismo workflow a otra lista

Este caso es un poco más lioso, ya que es necesario cambiar los nombres del workflow y de los ficheros. Esta es la forma que creo es más rápida:

  • En la nueva lista, crear un workflow vacio, sin pasos, con el nombre que queramos darle.
  • Reemplazar el contenido de los ficheros .aspx, .xoml y .rules con el contenido del fichero correspondiente del workflow original, teniendo cuidado de modificar las GUIDs de la lista destino a la que se asociará.
  • En el fichero .aspx, modificar el texto en el que se hace referencia al nombre del workflow, ya que aparecerá el nombre del original. Esta página se puede modificar en aspecto/contenido sin problemas, siempre que mantengamos los campos y el envío del formulario
  • El fichero .xml no se debería modificar (al menos, hasta donde yo he visto), salvo que el workflow tenga parámetros de inicio, en cuyo caso, es necesario reemplazar la sección <Initiation> </Initiation> con los datos del workflow origen
  • Abrir, comprobar y guardar el workflow para asegurarnos de que todo ha sido actualizado correctamente.

Espero que a alguien le sirva, a mi me ha ahorrado algo de tiempo al crear sitios con workflows a través de plantillas de sitio, que no incluyen los workflows.