SPChangeToken - Classe

Représente la position séquentielle unique d’une modification dans le journal des modifications.

Hiérarchie d’héritage

System.Object
  Microsoft.SharePoint.SPChangeToken

Espace de noms :  Microsoft.SharePoint
Assembly :  Microsoft.SharePoint (dans Microsoft.SharePoint.dll)

Syntaxe

'Déclaration
<SerializableAttribute> _
Public NotInheritable Class SPChangeToken
'Utilisation
Dim instance As SPChangeToken
[SerializableAttribute]
public sealed class SPChangeToken

Remarques

Chaque entrée dans le journal des modifications est représentée par un objet SPChange . Lorsqu'une modification est consignée, il est marqué avec un jeton d'identification qui est représenté par un objet SPChangeToken de la propriété ChangeToken de l'objet SPChange .

Vous pouvez obtenir le jeton de modification qui sera utilisé pour marquer la modification suivante qui est enregistrée pour la liste, site, collection de sites ou base de données de contenu que vous programmez par rapport à en accédant à la propriété CurrentChangeToken de la classe SPList, SPWeb, SPSiteou SPContentDatabase .

Plus souvent, vous souhaiterez utiliser un jeton de modification pour limiter l'étendue d'une requête sur le journal des modifications. Par exemple, vous pouvez récupérer les modifications partant d'un point particulier dans le journal des modifications en passant un objet SPChangeToken en tant qu'argument à la méthode GetChanges de le SPList, SPWeb, SPSiteou SPContentDatabase class. Le jeton de modification que vous passez représente l'emplacement séquentiel dans le journal où vous souhaitez que la requête doit commencer.

Vous pouvez également appeler la méthode GetChanges avec deux jetons de modification en tant qu'arguments, indiquant le que point de départ et d'une fin pour votre requête. De même, vous pouvez spécifier des points de début et fin en appelant une autre surcharge de GetChanges, celui-ci accepte une instance de la classe SPChangeQuery . Cette classe possède des propriétés que vous pouvez utiliser pour affiner une requête, y compris les deux propriétés qui contiennent des objets SPChangeToken , les propriétés ChangeTokenStart et ChangeTokenEnd .

Toutes les surcharges de la méthode GetChanges renvoient un objet SPChangeCollection . Le nombre de modifications qui sont retournés dans une collection unique étant limité pour des raisons de performances, vous devez appeler GetChanges dans une boucle jusqu'à ce que vous obtenez une collection vide, ce qui signifie qu'il n'y a aucune modification qui répondent à votre requête ou que vous avez atteint la fin du journal. Lorsque vous effectuez cette opération, utilisez le jeton qui est retourné par la propriété LastChangeToken du premier lot pour obtenir le deuxième lot d'instructions, et ainsi de suite jusqu'à ce que vous obtenez un lot avec sans changement. L'approche générale est illustrée par le code suivant, qui récupère toutes les modifications enregistrées pour une collection 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

Exemples

L'exemple suivant est une application console qui utilise la classe SPChangeToken pour renvoyer les modifications effectuées sur un site Web durant les 60 derniers jours.

Notes

Par défaut, le journal des modifications conserve les données pendant 60 jours. Vous pouvez configurer la période de rétention en définissant la propriété 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

Cohérence de thread

Tous les membres statique (Partagé dans Visual Basic)s publics de ce type sont thread-safe. Cela n’est pas garanti pour les membres d’instance.

Voir aussi

Référence

SPChangeToken - Membres

Microsoft.SharePoint - Espace de noms

Autres ressources

Using the Change Log