Класс SPChangeCollection
Представляет коллекцию объектов, производных от класса SPChange .
Иерархия наследования
System.Object
Microsoft.SharePoint.Administration.SPAutoSerializingObject
Microsoft.SharePoint.SPBaseCollection
Microsoft.SharePoint.SPChangeCollection
Пространство имен: Microsoft.SharePoint
Сборка: Microsoft.SharePoint (в Microsoft.SharePoint.dll)
Синтаксис
'Декларация
Public NotInheritable Class SPChangeCollection _
Inherits SPBaseCollection
'Применение
Dim instance As SPChangeCollection
public sealed class SPChangeCollection : SPBaseCollection
Замечания
Возвращает объект SPChangeCollection с учетом изменений, произошедших в данной области используется метод GetChanges объекта SPList, SPWeb, SPSiteили SPContentDatabase . Затем можно перечислить коллекцию и индивидуально проверить каждый из его членов.
Каждый объект в SPChangeCollection, который возвращается методом GetChanges, является субклассом класса SPChange. Свойства родительского класса SPChange содержат базовые сведения об изменении, включая тип изменения, как он представлен в свойстве ChangeType; время изменения, представленное в свойстве Time; и идентификатор семейства сайтов, в котором было осуществлено изменение, как это представлено в свойстве SiteId. Свойства субклассов класса SPChange содержат сведения, специфичные для типа измененного объекта. Например, класс SPChangeItem представляет изменение объекта SPListItem, и поэтому имеет свойство ListId, которое идентифицирует список, в котором этот элемент изменен. Также класс SPChangeList представляет изменение списка и имеет свойство WebId, которое идентифицирует веб-сайт, где этот список был изменен.
Общее число изменений, возвращаемых запросом от журнала изменений может быть очень большим, удержание для журнала и области запроса. Для повышения производительности изменения возвращаются блоками ограниченного размера. Если требуется, чтобы все изменения, а не только первого пакета, код должен вызывать метод GetChanges в цикле, пока он возвращает коллекцию с нуля изменения, указывающий на то, что он достигнут конец журнала. ChangeToken из последнего изменения первого пакета можно использовать для получения второго пакета и так далее до получения пустой коллекции.
Кроме того можно передать объект SPChangeQuery для метода GetChanges . Этот объект имеет свойства, которые можно использовать для фильтрации по типу объекта и изменить тип изменения. Кроме того, можно отрегулировать размер коллекции, которая возвращается в ходе одного кругового пути, установив свойство FetchLimit объекта SPChangeQuery .
Дополнительные сведения о работе с журналом изменений Using the Change Logсм.
Примеры
Следующий пример является простым консольным приложением, которое запрашивает журнал изменений элементов при добавлении, обновлении или удалении из указанного списка. После получения изменений, приложение проверяет каждое изменение и вывод даты изменения, тип изменения, и имя элемента, который был изменен на консоль.
Imports System
Imports Microsoft.SharePoint
Module ConsoleApp
Sub Main()
Using siteCollection As SPSite = New SPSite("https://localhost")
Using webSite As SPWeb = siteCollection.OpenWeb()
' Get a list.
Dim list As SPList = webSite.Lists(0)
' Construct a query
Dim query As New SPChangeQuery(False, False)
' Specify the object type.
query.Item = True
' Specify change types.
query.Add = True
query.Delete = True
query.Update = True
Dim timeZone As SPTimeZone = webSite.RegionalSettings.TimeZone
Dim total As Integer = 0
' Loop until we reach the end of the log.
While True
Dim changes As SPChangeCollection = list.GetChanges(query)
total += changes.Count
' Print info about each change to the console.
For Each change As SPChangeItem In changes
' Get the item name.
Dim itemName As String = String.Empty
Dim item As SPListItem = Nothing
Try
item = list.GetItemByUniqueId(change.UniqueId)
itemName = item.Name
Catch ex As ArgumentException
itemName = "Unknown"
End Try
Console.WriteLine(vbCrLf + "Date: {0}", timeZone.UTCToLocalTime(change.Time).ToString())
Console.WriteLine("Change: {0}", change.ChangeType)
Console.WriteLine("Item: {0}", itemName)
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 of {0:#,#} changes to {1} list", total, list.Title)
End Using
End Using
Console.Write(vbCrLf + "Press ENTER to continue...")
Console.ReadLine()
End Sub
End Module
Потокобезопасность
Любые общедоступные элементы static (Shared в Visual Basic) этого типа являются потокобезопасными. Не гарантируется, что любые элементы экземпляров потокобезопасны.