Archive for the ‘Alerts’ Category

Please note this is a post by Albert Meerscheidt in msdn blogs.  I am copying this as is just not to miss this wonderful post in future.

Problem: There are issues with particular field names like ItemName which will be truncated in an alert email at 70 characters. There can also be situations where you want to embed additional content in the email or change the layout and email appearance altogether.

Solution: Make use of the IAlertNotifyHandler interface to intercept the email and modify it.

We can create our own class that inherits from the IAlertNotifyHandler interface and uses theOnNotification method. This will allow you to intercept the outgoing alert emails and modify them. We can access most of the properties for the alert and with some xml parsing and SharePoint object model code, we can extract all the information we need to build up the email. We can then construct the HTML stub to display the email based on your requirements and send the email out using SharePoint’s SendMail functionality.


I have included the sample code below along with the steps to set up the scenario. I have formatted the output of my code to resemble the default alert template emails as close as possible, you can customize it further to suit your needs.

1      Create a class project that inhertits from the IAlertNotifyHandler interface. Include the Microsoft.SharePoint and Microsoft.SharePoint.Utilities namespaces in the project.

This is the code for the class:

public class Class1:IAlertNotifyHandler


#region IAlertNotifyHandler Members

public bool OnNotification(SPAlertHandlerParams ahp)




SPSite site = new SPSite(ahp.siteUrl+ahp.webUrl);

SPWeb web = site.OpenWeb();

SPList list=web.Lists[ahp.a.ListID];

SPListItem item = list.GetItemById(ahp.eventData[0].itemId) ;

string FullPath=HttpUtility.UrlPathEncode(ahp.siteUrl+”/”+ahp.webUrl+”/”+list.Title+”/”+item.Name);

string ListPath = HttpUtility.UrlPathEncode(ahp.siteUrl + “/” + ahp.webUrl + “/” + list.Title);

string webPath=HttpUtility.UrlPathEncode(ahp.siteUrl+”/”+ahp.webUrl);

string build = “”;

if (ahp.eventData[0].eventType==1)


else if(ahp.eventData[0].eventType==2)


else if(ahp.eventData[0].eventType==3)


build = “<style type=\”text/css\”>.style1 {              font-size: small; border: 1px solid #000000;”+

“background-color: #DEE7FE;}.style2 {               border: 1px solid #000000;}</style></head>”+

“<p><strong>”+ item.Name.ToString() +”</strong> has been “+eventType +”</p>”+

“<table style=\”width: 100%\” class=\”style2\”><tr><td style=\”width: 25%\” class=\”style1\”>”+

“<a href=”+ webPath +”/_layouts/mysubs.aspx>Modify my Settings</a></td>”+

“<td style=\”width: 25%\” class=\”style1\”> <a href=”+ FullPath +”>View “+item.Name+”</a></td>”+

“<td style=\”width: 25%\” class=\”style1\”><a href=” + ListPath + “>View ” + list.Title + “</a></td>” +

”        </tr></table>”;

string subject=list.Title.ToString() ;

SPUtility.SendEmail(web,true , false, ahp.headers[“to”].ToString(), subject,build);

return false;


catch (System.Exception ex)


return false;





2.            GAC the dll.

3.            Make a copy of the alertTemplates.xml file found at this location: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\XML. Always work with a copy of AlertTemplates.xml, not the original.

4.            Call this new file CustomAlertTemplates and save the file. Edit the file and search for the keyword properties:

Include these additional lines into the properties block:

<NotificationHandlerAssembly>AlertHandler, Version=, Culture=neutral, PublicKeyToken=d59ecf2a3bd66904</NotificationHandlerAssembly>



The entire stub should look like this now:




<NotificationHandlerAssembly>AlertHandler, Version=, Culture=neutral, PublicKeyToken=d59ecf2a3bd66904</NotificationHandlerAssembly>




Include this xml stub in each alert template section you want in the alert template file.

5.            Run this command from C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN:  stsadm -o updatealerttemplates -filename “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\XML\customalerttemplates.xml” -url <your sharepoint site url>

6.            Run this command:  stsadm -o setproperty -pn job-immediate-alerts -pv “every 1 minutes” so that you can see the log file come back in one minute. Be sure to set the time back after testing.

7.            Make sure you have SharePoint already configured for outgoing emails.

8.            Make sure that you have alerts for the document library turned on if you are testing with the document library.

9.            Run this command from the command prompt: iisreset

10.         Run this command from the command prompt: services.msc

11.         From the services window, restart the Windows SharePoint Services Timer


Actual Post Link :

Alerts – a mechanism provided at the browser level by the SharePoint which is available for the end user. There are some scenarios where the user will not be able to set an alert.

  • Users cannot create alerts for lists for which users can only read their own items.

Alerts – a simple notification mechanism supported by all the share point lists & Libraries. And one special thing is that we can set alerts for different views of the system. It acts only on the columns of that particular view. This can be done by selecting the appropriate view while setting the alert. That’s great!

One of the business user raised an issue that he is not able to set alerts for some of the views of the list.

If you see the screen shot above there are 7 different views created for the list.

If you notice here, the user was not able to select some views while setting the alerts. The dropdown shows only two views. Where the other views gone??

Digging more into it, I found out that, in the views that were not appearing in the alert dropdown, there was filtering done based on the workflow columns.

Conclusion : “Alerts will not work for the views if there is a filtering based on System Generated / Calculated columns