Custom alert handler Изменение стандартных оповещений

Чтобы создать обработчик оповещений, нам нужно создать глобальную сборку, содержащую класс, реализующий интерфейс IAlertNotifyHandler в сборке Microsoft.SharePoint . Интерфейс IAlertNotifyHandler содержит только один метод, а именно OnNotification , с помощью которого мы можем перехватить оповещение по электронной почте и изменить его.

Необходимые шаги: 

  • Создание и развертывание сборки обработчика уведомлений о предупреждениях
  • Создайте шаблон оповещения  

Создание и развертывание сборки обработчика уведомлений о предупреждениях

Чтобы создать обработчик уведомлений о предупреждениях, нам нужно создать общедоступную сборку. Вы можете использовать шаблон проекта библиотеки классов Visual Studio или шаблон проекта SharePoint. В этом примере я использую шаблон проекта SharePoint, чтобы избежать накладных расходов на подписание и развертывание. Давайте начнем.

Шаг 1.    Откройте Visual Studio и создайте новый проект. В новом окне проекта выберите «Пустой шаблон проекта SharePoint», назовите его «SampleAlertHandler» и нажмите «ОК». 

Шаг 2.    В следующем окне (мастер настройки SharePoint) укажите URL-адрес своего веб-сайта , выберите параметр «Развернуть как решение фермы» и нажмите кнопку «Готово».

Шаг 3.    Добавьте в проект SampleAlertHandler новый файл класса с именем «CustomAlertHandler». Теперь откройте «CustomAlertHandler.cs» и замените код следующим фрагментом.

using HtmlAgilityPack;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;

namespace Sogaz.CustomAlertHandler
{
    class CustomAlertHandler : IAlertNotifyHandler
    {
        public bool OnNotification(SPAlertHandlerParams ahp)
        {
            try
            {
                using (SPSite site = new SPSite(ahp.siteUrl + ahp.webUrl))
                {
                    using (SPWeb spWeb = site.OpenWeb())
                    {
                        SPAlert a = ahp.a;

                        HtmlDocument doc = new HtmlDocument();
                        doc.LoadHtml(ahp.body);
                        var imgs = doc.DocumentNode.SelectNodes("//img");

                        foreach (var img in imgs)
                        {
                            string orig = img.Attributes["src"].Value;

                            img.SetAttributeValue("src", GetBase64ImageString(orig));
                        }

                        ahp.body = doc.ToString();                        
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }


        private string GetBase64ImageString(string orig)
        {
            string response = null;

            WebClient wc = new WebClient();
            wc.Credentials = new NetworkCredential("00-0000.sharepoint", "1", "SOGAZ");
            byte[] b = wc.DownloadData(orig);
            response = string.Format("data:image/png;base64,{0}", Convert.ToBase64String(b));

            return response;
        }

        private void SendMessage(string to, string subject, string body)
        {
            SmtpClient sc = new SmtpClient("mail.sogaz.ru");
            MailMessage msg = new MailMessage();
            msg.IsBodyHtml = true;
            msg.From = new MailAddress("portal@sogaz.ru", "Портал СОГАЗ");

            msg.To.Add(to);

            msg.Subject = subject;
            msg.Body = body;
            //Отправляем
            sc.Send(msg);
        }
    }
}

В приведенном выше коде мы модифицируем шаблон оповещения внутри метода OnNotification, который вызывается перед отправкой оповещения. SPAlertHandlerParams ( ahp) содержит всю информацию об оповещении. Файл ahp.headers включает такие свойства электронной почты, как « От», «Кому», «Тема » и т. д., из которых мы получаем адрес получателя ( кому ). В этом примере мы используем заголовок списка (из которого срабатывает оповещение) в качестве темы. Для создания тела электронного письма мы используем свойство ahp.eventData[0].eventType ( SPEventType ), которое указывает тип произошедшего события оповещения. Наконец, мы отправляем электронное письмо, используя метод SendEmail класса SPUtility.  

Шаг 4.    Теперь наша сборка обработчика предупреждений готова к развертыванию. Перейдите в меню «Сборка» и нажмите «Развернуть решение». В случае успешного развертывания проверьте наличие нашей сборки SampleAlertHandler в GAC (C:\Windows\assembly).  

Примечание. Обратите внимание на  версию и токен открытого ключа , поскольку они необходимы нам при создании шаблона оповещения.

Создайте шаблон оповещения 

Шаблоны оповещений представляют собой XML-файлы, которые определяют содержимое и внешний вид оповещений по электронной почте (alerttemplates.xml) и SMS (alerttemplates_sms.xml) . Шаблоны оповещений расположены в папке «C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML».

В этом примере мы имеем дело только с шаблоном оповещения по электронной почте ( alerttemplates.xml ). Если вы откроете файл «alerttemplates.xml», вы увидите, что в нем определено 16 (v.2010) различных элементов AlertTemplate для разных типов списков. Атрибут Name AlertTemplate указывает тип шаблона.

Теперь мы можем создать шаблон оповещения для нашего обработчика оповещений.

Шаг 1.    Перейдите в папку 14 куста «TEMPLATE\XML», создайте копию файла alerttemplates.xml и назовите его «custom_alerttemplates.xml».

Примечание. Рекомендуется сохранять исходные шаблоны без изменений, поскольку любое будущее обновление SharePoint перезапишет ваши изменения.Шаг 2.    Откройте файл «custom_alerttemplates.xml» в Visual Studio или любом другом XML-редакторе и найдите элемент 

AlertTemplate , который определен для типа шаблона 

DocumentLibrary (поскольку в этом примере мы используем библиотеку документов для тестирования нашего обработчика уведомлений).

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

Шаг 3.    Найдите элемент Properties внутри тега AlertTemplate и добавьте к нему следующие два элемента.

<Properties>
    <NotificationHandlerAssembly>SampleAlertHandler, Version=1.0.0.0, 
         Culture=neutral, PublicKeyToken=a3902394782e8e4e</NotificationHandlerAssembly>
    <NotificationHandlerClassName>SampleAlertHandler.CustomAlertHandler</NotificationHandlerClassName> 
    .........
    .........
</Properties>

Примечание. PublicKeyToken должен быть таким же, как мы отметили ранее в GAC.

Шаг 4:    Теперь мы можем изменить шаблон нашего веб-сайта по умолчанию, открыть командное окно в папке 14 кустов «TEMPLATE\XML» и выполнить следующую команду.

sadm -o updatealerttemplates -filename "C:\Program Files\Common Files\
  Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML\custom_alerttemplates.xml" -url "your site url"

Шаг 5.    Перезапустите IIS, для этого запустите команду iisreset в командном окне. 

Шаг 6.    На последнем этапе нам необходимо перезапустить службу таймера SharePoint (поскольку она выполняет такие задачи, как отправка оповещений). Для этого запустите команду Services.msc в командном окне, которое откроет окно «Службы», где найдите «Службу таймера SharePoint», и перезапустите. 

Теперь настройка пользовательского обработчика оповещений завершена.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *