Как создать ежедневное сводное оповещение о любых изменениях на сайте SharePoint - PullRequest
5 голосов
/ 28 мая 2009

Недавно я получил требование, чтобы человек получал ежедневные сводные оповещения о любых изменениях на сайте 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. Необходимо настроить монитор какого-либо типа, чтобы проверять наличие новых списков или библиотек на сайте и автоматически настраивать оповещения для пользователя.

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

Ответы [ 3 ]

6 голосов
/ 11 июня 2009

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

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

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

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

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

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

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

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

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

Подведем итог:

  • включить аудит для рассматриваемого SPWeb
  • создать отчет с использованием SPAuditQuery и SPAuditEntryCollection для каждого SPWeb
  • создайте SPJobDefinition, который запускается каждую ночь, чтобы отправить отчет каждому владельцу SPWeb по электронной почте
2 голосов
/ 12 ноября 2009

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

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

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

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

На больших сайтах я видел реальную проверку производительности мусора!

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

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

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

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

НТН Андерс Раск

0 голосов
/ 13 марта 2012

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

...