Visual Studio 2008 Beta2: Creando workflows para WSS 3.0 & MOSS!

Cómo ya sabéis, a finales de este mes tendremos disponible para descarga (suscriptores de MSDN) la nueva versión del entorno de desarrollo en plataforma Microsoft: Visual Studio 2008. A pesar de las ganas que tienen de descargárselo algunos de los habituales en Geeks.Ms, de momento nos tenemos que conformar con la Beta 2 de Visual Studio 2008. En este post voy a mostraros una de las mejoras (y que tuve la oportunidad de ver la semana pasada en el Tech-Ed de Barcelona de la mano de Ted Pattison, aunque la demo al final les cascó :PPP…eso si, vaya crack incluso de fiesta :))  que introduce Visual Studio 2008 en lo que a desarrollo en plataforma Sharepoint (WSS 3.0 & MOSS) se refiere. En concerto, en este post veremos lo fácil que resulta crear un workflow con Visual Studio 2008 y desplegarlo en un sitio de WSS 3.0 (casi con unos pocos clicks nos vale). Empecemos.

Creación del proyecto de workflow

Aunque este paso es obvio para los habituales a desarrollar en el entorno de Visual Studio, merece la pena pararnos en él porque nos permite ver una de las novedades ya comentadas de la nueva versión del entorno: su carácter multitarget, es decir, podemos decidir sobre que versión de .NET Framework vamos a implementar nuestra solución. Cómo ya habréis leído, la característica de soporte multiframework estará disponible para las versiones 2.0, 3.0 y 3.5 de .NET Framework.

Post_Workflow_VS_2008_1 

En este caso, nos interesa la versión 3.5 de .NET Framework. La seleccionamos, y claro al ser la versión más alta de .NET Framework, también es la que más plantillas tiene disponible. En nuestro caso dentro de los proyectos para lenguaje C # seleccionamos la sección Office y a continuación 2007. Aquí tendremos las distintas plantillas para crear elementos propios de la plataforma Microsoft Office: Add-Ins para la suite de Office y workflows para Sharepoint (de tipo secuencial o de máquina de estados). Seleccionamos al plantilla Sharepoint Sequential Workflow…hasta aquí todo es similar a lo que ya teníamos con Visual Studio 2005 y las plantillas para crear workflows en Sharepoint, pero es aquí dónde empieza lo bueno…

Post_Workflow_VS_2008_2

Las novedades empiezan nada más especificar el nombre de la solución y pulsar OK, pues se inicia un wizard de creación del workflow al estilo de lo que ya tenemos con Sharepoint Designer 2007 (SD 2007)…veamos unos pocos pasos de este wizard:

  • En primer lugar, nos encontraremos con una pantalla en la que se pide que especifiquemos el nombre del workflow (yo he puesto el mismo que a la solución) y el sitio de Sharepoint (de heco es un sitio de WSS 3.0 pues las pruebas están realizadas en una máquina virtual con WSS 3.0, Visual Studio 2005 y luego he instalado Visual Studio 2008 Beta2…y todo va bien, sólo se queja en cuanto a que necesita bastante memoria…) dónde vamos a desplegar el workflow…cool!
  • Al darle a Next, Visual Studio 2008 se conecta con el sitio de WSS 3.0 especificado (si lo hemos indicado bien) y en la siguiente pantalla nos permite especificar la forma de asociación del workflow (manual o automática), la lista o biblioteca del sitio al que vamos a asociar el workflow, la History List dónde ser irá registrando la información de ejecución del workflow y la Task List dónde se almacenarán las tareas en el caso de que nuestro workflow cree tareas.
  • En la siguiente pantalla se especifica la condición/es (no son excluyentes) de inicio del workflow: manual (por el usuairo), automáticamente al crearse un nuevo elemento en la lista/biblioteca, o bien cuando se actualice un elemento de la lista/biblioteca.
Post_Workflow_VS_2008_3 Post_Workflow_VS_2008_4 Post_Workflow_VS_2008_5

Hasta ahora todo muy interesante y es idéntico a los pasos que se siguen a la hora de crear un workflow desde SD 2007…aquí alguno se preguntará si hemos perdido la flexibilidad que nos da la creación de workflows en el entorno de Visual Studio, y la respuesta es que no. Basta con no marcar la opción Automatically associate workflow? y ya estaríamos en las mismas condiciones conocidas.

