Monday, June 18, 2012

SharePoint 2010 Customizing default application pages


Customizing an SharePoint 2010 Application Page. 

In this example I'm customizing the /_layouts/MWS.aspx, the new meeting workspace page. 

These steps can be followed for any of Application Page.

1. Create the custom application page and deploy it into the _layouts folder.

2. Create an IHttpModule to redirect all requests that come to MWS.aspx and redirect them to customMWS.aspx:

class RedirectModule : IHttpModule { public void Dispose(){ } public void Init(HttpApplication context) { // add event handler context.PreRequestHandlerExecute += context_PreRequestHandlerExecute; } void context_PreRequestHandlerExecute(object sender, EventArgs e) { HttpApplication httpApp = sender as HttpApplication; HttpContext context = httpApp.Context; string httpUrl = context.Request.RawUrl.ToString(); //compare our URL and redirect it to custom one if (httpUrl.ToLower().Contains("/_layouts/customMWS.aspx")) { HttpContext.Current.Server.ClearError(); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Redirect(Regex.Replace(httpUrl, "/_layouts/newMWS.aspx", "/_layouts/customMWS.aspx", RegexOptions.IgnoreCase)); } } }

3. Add a new element in the web.config configuration/system.webServer/modules section to enable this IHttpModule. To do this create an web application feature to add this change in the web.config of the application. 


public class MWSRedirectModuleFeature : SPFeatureReceiver {
 SPWebConfigModification webConfigModification = new SPWebConfigModification
 {
  Name = "add[@name='MWSRedirectModule']",
  Path = "configuration/system.webServer/modules",
  Owner = "CustomOwner",
  Sequence = 100,
  Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode,
  Value = "Class Name, Assembly Full Name"/>"
 };

 // Add config changes
 public override void FeatureActivated(SPFeatureReceiverProperties properties)
 {
  SPWebApplication parent = (SPWebApplication)properties.Feature.Parent;

  if (parent == null)
   return;

  try
  {
   parent.WebConfigModifications.Add(webConfigModification);
   parent.Update(true);
   parent.WebService.ApplyWebConfigModifications();
  }
  catch (Exception exception)
  {
   // log error
  }
 }

 // Remove config changes
 public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
 {
  SPWebApplication parent = (SPWebApplication)properties.Feature.Parent;

  if (parent == null)
   return;

  try
  {
   parent.WebConfigModifications.Remove(webConfigModification);
   parent.Update(true);
   parent.WebService.ApplyWebConfigModifications();
  }
  catch (Exception exception)
  {
   // log error
  }
 }
}


Post a Comment