Freigeben über


SPChangeToken-Konstruktor (String)

Initialisiert eine neue Instanz der SPChangeToken -Klasse, basierend auf ihrer serialisierten Form.

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

Syntax

'Declaration
Public Sub New ( _
    strChangeToken As String _
)
'Usage
Dim strChangeToken As String

Dim instance As New SPChangeToken(strChangeToken)
public SPChangeToken(
    string strChangeToken
)

Parameter

  • strChangeToken
    Typ: System.String

    Die serialisierte Form des Tokens ändern.

Ausnahmen

Ausnahme Bedingung
InvalidOperationException

Die strChangeToken enthält nicht die richtigen Token.

-ODER-

Die von der strChangeToken angegebene Version ist nicht 1.

Hinweise

Diese Überladung des Konstruktors eignet sich für rekonstruieren ein Änderungstoken, die serialisiert und klicken Sie dann auf einem Datenträger gespeichert wurden. Informationen zum Serialisieren einer SPChangeToken -Objekts finden Sie unter der ToString -Methode.

Das serialisierte Token enthält fünf Felder, getrennt durch Semikolons (;) in der folgenden Reihenfolge:

  • Die Versionsnummer als die Zeichenfolgendarstellung einer int.

  • Der Bereich, der von der Scope -Eigenschaft dargestellt wird.

  • Die Bereichs-ID, die von der ScopeId -Eigenschaft dargestellt wird.

  • Das Datum und Uhrzeit der Überarbeitung als die Zeichenfolgendarstellung eines DateTime -Objekts.

  • Die Anzahl der Änderung als die Zeichenfolgendarstellung einer long.

Beispiele

Beim folgenden Beispiel handelt es sich um eine Konsolenanwendung, die das Änderungsprotokoll nach Änderungen im Inhaltsdatenbankbereich abfragt.

Beim ersten die Anwendung ausgeführt wird, wird das Protokoll für alle Änderungen ab dem Anfang des Protokolls abgefragt werden. Diese Abfrage wird ausgeführt, indem Sie zuerst die ChangeTokenStart -Eigenschaft eines SPChangeQuery -Objekts auf einen null-Wert festlegen und anschließend das SPQuery -Objekt an die GetChanges -Methode übergeben. Nachdem alle Änderungen verarbeitet wurden, wird die Anwendung das letzte Änderungstoken vom letzten Batch von Änderungen durch Aufrufen der Methode ToString() serialisiert und das Ergebnis in einer Datei auf dem Datenträger gespeichert.

Bei nachfolgenden Ausführungen die Anwendung das gespeicherte Änderungstoken deserialisiert und wird verwendet, um die ChangeTokenStart -Eigenschaft für die Abfrage für das Änderungsprotokoll festgelegt. Wichtige Arbeit erfolgt in der GetStartingToken -Funktion, die ist, auf dem der SPChangeToken -Konstruktor aufgerufen wird.

using System;
using System.IO;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;

namespace Test
{
   class ConsoleApp
   {
      private const string DATA_FILE_PATH = "ChangeToken.dat";

      static void Main(string[] args)
      {
         using (SPSite site = new SPSite("https://localhost"))
         {
            SPChangeQuery query = new SPChangeQuery(true, true);
            query.ChangeTokenStart = GetStartingToken();

            while (true)
            {
               // Get a batch of changes.
               SPChangeCollection changes = site.ContentDatabase.GetChanges(query);

               // Process them.
               foreach (SPChange change in changes)
               {
                  Console.WriteLine("Date: {0}  Type of object: {1}  Type of change: {2}",
                     change.Time.ToShortDateString(), change.GetType().ToString(), change.ChangeType);
               }

               // Starting point for next batch.
               query.ChangeTokenStart = changes.LastChangeToken;

               // If this is the last batch, exit.
               if (changes.Count < query.FetchLimit)
                  break;
            }
            // Serialize the last token as a starting point for the next run.
            SaveLastToken(query.ChangeTokenStart);
         }

         Console.Write("\nPress ENTER to continue...");
         Console.ReadLine();
      }

      static SPChangeToken GetStartingToken()
      {
         // Passing a null token to GetChanges fetches 
         // changes from the start of the log.
         SPChangeToken token = null;

         // If we have a token from the last run, use it.
         if (File.Exists(DATA_FILE_PATH))
         {
            using (FileStream fs = File.OpenRead(DATA_FILE_PATH))
            {
               BinaryReader br = new BinaryReader(fs);
               try
               {
                  string str = br.ReadString();
                  // Construct a change token from serialized string.
                  token = new SPChangeToken(str);
               }
               catch (EndOfStreamException e)
               {
                  // No serialized string, so do nothing.
               }
               finally
               {
                  br.Close();
               }
            }
         }

         return token;
      }

      static void SaveLastToken(SPChangeToken token)
      {
         using (FileStream fs = File.Create(DATA_FILE_PATH))
         {
            // Serialize the token.
            BinaryWriter bw = new BinaryWriter(fs);
            string s = token.ToString();
            bw.Write(s);

            // Flush and close.
            bw.Flush();
            bw.Close();
         }
      }
   }
}
Imports System
Imports System.IO
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Administration

Module ConsoleApp

   Private Const DATA_FILE_PATH As String = "ChangeToken.dat"

   Sub Main()
      Using site As SPSite = New SPSite("https://localhost")

         Dim query As New SPChangeQuery(True, True)
         query.ChangeTokenStart = GetStartingToken()

         While (True)
            ' Get a batch of changes.
            Dim changes As SPChangeCollection = site.ContentDatabase.GetChanges(query)

            ' Process them.
            For Each change As SPChange In changes
               Console.WriteLine("Date: {0}  Type of object: {1}  Type of change: {2}", _
                     change.Time.ToShortDateString(), change.GetType().ToString(), change.ChangeType)
            Next

            ' This is the starting point for next batch.
            query.ChangeTokenStart = changes.LastChangeToken

            ' If this is the last batch, exit.
            If changes.Count < query.FetchLimit Then
               Exit While
            End If

         End While

         ' Serialize the last token as a starting point for the next run.
         SaveLastToken(query.ChangeTokenStart)
      End Using

      Console.Write(vbCrLf + "Press ENTER to continue...")
      Console.ReadLine()

   End Sub

   Function GetStartingToken() As SPChangeToken
      ' Passing a null token to GetChanges fetches 
      ' changes from the start of the log.
      Dim token As SPChangeToken = Nothing

      ' If we have a token from the last run, use it.
      If File.Exists(DATA_FILE_PATH) Then
         Using fs As FileStream = File.OpenRead(DATA_FILE_PATH)
            Dim br As BinaryReader = New BinaryReader(fs)
            Try
               Dim str As String = br.ReadString()
               ' Construct a change token from serialized string.
               token = New SPChangeToken(str)
            Catch e As EndOfStreamException
               ' No serialized string, so do nothing.
            Finally
               br.Close()
            End Try
         End Using
      End If

      Return token
   End Function

   Sub SaveLastToken(ByRef token As SPChangeToken)
      Using fs As FileStream = File.Create(DATA_FILE_PATH)
         ' Serialize the token.
         Dim bw As BinaryWriter = New BinaryWriter(fs)
         Dim s As String = token.ToString()
         bw.Write(s)
         ' Flush and close.
         bw.Flush()
         bw.Close()
      End Using
   End Sub

End Module

Siehe auch

Referenz

SPChangeToken Klasse

SPChangeToken-Member

SPChangeToken-Überladung

Microsoft.SharePoint-Namespace

SPChangeToken.ToString()