HttpModule en Sharepoint 2007

El otro día nos encontramos frente a un requerimiento que nos solicito un cliente. El necesitaba listar los documentos más vistos de una colección de sitios y todos los sub sitios por debajo de dicha colección de sitio.
Sharepoint posee una característica llamada “Auditoria de la información” la cual una vez habilitada y configurara en el sitio correspondiente registra todos los eventos que se producen en toda la colección de sitios. Se puede registrar los ítem vistos, los ítem modificados, etc. En definitiva se auditan todos los eventos que se producen en nuestro portal Sharepoint 2007, próximamente vamos a estar compartiendo con Uds. un artículo al respecto, dado que dicha característica es muy útil.
Pero para este caso en particular nosotros tomamos la decisión de realizar un modulo que atrapara la URL del request y procesara si se trataba de un documento o de simplemente una página.
Este modulo implementa la interface IHttpModule de Asp.Net, nos permite registrarnos a eventos durante todo el proceso de solicitud que se está realizando en nuestro portal Sharepoint 2007.
Durante una solicitud (Request) a una página de nuestro portal durante todo el proceso del mismo se desencadenan varios eventos a los cuales nosotros nos podemos registrar. Estos eventos tienen un orden lo cual nos permite codificar algún comportamiento adicional en determinado momento. En la sección 1 vemos la lista de eventos proporcionada por la clase SPHttpApplication la cual usamos para registrarnos a los mismos. Cabe la pena destacar que dicha clase extiende de HttpApplication de Asp.Net e incorpora algunas propiedades y métodos adicionales, por mas información dirigirse a la pagina del
MSDN.

Sección 1

· AcquireRequestState
· AuthenticateRequest
· AuthorizeRequest
· BeginRequest
· Disposed
· EndRequest
· Error
· PostAcquireRequestState
· PostAuthenticateRequest
· PostAuthorizeRequest
· PostMapRequestHandler
· PostReleaseRequestState
· PostRequestHandlerExecute
· PostResolveRequestCache
· PostUpdateRequestCache
· PreRequestHandlerExecute
· PreSendRequestContent
· PreSendRequestHeaders
· ReleaseRequestState
· ResolveRequestCache
· UpdateRequestCache

Vale la pena destacar que si queremos acceder al modelo de objeto del portal en ejecución mediante la clase SPContext nos deberíamos registrar a cualquier evento después del evento “PostAuthenticateRequest” dado que recién después del mismo estamos autenticándoos y tendremos acceso al contexto de ejecución.
En la sección 2 vemos el código necesario para la creación de nuestro HttpModule utilizando Visual Studio 2005 y en el cual nos registramos a dos eventos “BeginRequest” y “PostRequestHandlerExecute”. En el primero no contamos con acceso al contexto de ejecución, si quisiéramos acceder a al sitio en ejecución obtendríamos un error indicando que el objeto no está listo, pero sí en cambio lo hacemos en el segundo evento, como el proceso de autorización se produjo no tendremos problema en acceder al sito en ejecución.

Sección 2

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using Microsoft.SharePoint;
using Microsoft.SharePoint.ApplicationRuntime;

namespace Siderys.HttpModuleBlog
{
public class HttpModuleSharepoint : IHttpModule
{
public void Init(HttpApplication app)
{
SPHttpApplication spApp = (SPHttpApplication)app;
spApp.BeginRequest += new EventHandler(BeginRequestHttpModuleBlog);
spApp.PreRequestHandlerExecute += new EventHandler(PreRequestHandlerExecuteHttpModuleBlog);
}

void BeginRequestHttpModuleBlog(object sender, EventArgs e)
{
HttpContext.Current.Response.Write(“HttModuleBlog
“);
}
public void PreRequestHandlerExecuteHttpModuleBlog(object sender, EventArgs e)
{
HttpContext.Current.Response.Write(SPContext.Current.Web.ToString());
}
public void Dispose()
{
}

}
}

Una vez tenemos programado nuestro HttpModule, lo que resta es registrarlo en el WebConfig del portal de Sharepoint, realizar un IISRESET para que el nuevo Assembly sea tenido en cuenta y realizar una petición al portal para que se ejecute nuestro HttpModule. En la sección 3 vemos el código necesario para agregar al Web.Config de nuestro portal Sharepoint.

Sección 3

<httpModules>
<clear />

. De más modulos
<add name=”HttpModuleBlog” type=”Siderys.HttpModuleBlog.HttpModuleSharepoint, Siderys.HttpModuleBlog, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4b47d67002a80c61″ />

</httpModules>

En la imagen 1 vemos como lo que nosotros codificamos en el en el HttpModule se muestra en la pagina solicitada. Es simplemente un ejemplo de lo que podemos realizar para solucionar algunos requerimientos.

Imagen 1

Fabián Imaz
Siderys Elite Software

Compartir
3 Comments
  1. Hello

    Thanks by the post BUT, this solution crash with open site with SharePoint designer

    Thanks

  2. Hello

    This solution crash when open site with SharePoint designer

    Thanks

  3. Hello

    This solution crash the site when open with SharePoint Designer

    Thanks