Share via


SPChangeToken class

表示變更記錄檔中變更的唯一循序位置。

Inheritance hierarchy

System.Object
  Microsoft.SharePoint.SPChangeToken

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

Syntax

'宣告
<SerializableAttribute> _
Public NotInheritable Class SPChangeToken
'用途
Dim instance As SPChangeToken
[SerializableAttribute]
public sealed class SPChangeToken

備註

變更記錄檔中的每個項目是由SPChange物件表示。當記錄變更時,它會加上戳記以識別權杖由SPChangeToken物件的SPChange物件的 [ ChangeToken ] 屬性。

您可以取得將用來標記下一步] 變更為清單、 網站、 網站集合或存取SPListSPWebSPSiteSPContentDatabase類別的CurrentChangeToken屬性針對進行程式設計的內容資料庫記錄的變更語彙基元。

經常會想要使用變更語彙基元來限制對變更記錄的查詢的範圍。例如,您可以擷取從變更記錄檔中的特定點開始做為引數的SPChangeToken物件傳遞給GetChanges方法的SPListSPWebSPSiteSPContentDatabase類別的變更。您傳遞變更語彙基元代表您想要開始查詢的循序位置記錄檔中。

您也可以呼叫具有兩個變更語彙基元的GetChanges方法做為引數,表示起始及結束點為您的查詢。同樣地,您可以藉由呼叫GetChanges,這是一個接受SPChangeQuery類別的執行個體的另一個多載來指定開始和結束點。這個類別具有屬性,您可以用來修改查詢,包括保留SPChangeToken物件的ChangeTokenStart屬性, ChangeTokenEnd屬性的兩個屬性。

GetChanges方法的所有多載會傳回SPChangeCollection物件。傳回單一集合中的變更數目是基於效能考量,有限,因此您應該在迴圈中呼叫GetChanges ,直到您取得空的集合,表示您已到達記錄檔的結尾,或有沒有更多的變更,滿足您的查詢。當您執行這項操作時,使用第一批次,依此類推取得第二個批次,直到到達零個變更批次的LastChangeToken屬性所傳回的語彙基元。下列程式碼,擷取記錄網站集合的所有變更說明一般的方法。

// 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

下列範例是主控台應用程式,使用SPChangeToken類別,傳回在過去 60 天內網站上所發生的變更。

注意事項注意事項

根據預設,變更記錄會保留資料的 60 天。您可以藉由設定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.

請參閱

參照

SPChangeToken members

Microsoft.SharePoint namespace

其他資源

Using the Change Log