SPChange 类
表示 SharePoint 对象的项目、 列表、 网站、 网站集或内容数据库的范围内或 Web 应用程序范围内的安全策略所做的更改。
继承层次结构
System.Object
Microsoft.SharePoint.SPChange
命名空间: Microsoft.SharePoint
程序集: Microsoft.SharePoint(位于 Microsoft.SharePoint.dll 中)
语法
声明
Public Class SPChange
用法
Dim instance As SPChange
public class SPChange
备注
由SPChange类的一个子类表示SharePoint Foundation更改日志中的每个条目。父SPChange类的属性包含有关的更改,包括的更改,类型由ChangeType属性 ; 表示的基本信息更改,如由Time属性 ; 表示的时间和由SiteId属性表示的进行更改其中的网站集的 ID。
SPChange的子类的属性包含特定于已更改的对象的类型信息。例如, SPChangeItem类对SPListItem对象代表发生的更改,因此ListId属性标识列表更改项目的位置。同样, SPChangeList类表示对列表的更改,并具有WebId属性标识网站位置的列表已更改。
更改日志不记录更改为所有的 SharePoint 对象仅对选择的对象类型。下表中,以及表示为其更改的SPChange子类中列出的更改日志中跟踪的对象类型。
子类 |
代表对更改 |
---|---|
SPAlert对象。 |
|
SPField对象。 |
|
位于列表以外且不具有对应项的SPFile对象。 |
|
位于列表以外且不具有对应项的SPFolder对象。 |
|
SPGroup对象。 |
|
SPListItem对象文件和可能与之关联的文件夹。 |
|
SPList对象。 |
|
SPPolicy对象。 |
|
SPSite对象。 |
|
SPUser对象。 |
|
SPView对象。 |
|
SPWeb对象。 |
使用SPList、 SPWeb、 SPSite或SPContentDatabase对象的GetChanges方法可返回SPChangeCollection对象在给定范围内发生的更改。然后可以枚举的集合,并分别检查其成员的每个。
更改对更改日志的查询返回的总数可能很大,具体取决于保留期设置日志和查询的范围。出于性能原因,更改返回成批的限定的大小。如果您希望所有更改而不是仅第一批,您的代码应在循环中调用GetChanges方法,直到它返回零的更改,以表明它已达到日志结尾的集合。您可以使用ChangeToken上次更改的第一个批次中得到的第二个批次,等等,直到您到达一个空集合。
此外,您可以SPChangeQuery对象传递给GetChanges方法。此对象包含可用于筛选按对象类型和更改类型的更改的属性。您还可以调整设置SPChangeQuery对象的FetchLimit属性返回在单个往返集的大小。
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
线程安全性
该类型的任何公共 静态 (已共享 在 Visual Basic 中) 成员都是线程安全的。不保证任何实例成员都是线程安全的。
另请参阅
引用
其他资源
继承层次结构
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