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.StringDie 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