Seguro que más de alguno os habéis encontrado conque SharePoint presenta alguna limitación inesperada y para la que la respuesta rápida es: no está soportado. Este es el caso de una de las últimas consultas surgidas en uno de los proyectos de SharePoint en los que colabora el CIIN. Básicamente, la limitación en este caso está relacionada con el uso de columnas calculadas en SharePoint. Este tipo de columnas se definen a partir de usar columnas existentes en la lista o biblioteca de SharePoint dónde se están creando. Sin embargo, no se pueden usar todas las columnas de la lista, sino aquellas que encajan en lo que espera la definición de la columna calculada. En concreto, el problema conque nos encontramos es que no se pueden utilizar columnas de lookup y columnas ReadOnly para definir un campo calculado. Y claro, la pregunta que os haréis es que pinta un workflow en este escenario…pues realmente, lo que pinta es que es la respuesta para simular el comportamiento requerido con el menor esfuerzo posible: creando un workflow con SharePoint Designer 2007 (SD 2007). Empecemos.
Creando el workflow en SD 2007
Lo primero que vamos a hacer es abrir SD 2007 y crear un flujo de trabajo a través de File –> New –> Workflow. A continuación:
-
Especificamos el nombre del workflow, la lista o biblioteca a la que lo vamos a vincular (Calendar en micaso) y el tipo de inicio para el mismo. En mi caso, el workflow se inicia de forma automática cuando se crea o actualiza un elemento de la lista.
-
Pulsamos el botón Variables para definir las variables que necesitemos en el workflow.
-
Creamos una variable de tipo string denominada FillSummary.
-
Definimos una primera etapa para el workflow a la que he denominado FillSummary (luego le cambiaré el nombre a FillSummaryVariable).
-
En la sección Actions, elegimos la opción More Actions. En la ventana que se abre especificamos Build Dynamic String.
-
Pulsamos sobre el enlace dynamic string para construir la cadena dinámica.
-
En la ventana que se abre vamos concatenando las columnas y cadenas que necesitemos. En mi caso, he concatenado las columnas Created By que es de tipo ReadOnly y Absence Type que es de tipo Choice.
-
Una vez construida la cadena, pulsamos OK y a continuación pulsamos sobre el enlace Variable: variable.
-
Aquí elegimos la variable que creamos en pasos previos.
-
Lo siguiente que vamos a hacer es añadir una nueva etapa al workflow. En mi caso la he llamado FillSummaryColumn.
-
En la sección Actions, elegimos en este caso Set Field in Current Item.
-
En el desplegable de campos, elegimos el campo correspondiente (Absence Summary en mi caso).
-
Pulsamos el enlace value, y a continuación el botón con el simbolo fx.
-
En la ventana que se abre, elegimos Workflow Data como Source y seleccionamos nuestra variable dinámica.
-
Pulsamos OK y comprobamos que el workflow no tiene errores a través de la opción Check wokflow.
- A través del botón Finish, desplegamos el workflow.
- Nos vamos a la lista en la que hemos vinculado el workflow y creamos un nuevo elemento.
Una pega…
Una pega que he experimentado con esta técnica es que produce resultados inesperados cuando actualizamos un ítem de lista y estamos utilizando campos de lookup para rellenar la variable dinámica de tipo string. Básicamente, siempre da un error de conflicto en el Save…por lo que la solución no es todo lo perfecta que pudiera:
A pesar de esta pega, espero que el post os haya resultado interesante. También me gustaría dejaros una referencia en la que me he basado para llegar a esta solución: http://www.endusersharepoint.com/?p=709. Por supuesto, simular el comportamiento deseado de una forma más flexible se podría haber conseguido desarrollando la correspondiente solución con un event handler, o un workflow…pero ya dije que esta solución es la más rápida y simple para este escenario.