Рассылка в SharePoint

Привет всем, этим постом я начну серию по SharePoint (далее шарик), кому-то эти знания покажутся тривиальными, но мне пришлось потратить некоторое время, чтоб найти их и адаптировать по свои нужды.

Итак, начнем. В шарике есть встроенная рассылка, когда приходят письма об определенных событиях прошедших на портале. Например, назначение задачи на пользователя или изменение статуса задачи. Можно конечно воспользоваться типами из пространства имен System.Net но в этом случае письма будут приходить не в стиле шарика.

Задача 1 предположим у нас на узле шарика есть стандартный список замечаний названный “Замечания” и нужно отправлять оповещение пользователю, на которого назначена данная задача.

SPWeb web = new SPSite(Url – вашего сайта где находится список “Замечания”).OpenWeb();
SPAlert alert = web.Alerts.Add(); //добавляем оповещение
alert.Title = "Вам назначена задача"; //тут добавляем “начало” темы письма
alert.AlertType = SPAlertType.List; // оповещение для списка (не для конкретного элемента)
alert.EventType = SPEventType.Add; // cобытия на которые срабатывает alert (можно Delete, Discussion, Modify, All и Add)
alert.AlertFrequency = SPAlertFrequency.Immediate; // отсылать оповещение сразу (можно ежденевно, сразу, раз в неделю)
alert.User = null; // оповещение системное, и владельца у него нет 
alert.AlertTemplate = new SPAlertTemplate { Name = "SPAlertTemplateType.Tasks" }; // шаблон сообщения 
alert.List = web.Lists["Замечания"]; // список на который вешается динамическое оповещение
alert.DynamicRecipient = "AssignedTo"; // поле, в котором указан пользователь получающий оповещение
alert.Status = SPAlertStatus.On; //включение отключение оповещения
alert.Update(false); //применяем все изменения которые внесли после создания оповещения

Подробнее о шаблонах писем тут msdn.microsoft.com/ru-ru/library/bb802738.aspx

Задача 2 нужно отправить оповещение автору задачи, если задача перешла в статус «Выполнено» или «Отклонено»

var chose = new List<string>() { "Выполнено", "Отклонено" }; 
for (int j = 0; j < chose.Count; j++)
{
SPAlert alertProblem = web.Alerts.Add();
alertProblem.Title = "Замечание";
alertProblem.AlertType = SPAlertType.List; // оповещение для списка (не для конкретного элемента)
alertProblem.EventType = SPEventType.Modify; // события на которые срабатывает alert (модификация Items)

Главное отличие этого оповещения от предыдущего это то, что нужно фильтровать события и конечно тут никуда не денешься от CAML запроса. Суть запроса фильтровать изменение в Item и если значение в поле “Status” изменилось и является одним из нужных нам («Выполнено», «Отклонено») то срабатывает оповещение. Вообще возможность применения CAML запросов делает достаточно гибким систему оповещений SharePoint.

alertProblem.Filter = @"<Query>" + "<And>" +
"<Eq>" +
"<Value type='string'>" +
chose[j] +
"</Value>" +
"<FieldRef Name='Status/New'/>" + //новое значение в поле Status
"</Eq>" +
"<Neq>" +
"<Value type='string'>" +
chose[j] +
"</Value>" +
"<FieldRef Name='Status/Old'/>" + // значение в поле Status до изменения
"</Neq>" +
"</And>" + "</Query>"; 
alertProblem.AlertFrequency = SPAlertFrequency.Immediate; 
alertProblem.User = null; // оповещение системное, и владельца у него нет

alertProblem.AlertTemplate = new SPAlertTemplate { Name = "SPAlertTemplateType.Tasks" };
alertProblem.List = web.Lists["Замечания"];
alert.DynamicRecipient = " Author"; // поле, в котором указан пользователь получающий оповещение

alertProblem.Status = SPAlertStatus.On;
alertProblem.Update(false);
}

Итогом всего этого будет рассылка писем в стиле SharePoint.

Данный код привязать к списку можно консольным приложением или вставив, в какое либо событие. Я его вставил в событие создание web – узла.

P.S. Это мой первый пост потому прошу сильно не пинать…

Рейтинг
( Пока оценок нет )
Загрузка ...