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子类中列出的更改日志中跟踪的对象类型。

子类

代表对更改

SPChangeAlert

SPAlert对象。

SPChangeContentType

SPContentType对象。

SPChangeField

SPField对象。

SPChangeFile

位于列表以外且不具有对应项的SPFile对象。

SPChangeFolder

位于列表以外且不具有对应项的SPFolder对象。

SPChangeGroup

SPGroup对象。

SPChangeItem

SPListItem对象文件和可能与之关联的文件夹。

SPChangeList

SPList对象。

SPChangeSecurityPolicy

SPPolicy对象。

SPChangeSite

SPSite对象。

SPChangeUser

SPUser对象。

SPChangeView

SPView对象。

SPChangeWeb

SPWeb对象。

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

另请参阅

引用

SPChange 成员

Microsoft.SharePoint 命名空间

其他资源

Using the Change Log

继承层次结构

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