Creación del workflow

Una vez que finaliza el asistente para facilitar la creación del proyecto de workflow para WSS 3.0 & MOSS, aparece la superficie de diseño de workflows de Visual Studio 2008 y en el explorador de soluciones veremos que se han creado todos los elementos necesarios para diseñar el workflow (archivo workflow.cs) y para desplegarlo en WSS 3.0 & MOSS mediante una feature (archivos feature.xml  y workflow.xml). Estos archivos ya aparecían con las plantillas del SDK de WSS 3.0 & MOSS, pero aparte de definir el workflow  en sí, también teníamos que configurar adecuadamente los archivos feature.xml y workflow.xml siguiendo un proceso ciertamente laboriosos. Además, para desplegar el workflow en un sitio de sharepoint se creaba un archivo Install.bat en el que teníamos que especificar los comandos necesarios para desplegar físicamente la feature en el servidor, copiar los ensamblados en la GAC, desplegar la feature en sharepoint y activarla (mediante las correspondientes opciones del comando stsadm)…vamos, era una labor sencilla, pero que conllevaba seguir una serie de pasos de una manera ordenada. Sin embargo, con Visual Studio 2008 todo es mucho más sencillo ya que el asistente nos ha creado y configurado de manera adecuada:

  • El archivo feature.xml:

<?xml version=”1.0″ encoding=”utf-8″ ?>

 

<Feature  Id=”ab357e6f-0201-40d3-9187-29b620749ed2″

      Title=”WF_Secuencial_Visual_Studio2008 feature”

      Description=”My SharePoint Workflow Feature”

      Version=”12.0.0.0″

      Scope=”Site”

      ReceiverAssembly=”Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”

      ReceiverClass=”Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver”

      xmlns=”http://schemas.microsoft.com/sharepoint/”>

  <ElementManifests>

    <ElementManifest Location=”workflow.xml” />

  </ElementManifests>

  <Properties>

    <Property Key=”GloballyAvailable” Value=”true” />

 

    <!– Value for RegisterForms key indicates the path to the forms relative to feature file location –>

    <!– if you don’t have forms, use *.xsn –>

    <Property Key=”RegisterForms” Value=”*.xsn” />

  </Properties>

</Feature>

  • El archivo workflow.xml:

<?xml version=”1.0″ encoding=”utf-8″ ?>

 

<!– Customize the text in square brackets.

Remove brackets when filling in, e.g.

Name=”[NAME]” ==> Name=”MyWorkflow” –>

 

