Share via


Clase SPChange

Representa un cambio realizado en un objeto de SharePoint dentro del ámbito de un elemento, lista, sitio Web, colección de sitios o base de datos de contenido, o a una directiva de seguridad dentro del ámbito de una aplicación Web.

Jerarquía de la herencia

System.Object
  Microsoft.SharePoint.SPChange
    

Espacio de nombres:  Microsoft.SharePoint
Ensamblado:  Microsoft.SharePoint (en Microsoft.SharePoint.dll)

Sintaxis

'Declaración
Public Class SPChange
'Uso
Dim instance As SPChange
public class SPChange

Comentarios

Cada entrada en el registro de cambios SharePoint Foundation está representada por una subclase de la clase SPChange . Las propiedades de la clase de SPChange primaria contienen información básica acerca de un cambio, incluido el tipo de cambio, tal como está representado por la propiedad ChangeType ; la hora de la modificación, tal como está representado por la propiedad Time ; y el identificador de la colección de sitios donde se realizó el cambio, tal como está representado por la propiedad SiteId .

Las propiedades de subclases de SPChange contienen información específica para el tipo de objeto que se ha cambiado. Por ejemplo, la clase SPChangeItem representa un cambio en un objeto SPListItem y por lo tanto, tiene una propiedad ListId que identifica la lista donde se cambió el elemento. De forma similar, la clase SPChangeList representa un cambio en una lista y tiene una propiedad WebId que identifica el sitio Web donde se ha cambiado la lista.

El registro de cambios no registra los cambios realizados en todos los objetos de SharePoint, sólo para tipos de objeto seleccionados. Los tipos de objeto que se realiza un seguimiento en el registro de cambios se enumeran en la siguiente tabla, junto con las subclases de SPChange que representan los cambios a ellos.

Subclase

Representa los cambios realizados en

SPChangeAlert

objetos de SPAlert .

SPChangeContentType

objetos de SPContentType .

SPChangeField

objetos de SPField .

SPChangeFile

objetos SPFile que existen fuera de una lista y no tienen elementos correspondientes.

SPChangeFolder

objetos SPFolder que existen fuera de una lista y no tienen elementos correspondientes.

SPChangeGroup

objetos de SPGroup .

SPChangeItem

objetos de SPListItem , archivos y carpetas que pueden estar asociadas con ellos.

SPChangeList

objetos de SPList .

SPChangeSecurityPolicy

objetos de SPPolicy .

SPChangeSite

objetos de SPSite .

SPChangeUser

objetos de SPUser .

SPChangeView

objetos de SPView .

SPChangeWeb

objetos de SPWeb .

Utilice el método GetChanges del objeto SPList, SPWeb, SPSiteo SPContentDatabase para devolver un objeto SPChangeCollection con los cambios que se han producido en un ámbito determinado. Puede enumerar la colección y examine cada uno de sus miembros individualmente.

El número total de cambios devueltos por una consulta en el registro de cambios podría ser muy grande, según el periodo de retención establecido para el registro y el ámbito de la consulta. Por motivos de rendimiento, los cambios se devuelven en lotes del tamaño limitado. Si desea que todos los cambios en lugar de sólo el primer lote, el código debe llamar al método de GetChanges en un bucle hasta que devuelve una colección con cero cambios, lo que significa que ha alcanzado el final del registro. Puede usar el ChangeToken desde el último cambio de la primera sección para obtener el segundo lote, y así sucesivamente hasta que obtenga una colección vacía.

Como alternativa, puede pasar un objeto SPChangeQuery para el método GetChanges . Este objeto tiene propiedades que pueden usar para filtrar los cambios por tipo de objeto y por tipo de cambio. También puede ajustar el tamaño de la colección que se devuelve en un único de ida y vuelta estableciendo la SPChangeQuery propiedad del objeto FetchLimit .

For more information about working with the change log, see Using the Change Log.

Ejemplos

En el siguiente ejemplo se recupera todas las entradas en el registro de cambios de una base de datos de contenido y se imprime información acerca de cada cambio en la consola.

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

Seguridad para subprocesos

Los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para subprocesos. No se garantiza que los miembros de instancias sean seguros para los subprocesos.

Vea también

Referencia

Miembros SPChange

Espacio de nombres Microsoft.SharePoint

Otros recursos

Using the Change Log

Jerarquía de la herencia

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