В одном из проектов потребовалось на стороне клиента, обнулить значение поля выбора пользователя (PeopleEditor) но как оказалось это не так просто. Поковырявшись в разметке около 3х часов написал следующий код.
Привет всем, этим постом я начну серию по SharePoint (далее шарик), кому-то эти знания покажутся тривиальными, но мне пришлось потратить некоторое время, чтоб найти их и адаптировать по свои нужды. Итак, начнем. В шарике есть встроенная рассылка, когда приходят письма об определенных событиях прошедших на портале. Например, назначение задачи на пользователя или изменение статуса задачи. Можно конечно воспользоваться типами из пространства имен System.Net но в этом случае письма будут приходить не в стиле шарика. Задача 1 предположим у нас на узле шарика есть стандартный список замечаний названный “Замечания” и нужно отправлять оповещение пользователю, на которого назначена данная задача.
SPWeb web =newSPSite(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=newSPAlertTemplate{Name="SPAlertTemplateType.Tasks"};// шаблон сообщения
alert.List= web.Lists["Замечания"];// список на который вешается динамическое оповещение
alert.DynamicRecipient="AssignedTo";// поле, в котором указан пользователь получающий оповещение
alert.Status=SPAlertStatus.On;//включение отключение оповещения
alert.Update(false);//применяем все изменения которые внесли после создания оповещения
Задача 2 нужно отправить оповещение автору задачи, если задача перешла в статус «Выполнено» или «Отклонено»
var chose =newList<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= @""+""+""+""+
chose[j]+""+""+//новое значение в поле Status""+""+""+
chose[j]+""+""+// значение в поле Status до изменения""+""+"";
alertProblem.AlertFrequency=SPAlertFrequency.Immediate;
alertProblem.User=null;// оповещение системное, и владельца у него нет
alertProblem.AlertTemplate=newSPAlertTemplate{Name="SPAlertTemplateType.Tasks"};
alertProblem.List= web.Lists["Замечания"];
alert.DynamicRecipient=" Author";// поле, в котором указан пользователь получающий оповещение
alertProblem.Status=SPAlertStatus.On;
alertProblem.Update(false);}
Итогом всего этого будет рассылка писем в стиле SharePoint. Данный код привязать к списку можно консольным приложением или вставив, в какое либо событие. Я его вставил в событие создание web – узла.