<Elements xmlns=”http://schemas.microsoft.com/sharepoint/”>

  <Workflow

     Name=”WF_Secuencial_Visual_Studio2008″

     Description=”My SharePoint Workflow”

     Id=”7a9325e2-2a2e-477f-b70a-324ac497c4a7″

     CodeBesideClass=”WF_Secuencial_Visual_Studio2008.Workflow1″

     CodeBesideAssembly=”WF_Secuencial_Visual_Studio2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ac5a949a105159bc”

     AssociationUrl=”_layouts/CstWrkflIP.aspx”>

 

    <Categories/>

    <MetaData>

      <!– Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have –>

      <!–<Association_FormURN>[URN FOR ASSOCIATION FORM]</Association_FormURN>

       <Instantiation_FormURN>[URN FOR INSTANTIATION FORM]</Instantiation_FormURN>

      <Task0_FormURN>[URN FOR TASK (type 0) FORM]</Task0_FormURN>

      <Task1_FormURN>[URN FOR TASK (type 1) FORM]</Task1_FormURN>–>

      <!– Modification forms: create a unique guid for each modification form –>

      <!–<Modification_[UNIQUE GUID]_FormURN>[URN FOR MODIFICATION FORM]</Modification_[UNIQUE GUID]_FormURN>

      <Modification_[UNIQUE GUID]_Name>[NAME OF MODIFICATION TO BE DISPLAYED AS A LINK ON WORKFLOW STATUS PAGE</Modification_[UNIQUE GUID]_Name>

      –>

      <StatusPageUrl>_layouts/WrkStat.aspx</StatusPageUrl>

    </MetaData>

  </Workflow>

</Elements>

  • No menos importante es el hecho de que se haya generado el correspondiente archivo de firma, de manera que también nos vamos a ahorar el paso de firmar el ensamblado.

Además, no aparece por ningún sitio un archivo Install.bat, sino que para desplegar el workflow en el sitio de Sharepoint que hemos especificado al principio del asistente basta con utilizar la opción Deploy Solution que como más adelante veremos aparece disponible en el menún Build del entorno de Visual Studio 2008. Siguiendo con la creación del workflow, las novedades no acaban aquí, sino que el diseño en sí (visualmente) del workflow para Sharepoint también incluye mejoras referidas a que la ToolBox por fin cuenta con el juego completo de actividades necesarias para diseñar e implementar el workflow:

Post_Workflow_VS_2008_6

Como se ve en la figura, tenemos las actividades agrupadas en tres categorías:

  • Actividades de WF versión 3.0, es decir, las ya conocidas para la versión que actualmente tenemos de WF dentro de .NET Framework 3.0.
  • Actividades para workflows de Sharepoint (alguno dirá por fin), y que hasta ahora no aparecían por defecto en la toolbox de creación de workflows para Sharepoint, lo que nos llevaba a ir a buscarlas en el directorio del servidor de Sharepoint ..12ISAPI (ensamblado microsoft.sharepoint.WorkflowActions.dll) y añadirla mediante la opción Choose Items de la ToolBox del workflow designer de Visual Studio.
  • Actividades de WF versión 3.5, que generalizan la comunicación de un workflow con aplicaciones externas para enviar / recibir datos de las mismas.

Una vez que hemos visto las principales novedades que tenemos para crear un workflow para Sharepoint, vamos a ponernos manos a la obra y crear un sencillo workflow. En este caso, el workflow creado simplemente va a crear una tarea cuando se cree un elmento en la lista que especificamos en el asistente (la tarea se creará en la lista de tareas que especificamos también en el asistente). Luego añadimos una actividad CreateTask a continuación de la actividad OnWorkflowActivated que es la actividad que por defecto añade el diseñador al workflow para Sharepoint y que marca el inicio de este (es obligatoria en workflows para Sharepoint ya que es una actividad  de tipo event driven que está configura para responder a los eventos que genera Sharepoint cuando se crea una nueva instancia del workflow en respuesta a que se haya creado o modificado un elemento de una lista o biblioteca de Sharepoint). Una vez que hemos añadido esta actividad, la configuramos de manera adecuada a través de la ventana de propiedades:

  • Especificamos el correlation token de la misma a través de la propiedad CorrelationToken, es decir, el canal por el que vamos a hacer que flujan los datos relativos a la tarea. Por ejemplo, especificamos taskToke (al especificar este valor, os pedirá que indiquéis el activity owner que en este caso es el propio workflow que estamos modelando: en el desplegable os saldrá workflow).
  • Especificamos la propiedad TaskID, para lo que nos serviremos de la ayuda que nos da Visual Studio para definir visualmente el binding de esta propiedad con una propiedad existente en el workflow o con una nueva que definamos. En nuestro caso definimos una field property (que luego el diseñador generará en el fichero code behind asociado al workflow) con nombre taskID.
  • Especificamos la propiead TaskProperties siguiendo el mismo esquema que para TaskID, creando en este caso una field property denominada taskProps que como luego veremos nos va a permitir acceder a propiedades de un ítem propio de la lista de tareas.
  • Finalmente, en la sección Handlers especificamos el método que se va invocar cuando se cree la tarea. Lo denominamos CrearTarea()
image Post_Workflow_VS2008_8

Finalmente, una vez que hemos diseñado de manera visual el workflow, sólo nos resta codificar el método CrearTarea(), compilar para comprobar que no hay errores y hacer el deploy de la solución:

        private void CrearTarea(object sender, EventArgs e)

        {

            this.taskID = Guid.NewGuid();

            this.taskProps.AssignedTo = “wssv3\Administrator”;

            this.taskProps.Title = “Tarea creada desde VS 2008”;

        }

Post_Workflow_VS2008_9

Probando el workflow

Bueno, hasta ahora todo ha ido como la seda. Lo siguiente que vamos a hacer es comprobar que el workflow se ha desplegado correctamente (está asociado a la lista, lo que implica que la feature correspondiente se ha instalado y activado en el servidor), y a continuación que funciona como se espera. Comprobar que el workflow está asociado a la lista especificada en el asistente (Announcements) es sencillo, para ellonos vamos a las settings de la lista y bajo la columna Permissions and Management (el sitio Sharepoint de purebas está en inglés) pulsamos sobre Workflow Settings…en la página que se abre veremos los workflows que están asociados a la lista…y ahí está el workflow creado desde Visual Studio 2008 Beta2. De momento todo pinta bien.

Post_Workflow_VS2008_10 Post_Workflow_VS2008_11

Bueno, pues sin más vamos a comprobar que el workflow funciona. Volvemos a la interfaz de la lista Announcements y creamos un nuevo elemento desde el menú New Item, al salvar el elemento seremos redirigidos al listado de anuncios y veremos que a la vista de la lista se le ha añadido una nueva columna con el nombre de la instancia del woorkflow. El valor de esta columna como sabemos indica el estado de ejecución del la instancia del workfow que en este caso tiene un valor In Progress pues en nuestro workflowhemos definido que se cree una tarea en la lista Tasks y hasta que esta tarea no se complete, el workflow no habrá acabado su labor. De hecho, si vamos a la lista Tasks comprobaremos que efectivamente se ha creado la tarea comentada. Si editamos dicha tarea y la completamos, al volver a la lista Announcements veremos que el estado de ejecución de la instancia del workflow ha cambiado a COmpleted como era de esperar.

Post_Workflow_VS2008_12 Post_Workflow_VS2008_13 image

Bueno, pues todo ha funcionado perfectamente. Cómo véis, empezar a crear workflows para Sharepoint con Visual STudio 2008 es bastante más sencillo que lo que conocíamos de Visual Studio 2005 y las plantillas de creación de workflows para Sharepoint. También se facilita el despliegue de la solución y ya no tenemos que preocuparnos por configurar los archivos feature.xml, workflow.xml o Install.bat. Espero que el post os haya resultado interesante.

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.

4 comentarios en “Visual Studio 2008 Beta2: Creando workflows para WSS 3.0 & MOSS!”

  1. Hola, gracias por el post, pero tengo una duda. Según el diagrama tal cual crea la “task” completa el workflow y no la marca “In Progress” como decís en el post.

    No deberíamos poner uno nodo “while” y hasta que el task no esté completado no “completar” el workflow.

    Espero haberme explicado, el ejemplo es muy útil pero me falla eso: crea siempre con estado “completado”

    Gracias

  2. Hola Pablo,
    Efectivamente, es como dices. El objetivo de este post era mostrar como Visual Studio 2008 facilita la creación y posterior despliegue de un workflow de SharePoint. De hecho, este workflow es bastante tonto y poco realista…crea la tarea y ya está.

    Un saludo

    JC’s

  3. HOLA, TENGO UN PROBLEMA QUE NO ME DEJA AVANZAR DE LA PRIMERA PANTALLA. cUANDO BUSCO NEW PROJECT-OFFICE-SHAREPOINT 2007 SEQUENTIAL…ME APARECE PRIMERO UN MENSAJE DE ALERTA QUE EN RESUMEN DICE QUE NO PUEDE ENCONTRAR ALGUNOS ARCHIVOS ESPECÍFICOS, PERO AVANZA, EL PROBLEMA ESTÁ EN EL SIGUIENTE PASO DONDE SE LE DEBE DAR EL NOMBRE DEL PROYECTO Y LA URL, DESPUES DE QUE LE LLENO LOS CAMPOS Y LE DOY NEXT ME SALE EL MSJ D ERROR DND ME DICE QUE SO TNGO INSTALADO EL SHAREPOINT SERVER.
    COSA QUE SI BIEN ES CIERTO NO LO TNGO INSTALADO EN LA MAQUINA FISICA LO ESTÁ EN UN SERVIDOR VIRTUAL QUE TENGO CONECTADO EN EL SERVER EXPLORER CON TODOS SUS PRIVILEGIOS.
    SIN EMBARGO NO DEJA CONTINUAR. ALGUIEN SABE COMO SOLUCIONARLO? GRACIAS!!

Deja un comentario

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