Captura de Eventos en Sharepoint

Luego de instalar, configurar y rellenar documentos en Sharepoint, el administrador del portal asume tareas más complicadas como crear índices de búsqueda, optimizar seguridad y preformance, hacer backups, etc. Es un hombre feliz porque, sin mucho esfuerzo, ha logrado montar una solución de la que la mayoría de los usuarios hacen uso y, prácticamente, nadie se queja. Que maravillosa es la vida, piensa.


Cierto día, un usuario le consulta sobre como gestionar un sencillo workflow para la aprobación de documentos mediante el portal. Entonces, el administrador, busca en la documentación y descubre que lo único que puede hacer con una biblioteca de documentos es aprobar o no la publicación de un documento. Sin embargo, incursionando más en el tema, descubre que se puede anexar código a una librería de documentos para que gestione eventos tales como el agregado de un nuevo documento o la modificación de un documento ya existente. Bueno, lo primero que hace es investigar como funciona esta característica de Windows Sharepoint Services.


Se reúne con el usuario, quien le explica que se trata de un proceso de decisión muy sencillo: el documento solo puede tener tres estados: pendiente de publicar, publicado o rechazado. Cualquier usuario puede solicitar la aprobación de un documento, pero solo los editores (un grupo de usuarios en Sharepoint) pueden autorizar o rechazar la publicación de dicho documento.


El administrador decide crear tres librerías de documentos: una por cada estado. Es así que, al final de la tarea, obtiene las librerías: ParaAprobar, Aprobados, Rechazados. Luego, otorga permisos a todos los usuarios en la librería de documentos ParaAprobar de manera que cualquier usuario pueda colocar su documento para que sea revisado por los editores. En la librería de Aprobados, solo otorga permisos de escritura a los editores, mientras que solo proporciona permisos de lectura para el resto de los usuarios. Por último concede permisos de lectura para los usuarios en la librería de documentos Rechazados. Para esta misma librería, concede permisos de escritura nuevamente a los editores ya que tendrán que tener permisos para agregar todos aquellos documentos que no aprobaron.


Luego, para seguir con sus pruebas, coloca un web part de cada librería de documentos en un área que ha creado para tal fin. Parece que la cosa pinta bien. El aspecto del área de trabajo quedó como se muestra en la siguiente imagen:



Al llegar a esa instancia, se encuentra con que tiene que crear un pequeño assembly (librería en .NET) para que gestione los eventos que se produzcan en la librería de documentos. Como no tiene idea acerca de cómo hacer esto, le envía un mail de consulta a su amigo programador quien le responde lo siguiente:


 


Hola Administrador,


 


Los pasos que tienes que realizar para crear el assembly en .NET son los siguientes:


 


a)      Primero, iniciando Visual Studio, crea un nuevo proyecto de tipo Class Library.


b)      Necesitarás agregar la referencia a la biblioteca de clases de sharepoint. Para ello, agrega una referencia al proyecto y busca en la carpeta: C:Program FilesCommon FilesMicrosoft Sharedweb server extensions60ISAPI donde encontrarás el archivo Microsoft.SharePoint.dll.


c)       Luego escribe el siguiente código:


 


using System;


using Microsoft.SharePoint;


 


namespace WorkFlowCore


{


       public class Engine : IListEventSink


       {


             public void OnEvent( SPListEvent listEvent )


             {


                    if( listEvent.Type == SPListEventType.Update)


                    {


                           SPWeb web = listEvent.Site.OpenWeb();


                           SPFile file = web.GetFile(listEvent.UrlAfter);


                           SPListItem eventItem = file.Item;


 


                           if( (string)eventItem[“Estado”] == “Aprobado” )


                           {


                                  // Documento aprobado


                                                                                                            file.MoveTo(“http://localhost/Workflow/Aprobado/” +


                           file.Name,false);


                           }


                           else


                           {


                                 // Documento desaprobado


                                                                                                            file.MoveTo(“http://localhost/Workflow/Rechazado/” +


file.Name,false);


                           }


                    }


             }


       }


}


 


d)      Una vez lo tienes deberás firmar el assembly. Esto lo puedes consultar en la ayuda de Visual Studio.


e)      Recuerda cambiar el número de versión a 1.0.0.0 dentro del archivo AssemblyInfo.cs


