Класс SPChange
Представляет изменение, которое было сделано объект SharePoint в рамках элемента, список, веб-сайта, семейства веб-сайтов или базы данных контента или политики безопасности в области веб-приложения.
System.Object
Microsoft.SharePoint.SPChange
Пространство имен: Microsoft.SharePoint
Сборка: Microsoft.SharePoint (в Microsoft.SharePoint.dll)
'Декларация
Public Class SPChange
'Применение
Dim instance As SPChange
public class SPChange
Каждая запись в журнал изменений SharePoint Foundation представлены подкласс класса SPChange . Свойства класса SPChange родительского содержит основные сведения об изменении, включая тип изменения, как представлено свойством ChangeType ; время изменения, как представлено свойством Time ; и идентификатор семейства сайтов, где был изменен, как представлено свойством SiteId .
Свойства подклассов SPChange содержат сведения, относящиеся к типу измененного объекта. К примеру класс SPChangeItem представляет изменение объекта SPListItem и таким образом имеет свойство ListId , указывающее список, где элемент был изменен. Аналогично класс SPChangeList представляет изменение списка и имеет свойство WebId , идентифицирующий веб-сайт, где был изменен список.
Журнал изменений записываются изменения для всех объектов SharePoint, только для выбранных типов объектов. Типы объектов, которые отслеживаются в журнале изменений перечислены в следующей таблице, а также подклассов SPChange , отражающие изменения.
Подкласс |
Представляет изменения |
---|---|
объекты SPAlert . |
|
объекты SPContentType . |
|
объекты SPField . |
|
объекты SPFile , существующих вне списка и не имеющих соответствующих элементов. |
|
объекты SPFolder , существующих вне списка и не имеющих соответствующих элементов. |
|
объекты SPGroup . |
|
объекты SPListItem и файлы и папки, которые могут быть связаны с ними. |
|
объекты SPList . |
|
объекты SPPolicy . |
|
объекты SPSite . |
|
объекты SPUser . |
|
объекты SPView . |
|
объекты SPWeb . |
Используйте метод GetChanges объекта SPList, SPWeb, SPSiteили SPContentDatabase для возврата объекта SPChangeCollection с изменениями, которые происходили в заданной области действия. Затем можно перечисления коллекции и просмотрите все его элементы по отдельности.
Общее число изменений, возвращаемых запросом к журналу изменений может быть очень большим, в зависимости от хранения для журнала и область запроса. В целях повышения производительности изменения возвращаются в пакетах ограниченный размер. Если необходимо, чтобы все изменения, а не только первого пакета, код должен вызовите метод GetChanges в цикле пока не возвращает коллекцию с нуля изменения, указывающий на то, что он достигнут конец журнала. ChangeToken из последнее изменение первого пакета можно использовать для получения второго пакета и так далее, пока не получите пустую коллекцию.
Кроме того можно передать объект SPChangeQuery в метод GetChanges . Этот объект содержит свойства, которые можно использовать для фильтрации по типу объекта и изменить тип изменения. Можно также настроить размер семейства сайтов, который возвращается на одном обмена данными с помощью свойства объекта SPChangeQueryFetchLimit .
For more information about working with the change log, see Using the Change Log.
В следующем примере показано получение всех записей в журнал изменений для базы данных контента и выводит сведения о каждом изменении на консоль.
using System;
using Microsoft.SharePoint;
namespace Test
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.RootWeb)
{
// Construct a query.
SPChangeQuery query = new SPChangeQuery(true, true);
SPTimeZone timeZone = web.RegionalSettings.TimeZone;
long total = 0;
// Get changes in batches.
while (true)
{
// Fetch a set of changes.
SPChangeCollection changes = site.ContentDatabase.GetChanges(query);
total += changes.Count;
// Write info about each change to the console.
foreach (SPChange change in changes)
{
// Print the date of the change.
Console.WriteLine("\nDate: {0}",
timeZone.UTCToLocalTime(change.Time).ToString());
// Print the ID of the site where the change took place.
Console.WriteLine("Site ID: {0}", change.SiteId.ToString("B"));
// Print the type of object that was changed.
// GetType().Name returns SPChangeItem, SPChangeList, etc.
// Remove the "SPChange" part of the name.
string objType = change.GetType().Name.Replace("SPChange", null);
Console.WriteLine("Type of object: {0}", objType);
// Print the nature of the change.
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 Test
Sub Main()
Using site As SPSite = New SPSite("http://lswss5/sites/don")
Using web As SPWeb = site.RootWeb
' Construct a query.
Dim query As SPChangeQuery = New SPChangeQuery(True, True)
Dim timeZone As SPTimeZone = web.RegionalSettings.TimeZone
Dim total As Long = 0
' Get changes in batches.
While True
' Fetch a set of changes.
Dim changes As SPChangeCollection = site.ContentDatabase.GetChanges(query)
total += changes.Count
' Write info about each change to the console.
Dim change As SPChange
For Each change In changes
' Print the date of the change.
Console.WriteLine(vbCrLf + "Date: {0}", _
timeZone.UTCToLocalTime(change.Time).ToString())
' Print the ID of the site where the change took place.
Console.WriteLine("Site ID: {0}", change.SiteId.ToString("B"))
' Print the type of object that was changed.
' GetType().Name returns SPChangeItem, SPChangeList, etc.
' Remove the "SPChange" part of the name.
Dim objType As String = change.GetType().Name.Replace("SPChange", Nothing)
Console.WriteLine("Type of object: {0}", objType)
' Print the nature of the change.
Console.WriteLine("Type of change: {0}", change.ChangeType.ToString())
Next
' Break out of loop if we have the last batch
If changes.Count < query.FetchLimit Then
Exit While
End If
' Otherwise, go get another batch
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
Любые общедоступные элементы static (Shared в Visual Basic) этого типа являются потокобезопасными. Не гарантируется, что любые элементы экземпляров потокобезопасны.
Пространство имен Microsoft.SharePoint
System.Object
Microsoft.SharePoint.SPChange
Microsoft.SharePoint.SPChangeAlert
Microsoft.SharePoint.SPChangeContentType
Microsoft.SharePoint.SPChangeField
Microsoft.SharePoint.SPChangeFile
Microsoft.SharePoint.SPChangeFolder
Microsoft.SharePoint.SPChangeGroup
Microsoft.SharePoint.SPChangeItem
Microsoft.SharePoint.SPChangeList
Microsoft.SharePoint.SPChangeSecurityPolicy
Microsoft.SharePoint.SPChangeSite
Microsoft.SharePoint.SPChangeUser
Microsoft.SharePoint.SPChangeView
Microsoft.SharePoint.SPChangeWeb