IAlertNotifyHandler를 통해 Alert Email을 정의하는 방법

11571 단어 handler
문제 설명
==========
사용자 정의 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=\"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)    

            {

                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. SharePoint Server의 GAC에 dll을 배치합니다.
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 이메일의 출력만 수정했습니다.부근의 이 문장은 당신이 수정한 alert의 유형을 가리킨다.

필요에 따라 수정하고 싶은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
 
9. alert 이메일 수정 결과를 더 빨리 보기 위해 아래 명령을 실행합니다.주의해라, 성공한 후에 고쳐야 한다.
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 이메일이 구성되어 있는지 확인합니다.
11. 문서 라이브러리에 알림을 열었는지 확인하세요.
12. IISRESET
13. Windows SharePoint Services Timer 서비스를 다시 시작합니다.
 
문제 해결.문장의 코드는 이미 작가의 테스트를 통과했다.
 
그리고 여기에 관련 문제를 하나 기록한다
=============
이 명령을 실행한 후에 전체 서버 내의 모든 웹 응용 프로그램은 이 명령의 영향을 받는다. 즉, 웹 응용 프로그램의 이메일 alert가 바뀌면 장내의 모든 사이트의alert 이메일 템플릿이 모두 변한다.
내가 분명히 URL을 지정했잖아.허허, 이 문제는 마이크로소프트만이 왜 이러는지 알지만 그것을 복구하지 않는 것은 아마도 너무 크게 바뀌었기 때문일 것이다.그러나 명령은 사이트의 URL을 만들어야 하기 때문에 사람을 현혹시키기 쉽다.
만약 당신이 흥미가 있다면, config DB, content DB와 프로필러 트랙을 잡을 수 있습니다. 명령의 수정이 최종적으로 contentdb가 아니라configdb에 반영되는 것을 볼 수 있습니다.
 
참고 자료:
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

좋은 웹페이지 즐겨찾기