Any idea how to hide/remove those columns that are generated with each workflow on Alert Me emails?


If you do not need to interact with the column in the GUI, you could hide it. Here is how you can do it in PowerShell:

$web = Get-SPWeb http://site/web
$list = $web.Lists["ListName"]
$field = $list.Fields["FieldName"]
$field.Hidden = $true


As described in the answer on similar question asked on Technet Forum

Your requirement could be achieved by customizing alerttemplates.xml as Alert Me feature use alerttemplates.xml to render the alert mail.

Before following the action plan, please make sure you have read the series of articles: Alerts in Windows SharePoint Services

Based on my testing, both the old value and new value of the workflow field are empty. And my workaround is to hide the field which old value and new value are empty. This workaround would hide the workflow field as well as other fields meet the condition.

  • Before changing the alerttemplates.xml, your issue should be similar with the following snapshot:
    enter image description here

  • Save C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\XML\alerttemplates.xml as C:\alerttemplates_modified.xml.

  • Edit C:\alerttemplates_modified.xml in Visual Studio or other editor you like.

  • Navigate to the correct AlertTemplate node which matches your list template. See Predefined Alert Templates for a full list of alert templates. e.g.: for a Custom List, you should navigate to

  • Navigate to the Format > Immediate > Fields Element if you edit the immediate alert. See Alert Template Format for more information about template format.

  • Modify the Fields section, add a condition to remove the fields which old value and new value are empty. I highlighted the code for your information. See IfEqual Element (View) for more information.

        <Expr><GetVar Name="EventType"/></Expr>
        <Case Value="2">
            <Expr1><GetVar Name="OldValue#{Field}"/><GetVar Name="OldValue#{Field}"/></Expr1>
            <Expr2 />
 <td class="formlabel">]]></HTML>

                    <Expr1><GetVar Name="OldValue#{Field}"/></Expr1>
                    <Expr2><GetVar Name="NewValue#{Field}"/></Expr2>
                    <GetVar Name="DisplayName#{Field}" HTMLEncode="TRUE" />
                    <HTML><![CDATA[:</td><td class="formbody"> ]]></HTML>
                    <GetVar Name="NewValue#{Field}" />
                    <HTML><![CDATA[</td><td class="altvb">&nbsp;</td>]]></HTML>
                    <GetVar Name="DisplayName#{Field}" HTMLEncode="TRUE" />
                    <HTML><![CDATA[:</td><td class="formbody"><span class="edited">]]></HTML>
                    <Limit Len="255" AutoHyperLinkNoEncoding="TRUE" MoreText="..."><GetVar Name="OldValue#{Field}" /></Limit>
                    <HTML><![CDATA[</span> ]]></HTML><GetVar Name="NewValue#{Field}" />
                    <HTML><![CDATA[</td><td class="altvb"><span class="editedicon">$Resources:Alerts_event_edited;</span></td>]]></HTML>
 <td class="formlabel">]]></HTML>
            <GetVar Name="DisplayName#{Field}" HTMLEncode="TRUE" />
 <td class="formbody"> ]]></HTML>
            <GetVar Name="NewValue#{Field}" />         
 <td class="altvb">&nbsp;</td>
  • Save the changes to C:\alerttemplates_modified.xml.

  • Run stsadm -o updatealerttemplates -url -filename c:\alerttemplates_modified.xml see Updatealerttemplates: Stsadm operation (Office SharePoint Server) for more information.

  • Run iisreset command to force the changes to the template list to take effect immediately.

  • The result should be looks like the following snapshot:

For your information, you could also modify the Properties Element to hide custom fields, but in my tests, this is not work for the workflow field. See Alert Template Format for more information about Properties Element.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.