Tip Workflows para MOSS 2007 con VS 2008

Me he tenido que alejar un poco de mi blog debido a un proyecto en el que estado trabajando un Framework de Gestión Documental ISO para MOSS 2007 el cual ya lo pasé a producción y ahora tendré un poco más de tiempo hasta que me asignen a otro proyecto ;-), aunque ya llevo 1 año desarrollando aplicaciones para MOSS 2007 este proyecto en particular fue un reto debido a que ciertos requerimientos requerían implementar código complejo, por ejemplo el Framework es totalmente parametrizable ya que el sistema es capaz de soportar cualquier documento ya sea para ISO 9001, 14000, 22000 e incluso documentos no controlados (denominación para documentos que no forman parte del ningún sistema de gestión documental pero que se debe llevar un historial y debe estar habilitado para ejecutar acciones ISO), pero bueno cuando llegó el momento de la implementación del flujo de trabajo ningún flujo de MOSS 2007 ni con SharePoint Designer 2007 se podía implementar , se implementó un flujo utilizando la plantilla Sequential WorkFlow for SharePoint 2007 utilizando Visual Srudio 2008, ah y lo más importante es que la administración del ciclo de vida de desarrollo de este sistema se realizó con VISUAL STUDIO TEAM SYSTEM 2008 ;-), algunas consideraciones importantes que se debieron enfrentar en la implementación fueron:


  • El flujo en base a propiedades el documento debía ejecutar un flujo en serie o en paralelo.

  • Si los emisores eran los mismos que los aprobadores se debía aprobar automáticamente.

  • Los emisores, aprobadores y distribución del documento no eran usuarios de MOSS eran grupos de AD que reflejaban un rol, por ejemplo: el emisor podría ser: Asistente de RRHH, quien aprobaba era el Gerente de RRHH y un segundo aprobador Administrador de Documentación, y por último la distribución dependiendo de un campo del documento podría tomar de un campo llamado distribución del documento o leer los usuarios que tenían permisos sobre la carpeta que contenía el documento, de igual forma eran grupos del directorio activo.

  • Al final del flujo debía enviar notificación con el resultado de la aprobación a todos los involucrados: emisores, aprobadores y distribución.

  • La aprobación en serie era una aprobación en serie a nivel de grupos y en paralelo a nivel de usuarios, es decir, pensemos en un documento cuyos aprobadores son: GrupoA; Grupo B, al inicia el flujo en serie empezaría por el grupo a, y debería crear tareas de aprobación en paralelo para todos los usuarios que pertenecen al Grupo A, una vez que algún miembro de dicho grupo apruebe el flujo debería continuar al siguiente Grupo de aprobadores y hacer lo mismo que hizo para el Grupo anterior. Recordemos que los grupos son del AD.

  • La aprobación en paralelo consistía en ejecutar una aprobación en paralelo a nivel de usuarios, pero recordemos que los aprobadores son grupos de AD, por lo que el flujo debería crear tareas en paralelo los usuarios miembros de ambos grupos al mismo tiempo.

¿Interesantes requerimientos no?, pues a continuación algunos tips para trabajar con flujos de trabajo:


  • Las actividades básicas de aprobación de documentos se implementó en un proyecto de Activity Library de Windows WorkFlow Foundation. Recuerden en strong name para este tipo de proyectos ya que lo deben registrar en el GAC del servidor.

  • El proceso de aprobación como tal no estaba en el sequential workflow estaba en una librería del Framework el cual al invocar al constructor construía los objetos necesarios que se encontraban en la capa de entidades, objetos como por ejemplo: Grupo, Usuario, Documento.

  • Recuerden que cuando trabajen con workflows los objetos que declaren como globales ya sea para actividades personalizadas o para el propio flujo deben ser serializables, incluidos objetos de lógica del proceso. Esto no se encuentra documentado y pese a que las entidades eran serializables los objetos de proceso no lo eran esto ocasionó que el flujo no espere acción de los usuarios sobre las tareas debido a que los objetos de la capa de proceso no lo eran.

  • Para resolver el manejo de grupos, se utilizó utilitarios de la capa Core para conectarse al AD pasarle el grupo y que nos retorne sus miembros (usuarios que es con lo que trabaja MOSS 2007) con sus propiedades.

  • Para implementar tareas en paralelo utilicen el replicator configurado para que se ejecute en paralelo.

  • Para implementar tareas en serie pueden utilizar un replicator configurado en serie, o pueden utilizar una actividad while.

Espero que estos tips les sean de utilidad si algún momento deben implementar alguno de estos requerimientos.

Deja un comentario

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