Share via


SPChange class

Representa uma alteração que foi feita para um objeto dentro do escopo de um item, lista, site, conjunto de sites ou banco de dados de conteúdo do SharePoint, ou para uma diretiva de segurança dentro do escopo de um aplicativo Web.

Inheritance hierarchy

System.Object
  Microsoft.SharePoint.SPChange
    

Namespace:  Microsoft.SharePoint
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)

Syntax

'Declaração
Public Class SPChange
'Uso
Dim instance As SPChange
public class SPChange

Comentários

Cada entrada no log de alteração de SharePoint Foundation é representada por uma subclasse da classe SPChange . As propriedades da classe pai SPChange contêm informações básicas sobre uma alteração, incluindo o tipo de alteração, conforme representado pela propriedade ChangeType ; a hora da alteração, conforme representado pela propriedade Time ; e a identificação do conjunto de sites onde a alteração ser feita, conforme representado pela propriedade SiteId .

As propriedades de subclasses da SPChange contêm informações específicas para o tipo de objeto que foi alterado. Por exemplo, a classe SPChangeItem representa uma alteração em um objeto SPListItem e, portanto, tem uma propriedade ListId que identifica a lista onde o item foi alterado. Da mesma forma, a classe SPChangeList representa uma alteração em uma lista e tem uma propriedade WebId que identifica o site em que a lista foi alterada.

O log de alterações não grava as alterações para todos os objetos do SharePoint, somente aos tipos de objeto selecionado. Os tipos de objeto que são rastreados no log de alteração são listados na tabela a seguir, juntamente com as subclasses SPChange que representam alterações a eles.

Subclasse

Representa as alterações

SPChangeAlert

objetos SPAlert .

SPChangeContentType

objetos SPContentType .

SPChangeField

objetos SPField .

SPChangeFile

objetos de SPFile que existem fora de uma lista e não tem itens correspondentes.

SPChangeFolder

objetos de SPFolder que existem fora de uma lista e não tem itens correspondentes.

SPChangeGroup

objetos SPGroup .

SPChangeItem

objetos SPListItem , arquivos e pastas que podem ser associadas com eles.

SPChangeList

objetos SPList .

SPChangeSecurityPolicy

objetos SPPolicy .

SPChangeSite

objetos SPSite .

SPChangeUser

objetos SPUser .

SPChangeView

objetos SPView .

SPChangeWeb

objetos SPWeb .

Use o método GetChanges do objeto SPList, SPWeb, SPSiteou SPContentDatabase para retornar um objeto SPChangeCollection com as alterações ocorridas durante um determinado escopo. Você pode enumerar a coleção e examinar cada um dos seus membros individualmente.

O número total de alterações retornados por uma consulta contra o log de alterações poderia ser muito grande, dependendo da período de retenção definido para o log e o escopo da consulta. Por motivos de desempenho, as alterações são retornadas em lotes do tamanho limitado. Se desejar que todas as alterações em vez de apenas o primeiro lote, seu código deve chamar o método GetChanges em um loop até que ele retorna uma coleção com zero alterações, significando que ele atingiu o final do log. Você pode usar o ChangeToken da última alteração do primeiro lote para obter o segundo lote, e assim por diante, até chegar uma coleção vazia.

Como alternativa, você pode passar um objeto SPChangeQuery para o método GetChanges . Este objeto tem propriedades que você pode usar para filtrar por tipo de objeto e alterar o tipo de alterações. Você também pode ajustar o tamanho da coleção retornada em um único circular pela definição da propriedade FetchLimit do objeto SPChangeQuery .

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

Examples

O exemplo a seguir recupera todas as entradas no log de alteração para um banco de dados de conteúdo e imprime informações sobre cada alteração no console.

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

Thread safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Ver também

Referência

SPChange members

Microsoft.SharePoint namespace

Outros recursos

Using the Change Log

Inheritance hierarchy

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