Недавно встала задача создать оповещения для нескольких
пользователей. Казалась задача тривиальная, зайти в список и создать оповещения
для этих пользователей, но необходимо было создать определенные условия.
Необходимо что бы пользователям приходило оповещение за семь дней до истечения срока завершения
задачи. Такого условия в форме создания оповещения нет.
Создаем оповещение средствами браузера и смотрим с помощью PowerShell что у нас получается,
оказывается условия выполнения это знакомый нам Query.
Что бы решить свою задачу я добавил вычисляемое поле expire в список Задачи. В
качестве формулы использовал: [Срок]-7 , тип возвращаемых данных "Дата и время"
Теперь нам нужно отправить письмо, когда дата expire будет равна текущей дате и задача будет поставлена определенному пользователю.
Создаем необходимый Query (можно воспользоваться U2U CAML Query Builder, только будьте внимательны с вычисляемым полем, в нашем случае оно должно возвращать данные типа Дата и время)
<Query>
<And>
<Eq>
<FieldRef
Name="AssignedTo" />
<Value
Type="User">Иванова Инна Ивановка</Value>
</Eq>
<Eq>
<FieldRef
Name="expire"/>
<Value
Type="DateTime"><Today /></Value>
</Eq>
</And>
</Query>
Осталось записать требуемое значение фильтра в оповещение, но как к нему обратиться, ведь элементов у списка оповещения нет ID?
$web = get-spweb http://server/sites
$web.alerts [n]
Обновляем значение поля filter
$web = get-spweb http://server/sites
$web.alerts[1].filter = '<Query><And><Eq><FieldRef Name="AssignedTo" /> <Value Type="User"> Иванова Инна Ивановка</Value></Eq><Eq><FieldRef Name="expire"/><Value Type="DateTime"><Today /></Value></Eq></And></Query>'
$web.alerts[1].update()
В общем, не плохо, но что будет, когда оповещений будет много, и как найти нужное оповещение.
Можно еще воспользоваться SharePoint Manager 2010 и редактировать значение поля Filter с помощью него
.
Но, на мой взгляд, лучше, что бы исключить возможность
ошибки, лучше сразу создавать оповещения с нужными значениями поля Filter
$SPweb = Get-SPWeb http://server/sites
$SPlist = $SPweb.lists["Задачи"] # спискок к которому привязываем оповещения
$SPuser = $SPweb.EnsureUser('domain\user') # пользователь которому создаем оповещения
$SPnewAlert = $SPuser.Alerts.Add()
$SPnewAlert.Title = "Приближающиеся задачи" # название оповещения
$SPnewAlert.AlertType=[Microsoft.SharePoint.SPAlertType]::List
$SPnewAlert.List = $SPlist
$SPnewAlert.DeliveryChannels = [Microsoft.SharePoint.SPAlertDeliveryChannels]::Email
$SPnewAlert.EventType = [Microsoft.SharePoint.SPEventType]::All
$SPnewAlert.AlertFrequency = [Microsoft.SharePoint.SPAlertFrequency]::Daily
$SPnewAlert.Filter = '<Query><And><Eq><FieldRef Name="AssignedTo" /> <Value Type="User">Иванова Инна Ивановна</Value></Eq><Eq><FieldRef Name="expire"/><Value Type="DateTime"><Today /></Value></Eq></And></Query>'
$SPnewAlert.Update()
$SPweb.Dispose()
Надеюсь моя статья будет Вам полезна.
Комментариев нет:
Отправить комментарий