Skip to main content

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
  }
 }
}


Comments

Popular posts from this blog

How to create a custom Workflow Task / SharePoint Server Workflow Task content type using Visual Studio?

If you are designing an Workflow and you want to create custom  Workflow Task or SharePoint Server Workflow Task  using Visual Studio interface then you'll need to make these two content types visible. To make them visible I'm using the following  PowerShell   script: $site = Get - SPSite "http://site/url/here" $web = $site . RootWeb # Workflow Task $contentType = $web . ContentTypes [ "Workflow Task" ] $contentType . Group = "Custom Content Types" $contentType . Hidden = $FALSE $contentType . Update () # SharePoint Server Workflow Task $contentType = $web . ContentTypes [ "SharePoint Server Workflow Task" ] $contentType . Group = "Custom Content Types" $contentType . Hidden = $FALSE $contentType . Update () $site . Dispose () Then when you can add a new Content Type from Visual Studio and you will see the two Content Type in the list. To revert these changes run this PowerShell script: ...

PowerShell script to add work email to the list fields for the author

The Author (Created By) field is actually an lookup field to the hidden User Information list. If you need to add the work email of the Author (Created By field) user to a specific list it can be done by adding a dependent lookup field for the Author field: $site = get - spsite "site url here"; $list = $site . RootWeb . Lists [ "list name" ]; $createdByEmailGuid = $web . Fields . AddDependentLookup ( "Work e-mail" , [ Microsoft . SharePoint . SPBuiltInFieldId ]:: Author ); $createdByEmail = $web . Fields . GetFieldByInternalName ( $createdByEmailGuid ); $createdByEmail . Description = "Work e-mail address of the Author."; $createdByEmail . LookupField = $web . Fields [[ Microsoft . SharePoint . SPBuiltInFieldId ]:: EMail ]. InternalName ; $createdByEmail . Update (); $web . Update (); $list . Fields . Add ( $createdByEmail ); $list . Update (); If additional fields are needed the same method can be applied. Here is a li...

SharePoint Designer 2010 Reusable Workflows with Lookup Values

When you create a Reusable Workflow in SharePoint Designer 2010, that uses lookup values, and you try to deploy it in another environment, the lookup values will get broken. This is happening because the list you are reading the lookup values from has another Guid. Here is what I came up with to make this deployment easier: Deploy the reusable workflow in the new environment. Open the site you have deployed the workflow solution in SharePoint Designer Go to the related list (List and Libraries > Your Related List Name) and copy the new List ID value. Go to All Files > Workflows >   Your Workflow Name >  Your Workflow Name. xoml and open it in SharePoint Designer as XML ( right click on it > Open with >  SharePoint Designer (Open as XML) ) Find an  and you will find the old list guid in the ListId  attribute  Replace the old guid value with the new one Save it and close the window. The workflow should be pointi...