Метод SPSite.GetChanges (SPChangeQuery)

Возвращает коллекцию изменений из журнала изменений, отфильтрованные по указанному запросу.

Пространство имен:  Microsoft.SharePoint
Сборка:  Microsoft.SharePoint (в Microsoft.SharePoint.dll)

Синтаксис

'Декларация
Public Function GetChanges ( _
    query As SPChangeQuery _
) As SPChangeCollection
'Применение
Dim instance As SPSite
Dim query As SPChangeQuery
Dim returnValue As SPChangeCollection

returnValue = instance.GetChanges(query)
public SPChangeCollection GetChanges(
    SPChangeQuery query
)

Параметры

Возвращаемое значение

Тип: Microsoft.SharePoint.SPChangeCollection
Коллекция объектов SPChange , представляющих изменения. Максимальный размер коллекции можно настроить путем установки свойства FetchLimit объекта SPChangeQuery , который передается в параметр запроса.

Замечания

Этот метод используется для фильтрации изменения, когда вы заинтересованы только в изменения объектов, а не все объекты, или только в выбранные действия на конкретные объекты. Дополнительные сведения можно найти в документации по SPChangeQuery класса.

Примечание

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

Примеры

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

using System;
using Microsoft.SharePoint;

namespace Test
{
   class ConsoleApp
   {
      static void Main(string[] args)
      {
         using (SPSite siteCollection = new SPSite("http://localhost"))
         {
            using (SPWeb webSite = siteCollection.RootWeb)
            {
               // Construct a query.
               SPChangeQuery query = new SPChangeQuery(false,  // limit object types
                                                       false); // limit change types

               // object type 
               query.ContentType = true;

               // change types 
               query.Add = true;
               query.Delete = true;
               query.Update = true;

               long total = 0;
               while (true)
               {
                  SPChangeCollection changes = siteCollection.GetChanges(query);

                  total += changes.Count;

                  foreach (SPChangeContentType change in changes)
                  {
                     // Get the content type (if it still exists).
                     SPContentType contentType = 
                         webSite.AvailableContentTypes[change.Id];

                     // The change might have been to delete the content type.
                     string contentTypeName;
                     if (contentType == null)
                        contentTypeName = "Unknown";
                     else
                        contentTypeName = contentType.Name;

                     Console.WriteLine("\n{0} content type was changed on {1}.", 
                                       contentTypeName, change.Time.ToShortDateString());
                     Console.WriteLine("Type of change: {0}", change.ChangeType.ToString());
                  }

                  // Break out of loop if we have the last batch.
                  if (changes.Count < query.FetchLimit)
                     break;
                  // Otherwise, go get another batch.
                  query.ChangeTokenStart = changes.LastChangeToken;
               }

               Console.WriteLine("\nTotal changes = {0:#,#}", total);


            }
         }
         Console.Write("\nPress ENTER to continue...");
         Console.ReadLine();
      }
   }
}
Imports System
Imports Microsoft.SharePoint

Module ConsoleApp
   Sub Main()
      Using siteCollection As SPSite = New SPSite("http://localhost")
         Using webSite As SPWeb = siteCollection.RootWeb

            ' Construct a query.
            Dim query As New SPChangeQuery(False, False)

            ' object type
            query.ContentType = True

            ' change types 
            query.Add = True
            query.Delete = True
            query.Update = True

            Dim total As Long = 0
            While True
               Dim changes As SPChangeCollection = siteCollection.GetChanges(query)

               total += changes.Count

               For Each change As SPChangeContentType In changes

                  ' Get the content type (if it still exists).
                  Dim contentType As SPContentType = _
                      webSite.AvailableContentTypes(change.Id)

                  ' The change might have been to delete the content type.
                  Dim contentTypeName As String
                  If contentType Is Nothing Then
                     contentTypeName = "Unknown"
                  Else
                     contentTypeName = contentType.Name
                  End If

                  Console.WriteLine(vbCrLf + "{0} content type was changed on {1}.", _
                                    contentTypeName, change.Time.ToShortDateString())
                  Console.WriteLine("Type of change: {0}", change.ChangeType.ToString())

               Next change

               ' Break out of the loop when we fetch the last batch of changes.
               If changes.Count < query.FetchLimit Then
                  Exit While
               End If

               ' Go get another batch of changes starting where we left off.
               query.ChangeTokenStart = changes.LastChangeToken

            End While

            Console.WriteLine(vbCrLf + "Total changes = {0:#,#}", total)

         End Using
      End Using
      Console.Write(vbCrLf + "Press ENTER to continue...")
      Console.ReadLine()
   End Sub
End Module

См. также

Справочные материалы

SPSite класс

Элементы SPSite

Перегрузка GetChanges

Пространство имен Microsoft.SharePoint

SPChangeQuery

Другие ресурсы

Using the Change Log