“The list of workflow actions on the server references an assembly that does not exist. Some actions will not be available. The assembly strong name is bla-bla-bla. Contact your server administrator for more information.”
Error encontrado a último minuto, cuando estaba preparando una conferencia que debía dar el lunes a primera hora (junto con Hadi Hariri, aunque él estaba hablando de cosas completamente diferentes). Mala cosa, ya tienes todo pensado y preparado y en el ultimo pedazo de código para rematar brillantemente la hora de conferencia, te sale SharePoint con algo por el estilo…
Empecemos por el principio. Todo el asunto se trataba de SharePoint y el Windows WorkFlow Foundation: juntando mundos que andan por caminos separados: SharePoint y la Fundación no tienen en principio nada que ver el uno con el otro, pero cuando se ponen a trabajar juntos se pueden hacer cosas realmente brillantes. Y hay dos formas para crear Flujos de Trabajo en SharePoint: SharePoint Designer o Visual Studio; otros dos mundos separados, que en principio no tienen nada que ver el uno con el otro (es más, hasta llegan a ser enemigos), pero que si se pueden conjugar de una u otra forma, nos pueden solucionar problemas peliagudos.
El problema que he estado viendo en varios proyectos los últimos tiempos es que los Flujos de Trabajo se están volviendo más y más complicados: las variables de entrada no hacen más que aumentar, los caminos a recorrer son cada vez más intrincados, las reglas de negocios menos y menos manejables. Por el otro lado, Flujos tienden a ser utilizados una sola vez, en una sola Lista o Librería (también como consecuencia de que cada vez son más especializados en realizar una tarea específica). Crear Flujos de Trabajo de este tipo es imposible de hacer con el SharePoint Designer, hay que usar Visual Studio, por lo tanto son bastante costosos de desarrollar (tiempo de desarrollador no es especialmente barato), y si hay que modificarlos de vez en cuando, el problema no hace más que aumentar, y nuestros clientes están cada vez menos contentos…
Con SharePoint Designer se pueden “ensamblar” Flujos de Trabajo de una forma realmente sencilla, y es muy fácil contarle a alguien que trabaje directamente con la instalación de SharePoint como hacerlo en muy poco tiempo. Pero el Designer no tiene ninguna capacidad para hacer cosas realmente interesantes. Como combinar los puntos fuertes de los dos (hacer lo que nos de la gana con VS, hacerlo fácilmente con SharePoint) para mitigar los puntos flacos de los dos (costos y conocimientos necesarios para usar VS, falta de posibilidades en Designer)? La respuesta es Actividades…
Actividades son esos pequeños bloques de funcionalidad que están en el Cuadro de Herramientas de Visual Studio y en las Acciones del Designer. Qué tal si dividimos el problema en bloques funcionales, creamos Actividades para ellos en Visual Studio y los instalamos en Designer de tal forma que nuestro cliente se “ensamble” sus Flujos por sí mismo? Combinamos mundos divergentes (el titulo de la conferencia) para solucionar un problema real y actual: bajar costos y aumentar flexibilidad. Un ejemplo que me he topado con frecuencia es en instalaciones de SharePoint en Universidades en donde hay un formulario para que nuevos estudiantes se inscriban: algunas facultades quieren que después de que el formulario se ha recibido, primero se haga una cita para conversar con el interesado, y luego se registra a la persona en el sistema. Otras facultades quieren registrar el interesado directamente para que no se les escape (las facultades de ingeniería por ejemplo… nadie quiere estudiar ingeniería, así que si a alguien le da por ahí, hay que agarrarlo inmediatamente) y luego hacer la cita. Como construir el Flujo detrás del formulario? De tal forma que pueda seguir los dos caminos dependiendo de variables de entrada? O crear dos Flujos, a los que hay que instalar, darles mantenimiento, etc? Porque no crear una Actividad “Formulario” (que se comunica con un formulario de InfoPath, por ejemplo), otra Actividad “Hacer Cita” (que mira en los calendarios de los entrevistadores, reserva tiempos en ellas, manda E-mails a todo el mundo) y una tercera Actividad “Registrar” (que crea un numero de registro, hace cosas en PeopleSoft, etc.), luego registramos las Actividades (creadas en Visual Studio) en SharePoint Designer y finalmente algún empleado de nuestro cliente se encarga de crear la Lista necesaria y ensamblar las Actividades en el orden indicado para crear el Flujo? Este es un ejemplo muy sencillo, pero al mismo tiempo muy real…
Bueno, de eso se trataba mi conferencia, y lo único que me faltaba al final era configurar a SharePoint Designer para que me mostrara una Actividad de ejemplo que ya tenía lista. Y allí me salió el error. Por eso de que no hay información de Microsoft al respecto (por alguna razón extraña ya ni me da rabia, estoy tan acostumbrado…), me he sacado un Profiler del bolsillo para ver qué era lo que pasaba cuando arrancaba a Designer y en el momento de intentar ver la Actividad. Pues bien, lo primero interesante que ocurre es que el Designer llama al método “FetchLegalWorkflowActions” (del que hay una página de información de Microsoft, http://msdn.microsoft.com/en-us/library/ms774779.aspx, que por supuesto no dice nada), pero que me indica que el Designer está usando WebServices para mirar en el archivo de configuración del sitio… hmmmm… todos los días se aprende algo nuevo… Luego se van recorriendo todos los ensamblados en la configuración y revisando si los encuentra en el GAC. Y si no encuentra alguno, sale el mensaje. El problema es que mi ensamblado estaba perfectamente firmado e instalado en el GAC, y lo peor de todo, que SharePoint lo encontraba sin problemas. Así que el proceso que realiza el Designer es muy sencillo, y todo estaba perfectamente configurado, pero el error me seguía saliendo y todo el asunto se atrancaba miserablemente…
Después de revisar todo una y otra y otra vez y ejecutar mil y un iisreset, estaba empezando a pensar en cambiar mi conferencia a algo así como “Posibles causas del embarazo de las gallinas verdes australianas”… así que me dio por cerrar a SharePoint Designer y reiniciarlo de nuevo… brillante, genial, fenomenal !!! Funciona!!!… Mi Actividad es visible y usable, y nada de errores… Muchas gracias Microsoft, me han proporcionado una de las horas más miserables de mi vida intentando encontrar un error inexistente, y todo gracias a que alguno de sus programadores no hizo su trabajo bien hecho, y gracias a que sus probadores no probaron el producto bien probado… Pero pude dar mi conferencia, y hasta me parece que a por lo menos una persona le ha gustado…
Gustavo – http://www.gavd.net/servers/
Escriba un Comentario que me haga reir…
Bueno, a mi no se me arreglo cerrando y abriendo el designer ni haciendo IIS reset ni nada…
gracias MS por varias horas miserables que todavia no se cuanto mas puedan durar.