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
备注
使用SPList、 SPWeb、 SPSite或SPContentDatabase对象的GetChanges方法可返回SPChangeCollection对象在给定范围内发生的更改。然后可以枚举的集合,并分别检查其成员的每个。
通过 GetChanges 方法返回的 SPChangeCollection 中的每个对象是 SPChange 类的子类。父 SPChange 类的属性包含有关更改的基本信息,包括由 ChangeType 属性表示的更改类型;由 Time 属性表示的更改时间,以及由 SiteId 属性表示的发生更改的网站集的 ID。SPChange 的子类属性包含特定于更改对象类型的信息。例如,SPChangeItem 类表示对 SPListItem 对象的更改,因此具有 ListId 属性,该属性可标识更改的项所在的列表。同样,SPChangeList 类表示对某列表的更改,并且具有 WebId 属性,该属性可标识更改的列表所在的网站。
更改对更改日志的查询返回的总数可能很大,具体取决于保留期设置日志和查询的范围。出于性能原因,更改返回成批的限定的大小。如果您希望所有更改而不是仅第一批,您的代码应在循环中调用GetChanges方法,直到它返回零的更改,以表明它已达到日志结尾的集合。您可以使用ChangeToken上次更改的第一个批次中得到的第二个批次,等等,直到您到达一个空集合。
此外,您可以SPChangeQuery对象传递给GetChanges方法。此对象包含可用于筛选按对象类型和更改类型的更改的属性。您还可以调整设置SPChangeQuery对象的FetchLimit属性返回在单个往返集的大小。
For more information about working with the change log, see 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
线程安全性
该类型的任何公共 静态 (已共享 在 Visual Basic 中) 成员都是线程安全的。不保证任何实例成员都是线程安全的。