f)        Por último, necesitarás desplegar este ensamblado en el GAC porque Sharepoint lo leerá desde ahí. Utiliza la herramienta GACUtil para hacer esta tarea.


 


Saludos.


 


Tu amigo, Programador.


 


El administrador, muy contento por haber creado el assembly sin problemas, se predispone a habilitar la captura de eventos en Sharepoint, ya que ha descubierto que esta funcionalidad, por defecto, está deshabilitada. Solo tiene que seguir los siguientes pasos:



Desde la herramienta central de configuración de Sharepoint (que se encuentra dentro de las Herramientas Administrativas) realiza lo siguiente:



·         Accede a la opción Configure virtual server settings from the Virtual Server List page desde la página principal.


·         Luego selecciona el servidor virtual sobre el cual quiere activar la gestión de eventos.


·         Selecciona la opción Virtual server general settings del grupo de opciones de Virtual Server Management.


·         Busca al final de la página el agrupado Event Handlers y lo coloca en On.


Luego, necesita enlazar el ensamblado que creó anteriormente con la librería de documentos que producirá los eventos en los cuales está interesado en atrapar. Para ello, realiza los siguientes pasos:



·         Abre el explorador de Windows y navega hasta la carpeta C:WINDOWSassembly.


·         Busca la librería que registró anteriormente y toma nota de la Versión, su cultura y la clave pública que corresponden al assembly en cuestión. Algo similar a la siguiente imagen:




 


·         Con estos datos en mente, abre el navegador y accede al portal


·         Selecciona la librería de documentos ParaAprobar y, luego, la opción Modify settings and columns


·         Luego, selecciona la opción Change advanced settings


·         Solo le resta rellenar las cajas de texto con la información que ha recolectado en los pasos anteriores. En esta página, dentro de la sección Event Handler se solicita:


o        Assembly Name: que rellena con el siguiente texto:


WorkFlowCore,Version=1.0.0.0,Culture=Neutral,PublicKeyToken=9a1080f037b2abdd


o        Class Name: lo rellena con el nombre de la clase, es decir, WorkFlowCore.Engine


 


Ahora, lo que necesita es que cada documento tenga una propiedad que indique el estado en el cual se encuentra, es decir, si está pendiente de aprobar, está aprobado o rechazado. Para ello agrega la columna Estado a la biblioteca de documentos ParaAprobar. Los pasos detallados que administrador realiza son:


 


·         Selecciona la opción manage content desde el área en donde se encuentra la librería de documentos ParaAprobar.


·         Selecciona la librería ParaAprobar


·         Selecciona la opción Modify settings and columns


·         Selecciona la opción Add a new column


·         En column name ingresa: Estado


·         En The type of information in this column is: selecciona Choice


·         En Type each choice on a separate line ingresa Aprobado y luego Rechazado


·         Deja el resto de las opciones tal cual y presiona OK


El resultado se ve en la siguiente imagen:


 



Lo único que le resta es configurar la librería de documentos para que soporte aprobación de documentos. Para ello realiza las siguientes acciones.


 


·         Selecciona la opción Manage Content para poder acceder a la librería a configurar.


·         Luego selecciona la librería ParaAprobar


·         Una vez hecho esto selecciona la opción Modify settings and columns


·         Y, posteriormente, Change General Settings


·         En la sección Content Aproval verifica que la opción Require content approval for submitted items? está en Yes


 


Ahora ha llegado el momento de probar si su idea funciona. Para ello, agrega un nuevo documento a la librería de documentos por aprobar. Tal cual como se aprecia en la siguiente imagen:



Luego, para comprobar si el workflow funciona, accede como editor y aprueba el documento, como se muestra en la siguiente imagen:


Y, luego, al regresar al área en donde se muestran las tres librerías de documentos se puede observar que el documento ha sido movido a la biblioteca de documentos aprobados, tal como se aprecia en la siguiente imagen:



Y, luego, al regresar al área en donde se muestran las tres librerías de documentos se puede observar que el documento ha sido movido a la biblioteca de documentos aprobados, tal como se aprecia en la siguiente imagen:


 


 



Bueno, el Administrador se dice contento: tampoco ha sido tan complicado, ¿no?


 


 


 

2 comentarios en “Captura de Eventos en Sharepoint”

  1. se podría cambiar el ESTADO de varios documentos de una misma carpeta a la vez. Es decir, marcándolos y cambiándoles a todos el estado.

    Gracias.

Deja un comentario

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