Share via


SPChangeToken class

Representa a localização sequencial única de uma alteração contida no log de alterações.

Inheritance hierarchy

System.Object
  Microsoft.SharePoint.SPChangeToken

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

Syntax

'Declaração
<SerializableAttribute> _
Public NotInheritable Class SPChangeToken
'Uso
Dim instance As SPChangeToken
[SerializableAttribute]
public sealed class SPChangeToken

Comentários

Cada entrada no log de alteração é representada por um objeto SPChange . Quando uma alteração é registrada, ela é marcada com um símbolo de identificação, que é representado por um objeto SPChangeToken da propriedade ChangeToken do objeto SPChange .

Você pode obter o token de alteração que será usado para marcar a próxima alteração será registrada para lista, no site, no conjunto de sites ou no banco de dados de conteúdo que você está programando contra, acessando a propriedade CurrentChangeToken da classe SPList, SPWeb, SPSiteou SPContentDatabase .

Com mais freqüência, você desejará usar um token de alteração para limitar o escopo de uma consulta com o log de alterações. Por exemplo, você pode recuperar alterações começando em um ponto específico no log de alteração, passando um objeto SPChangeToken como um argumento para o método de GetChanges de SPList, SPWeb, SPSiteou SPContentDatabase classe. O token de alteração que você passar representa o local seqüencial no log de onde você deseja que sua consulta para começar.

Você também pode chamar o método GetChanges com dois tokens de alteração como argumentos, indicando o que ponto inicial e um final para a sua consulta. Da mesma forma, você pode especificar pontos inicial e final chamando outra sobrecarga de GetChanges, esse um aceitar uma instância da classe SPChangeQuery . Essa classe tem propriedades que você pode usar para aperfeiçoar uma consulta, incluindo duas propriedades que contêm objetos de SPChangeToken , a propriedade ChangeTokenStart e a propriedade de ChangeTokenEnd .

Todas as sobrecargas do método GetChanges retornam um objeto SPChangeCollection . O número de alterações que são retornadas em uma única coleção é limitado por motivos de desempenho, portanto, você deve chamar GetChanges em um loop até obter uma coleção vazia, indicando que você atingiu o final do log ou que não existem mais alterações que satisfazem a consulta. Quando você fizer isso, use o token é retornado pela propriedade LastChangeToken do primeiro lote para obter o segundo lote, e assim por diante, até que você receber um lote com zero alterações. A abordagem geral é ilustrada pelo código a seguir, que recupera todas as alterações registradas para um conjunto de sites.

// Get the first batch of changes.
SPChangeToken token = null;
SPChangeCollection changes = siteCollection.GetChanges(token);

while (changes.Count > 0)
{
   foreach (SPChange change in changes)
   {
      // Process each change.
   }

   // Go get another batch.
   token = changes.LastChangeToken;
   changes = siteCollection.GetChanges(token);
}
' Get the first batch of changes.
Dim token As SPChangeToken = Nothing
Dim changes As SPChangeCollection = siteCollection.GetChanges(token)

While changes.Count > 0
   Dim change As SPChange
   For Each change in changes
      ' Process the change.
   Next change

   ' Go get another batch.
   token = changes.LastChangeToken
   changes = siteCollection.GetChanges(token)
End While

Examples

O exemplo a seguir é um aplicativo de console que usa a classe SPChangeToken para retornar alterações que ocorreram em um site da Web nos últimos 60 dias.

Dica

Por padrão, o log de alterações retém dados por 60 dias. Você pode configurar o período de retenção, definindo a propriedade ChangeLogRetentionPeriod .

using System;
using Microsoft.SharePoint;

namespace Test
{
   class ConsoleApp
   {
      static void Main(string[] args)
      {
         using (SPSite siteCollection = new SPSite("https://localhost"))
         {
            using (SPWeb webSite = siteCollection.RootWeb)
            {
               // Display change times as local time.
               SPTimeZone timeZone = webSite.RegionalSettings.TimeZone;

               // Create a change token.
               DateTime startTime = DateTime.UtcNow.AddDays(-60);
               SPChangeToken startToken = new SPChangeToken(SPChangeCollection.CollectionScope.Web,
                                                            webSite.ID,
                                                            startTime);

               // Retrieve the first batch of changes.
               SPChangeCollection changes = webSite.GetChanges(startToken);

               while (changes.Count > 0)
               {
                  foreach (SPChange change in changes)
                  {
                     // Process the change.
                     Console.WriteLine("\nDate: {0}", timeZone.UTCToLocalTime(change.Time).ToString());
                     Console.WriteLine("Change subclass: {0}", change.GetType().ToString());
                     Console.WriteLine("Type of change: {0}", change.ChangeType.ToString());
                  }

                  // Get another batch.
                  startToken = changes.LastChangeToken;
                  changes = webSite.GetChanges(startToken);
               }
            }
         }
         Console.Write("\nPress ENTER to continue...");
         Console.ReadLine();
      }
   }
}
Imports System
Imports Microsoft.SharePoint

Module ConsoleApp
   Sub Main()
      Using siteCollection As SPSite = New SPSite("https://localhost")
         Using webSite As SPWeb = siteCollection.RootWeb

            ' Display change times as local time.
            Dim timeZone As SPTimeZone = webSite.RegionalSettings.TimeZone

            ' Create a change token.
            Dim startTime As DateTime = DateTime.UtcNow.AddDays(-60)
            Dim startToken As SPChangeToken = New SPChangeToken(SPChangeCollection.CollectionScope.Web, _
                                                                webSite.ID, _
                                                                startTime)

            ' Retrieve the first batch of changes.
            Dim changes As SPChangeCollection = webSite.GetChanges(startToken)

            While changes.Count > 0
               Dim change As SPChange
               For Each change In changes
                  ' Process the change.
                  Console.WriteLine(vbCrLf + "Date: {0}", timeZone.UTCToLocalTime(change.Time).ToString())
                  Console.WriteLine("Change subclass: {0}", change.GetType().ToString())
                  Console.WriteLine("Type of change: {0}", change.ChangeType.ToString())
               Next

               ' Get another batch.
               startToken = changes.LastChangeToken
               changes = webSite.GetChanges(startToken)
            End While

         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

SPChangeToken members

Microsoft.SharePoint namespace

Outros recursos

Using the Change Log