WSS 3.0 & MOSS: Simulando un campo calculado con un workflow!

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.
image image image

 

  • 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.
image image image

 

  • 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.
image image image

 

  • 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).
image image image

 

  • 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.
image image image

 

  • 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.
image image image

 

  • Tras comprobar que el elemento se ha añadido a la lista, visualizamos su detalle y vemos como el workflow ha cometido su papel y ha rellenado la columna especificada con los valores concatenados de las columnas Created By y Absence Type.
image image image

 

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:

image

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.

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

2 comentarios en “WSS 3.0 & MOSS: Simulando un campo calculado con un workflow!”

  1. Buenas preguntonmolesto,
    Pues sí, es aplicable tanto a WSS 3.0 como a MOSS…en cuanto a SharePoint Designer 2007, no está atado a MOSS, sino que es totalmente independiente tanto de MOSS como de WSS 3.0.

    Un saludo

    JC’s

  2. Buenas tovitas,
    Pues la primera alternativa obvia es olvidarte de SD 2007 y desarrollar un workflow, un event handler o incluso tu propia versión de columna calculada con Visual Studio.

    Un saludo

    JC’s

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *