Как создать ежедневное сводное оповещение о любых изменениях на сайте SharePoint

Недавно я получил требование к человеку получать ежедневное сводное оповещение о любых изменениях на сайте SharePoint; у каждого сайта есть владелец, который отвечает за содержание их сайта.

В настоящее время у нас есть что-то работать, чтобы автоматически настраивать оповещения для каждого списка / библиотеки на сайте.

// Get the Lists on this Site
SPListCollection siteLists = currentSite.Lists;
foreach (SPList list in siteLists)
{
    if (!list.ToString().Equals("Master Page Gallery"))
    {
        if (list.ReadSecurity == 1) // user has read access to all items
        {
            // Create an Alert for this List
            Guid alertID = currentUser.Alerts.Add(list, SPEventType.All, SPAlertFrequency.Daily);

            // Set any additional properties
            SPAlert newAlert = currentUser.Alerts[alertID];
        }
    }
}

Это создает две проблемы:

  1. Пользователь создал много разных предупреждений. Идеально: только ОДНО электронное письмо с ежедневной сводкой.
  2. Необходимо настроить своего рода монитор для проверки наличия новых списков или библиотек на сайте и автоматической настройки предупреждений для пользователя.

В: Как создать ежедневное сводное оповещение обо всех изменениях на сайте?


person Kit Menke    schedule 28.05.2009    source источник


Ответы (3)


Я считаю, что решение, которое вы ищете, доступно через структуру аудита. Аудит в SP очень надежен, но, к сожалению, его легко перегрузить.

Аудит - это свойство, доступное в свойствах SPSite, SPWeb, SPList и SPItem.

Отрегулируйте определенные флаги аудита (используя свойства .Audit.AuditFlags), используя это свойство, в соответствии с вашими потребностями (особенности будут зависеть от того, как вы определяете «изменение», но доступно почти все, о чем вы можете подумать).

Подробная информация об объекте SPAudit доступна в MSDN.

После того, как вы определили, что и где вы хотите проводить аудит, вам нужно будет вернуть эту информацию своим пользователям.

По умолчанию SP устанавливает несколько хороших отчетов, доступных на уровне семейства сайтов ([URL-адрес семейства сайтов] / _ layouts / Reporting.aspx? Category = Auditing). Это может удовлетворить ваши потребности.

В вашем первоначальном решении упоминались оповещения пользователей по электронной почте. Учитывая, что большинство пользователей хотят централизовать свою информацию в электронной почте (хотя их личный сайт - отличное место для размещения ссылки на отчеты!), Вам придется немного поработать.

Вы можете получить необходимую аудиторскую информацию через объектную модель, используя объекты SPAuditQuery и SPAuditEntryCollection. Опять же, MSDN содержит некоторую информацию о том, как использовать эти объекты.

Я бы порекомендовал настроить настраиваемое определение SPJobDefinition, которое запускается в конце дня для отправки пользователям отчета аудита для их сайта по электронной почте. У Эндрю Коннелла есть отличное объяснение того, как настроить индивидуальное задание в своем блоге.

Подводя итог:

  • включить аудит для рассматриваемого SPWeb
  • создать отчет с помощью SPAuditQuery и SPAuditEntryCollection для каждого SPWeb
  • создать SPJobDefinition, который запускается каждую ночь для отправки отчета по электронной почте каждому владельцу SPWeb
person Mark    schedule 11.06.2009

Перед включением политики аудита на сайте необходимо учитывать добавленные накладные расходы на производительность.

Я бы порекомендовал здесь как можно меньше занимать площадь!

Под этим я подразумеваю, что если это только определенный тип контента или определенный список, из которого вы хотите получить эту информацию, обязательно активируйте информационную политику только для этих CT или списков!

Также сведите к минимуму ведение журнала. Например, если вас интересуют только просмотры, а не удаление или восстановление, записывайте только эти события!

На крупных сайтах я видел, что аудит действительно дрянный!

Также имейте в виду некоторые предостережения: даже если вы можете включить аудит для списков (как в библиотеках документов), многие события (например, просмотр событий) не регистрируются специально для элементов списка! Это нигде не описано (на самом деле я даже видел, как Тед Паттисон упоминал об аудите уровня элемента в статье MSDN), но у меня напрямую от CSS и команды разработчиков говорится, что аудит уровня элемента не реализован в SP2007 из-за проблем с производительностью. Вместо этого вы просто получаете событие списка в журнале, указывающее, что список был затронут.

Документы отслеживаются достаточно хорошо, но я видел проблемы с аудитом событий просмотра на странице публикации (которая в API считается документом, а не элементом списка) в зависимости от того, как и где был установлен аудит (например, если политики аудита были реализованы с унаследованными CT), так что это то, о чем следует знать.

[edit: вчера провел небольшое тестирование, и это еще хуже: на самом деле страницы публикации отслеживаются только, если вы установили политику аудита на уровне сайта! Если вы установите политику для списка или типа контента (или даже типа контента, который наследуется от типа контента с политикой), вы не получите никаких событий уровня SPAuditItemType.Document вообще. Установите его на сайте, и вы получите слишком много проверок! Например. представление будет запускать события просмотра x2, то же самое и с обновлениями, так что в конечном итоге вы получите слишком много журналов. Определенно похоже на ошибку, когда ничего не проверяется, когда политики помещаются в списки и CT ...]

Основное сообщение здесь: будьте осторожны с тем, что вы регистрируете, так как это повлияет на производительность вашего сайта. ТЕСТИРОВАНИЕ, что то, что вы ожидаете регистрировать, действительно регистрируется!

hth Андерс Раск

person Anders Rask    schedule 12.11.2009
comment
Спасибо за информацию! Я точно не решил, как лучше всего решить мою проблему. Казалось, что аудит решит мою проблему, но если нет аудита на уровне элементов, мне нужно будет найти другой метод. - person Kit Menke; 12.11.2009

Ну, это не тот случай, когда нет аудита на уровне элементов. Аудит на уровне элементов реализован, но вы должны включить его для конкретного элемента. Если элемент списка существует, вы можете получить его экземпляр и включить аудит так же, как вы делаете это со списками. Проблема в том, как включить его при создании ListItem. Может быть, рабочий процесс может помочь?

person Bartek Rozanski    schedule 13.03.2012
comment
Я не уверен, что понимаю ваш ответ. Аудит включается / выключается на уровне семейства сайтов. - person Kit Menke; 13.03.2012