zoukankan      html  css  js  c++  java
  • 如何通过IAlertNotifyHandler来自定义Alert Email

    问题描述

    ==========

    自定义Alert email, 不仅仅修改外观, 我们需要对内容的输出进行控制

    解决方案

    ==========

    使用IAlertNotifyHandler接口来制作邮件内容, 修改邮件内容

    步骤

    ==========

    1. 创建一个class library工程, 完整代码如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web;
    using System.IO;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Utilities;
    
    
    namespace AlertNotifyHandler
    {
        public class Class1 : IAlertNotifyHandler
        {
            #region IAlertNotifyHandler Members
            
            public bool OnNotification(SPAlertHandlerParams ahp)
            {
                try
                {
                    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 eventType = string.Empty;
    
    
                    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)
                        eventType = "Added";
                    else if (ahp.eventData[0].eventType == 2)
                        eventType = "Changed";
                    else if (ahp.eventData[0].eventType == 3)
                        eventType = "Deleted";
    
                    
                    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=\" 100%\" class=\"style2\"><tr><td style=\" 25%\" class=\"style1\">" +
                        "<a href=" + webPath + "/_layouts/mysubs.aspx>Modify my Settings</a></td>" +
                        "<td style=\" 25%\" class=\"style1\"> <a href=" + FullPath + ">View " + item.Name + "</a></td>" +
                        "<td style=\" 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)    
                {
                    FileStream fs = new FileStream(@"C:\temp\alertnotifyhandler.log", FileMode.Create);
                    StreamWriter sw = new StreamWriter(fs);
                    sw.Write(ex.ToString());
    
                    return false;
                }
            }
            #endregion
        }
    }
    

    2. 为工程添加签名(添加一个snk文件). Build.

    3. 部署dll到SharePoint Server的GAC中.

    4. 复制C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\XML\alertTemplates.xml文件. 永远不要修改原文件!

    5. 重命名复本为CustomAlertTemplates.xml, 保存.

    6. 编辑文件, 在文件中搜索关键字"Properties". 你会搜索到像下面这样的部分.

    <Properties>
        <ImmediateNotificationExcludedFields>ID;Author;Editor;...省略...;NumComments;</ImmediateNotificationExcludedFields>
        <DigestNotificationExcludedFields>ID;Author;Editor;...省略...;NumComments;</DigestNotificationExcludedFields>
    </Properties>

    修改这个部分为:

    <Properties>
        <ImmediateNotificationExcludedFields>ID;Author;Editor;...省略...;NumComments;</ImmediateNotificationExcludedFields>
        <DigestNotificationExcludedFields>ID;Author;Editor;...省略...;NumComments;</DigestNotificationExcludedFields>
              <NotificationHandlerAssembly>AlertNotifyHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dfeb24947a0729b6</NotificationHandlerAssembly>
              <NotificationHandlerClassName>AlertNotifyHandler.Class1</NotificationHandlerClassName>
              <NotificationHandlerProperties></NotificationHandlerProperties>
    </Properties>

    7. 注意, 现在你只修改了一种Alert email的输出. 附近的这个语句指出了你修改的alert的类型:

    <AlertTemplate Type="List"  Name="SPAlertTemplateType.DocumentLibrary">

    按照你的需要, 搜索你想要修改的alert类型, 并在相应的部分进行修改.

    8.运行这个命令:

    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>

    9. 为了更快的看到alert email修改的结果, 运行下面的这个命令. 注意, 成功之后要记得改回来.

    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.

    10. 确保SharePoint 服务器配置了outgoing email.

    11. 确保你已经在文档库上开启了alert.

    12. IISRESET

    13. 重启Windows SharePoint Services Timer 服务.

    问题解决. 文中代码已经通过了作者的测试.

    另外, 在这里记录一个相关问题

    =============

    运行了这个命令之后, 整个服务器场内所有的web application都会受到该命令的影响, 即一个web application的email alert改过之后, 就场内的所有站点的alert email的模板就全都跟着变了.

    你可能会问, 我明明指定了一个URL的呀. 呵呵, 这个问题只有微软才知道为什么会这样却不去修复它, 可能改动太大的缘故吧. 但是命令需要制定一个站点的URL还是有点容易迷惑人.

    如果你感兴趣的话, 你可以在config DB, content DB和上抓profiler trace, 你会看到你的命令的修改最终反映到的不是content db, 而是config db.

    参考资料:

    How To: Customizing alert emails using IAlertNotifyHandler

    http://blogs.msdn.com/sharepointdeveloperdocs/archive/2007/12/14/how-to-customizing-alert-emails-using-ialertnotificationhandler.aspx

    Customizing Alert Notifications and Alert Templates in Windows SharePoint Services 3.0

    http://blogs.msdn.com/sharepointdeveloperdocs/archive/2007/12/07/customizing-alert-notifications-and-alert-templates-in-windows-sharepoint-services-3-0.aspx

  • 相关阅读:
    Kafka 不停机修改某一个topic数据保存时间
    jvisualvm 工具使用
    jmap命令详解----查看JVM内存使用详情
    C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义
    JVM NativeMemoryTracking 分析堆外内存泄露
    java调用shell脚本并传递参数
    top -H -p查看某个进程内部线程占用情况分析: pstack显示每个进程的栈跟踪
    shell-awk 按列求和
    HTML&CSS基础-ps的基本操作
    HTML&CSS基础-清除浮动
  • 原文地址:https://www.cnblogs.com/awpatp/p/1741632.html
Copyright © 2011-2022 走看看