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

备注

使用SPListSPWebSPSiteSPContentDatabase对象的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 中) 成员都是线程安全的。不保证任何实例成员都是线程安全的。

另请参阅

引用

SPChangeCollection 成员

Microsoft.SharePoint 命名空间