共用方式為


SPWeb.GetChanges method (SPChangeQuery)

取得從做為篩選依據指定的查詢變更記錄檔的變更。

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

Syntax

'宣告
Public Function GetChanges ( _
    query As SPChangeQuery _
) As SPChangeCollection
'用途
Dim instance As SPWeb
Dim query As SPChangeQuery
Dim returnValue As SPChangeCollection

returnValue = instance.GetChanges(query)
public SPChangeCollection GetChanges(
    SPChangeQuery query
)

參數

傳回值

Type: Microsoft.SharePoint.SPChangeCollection
在指定的查詢為基礎的網站上所發生的變更。指定要傳回的查詢參數將FetchLimit屬性設定的變更的最大數目。

備註

使用這個方法來取得特定的物件,而不是所有的物件,或只對選取的動作變更特定的物件上。如需詳細資訊,請參閱SPChangeQuery類別。

注意事項注意事項

根據預設,變更記錄會保留資料的 60 天。若要變更預設的保留期限,請設定ChangeLogRetentionPeriod屬性。

Examples

下列範例是主控台應用程式,會建立一個文字檔案已加入、 刪除或更新的清單項目有關的資訊。應用程式會呼叫GetChanges方法,在迴圈中,擷取批次中的變更,直到在擷取所有的變更。

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

namespace Test
{
   class ConsoleApp
   {
      static void Main(string[] args)
      {
         using (SPSite siteCollection = new SPSite("https://localhost"))
         {
            using (SPWeb webSite = siteCollection.RootWeb)
            {

               // Construct a query
               SPChangeQuery query = new SPChangeQuery(false,  // limit object types
                                                       false); // limit change types

               // object type 
               query.Item = true;

               // change types 
               query.Add = true;
               query.Delete = true;
               query.Update = true;

               SPTimeZone timeZone = webSite.RegionalSettings.TimeZone;
               long total = 0;

               string fileName = "ItemChanges.txt";
               StreamWriter writer = File.AppendText(fileName);

               while (true)
               {

                  SPChangeCollection changes = webSite.GetChanges(query);
                  total += changes.Count;

                  foreach (SPChangeItem change in changes)
                  {
                     // Get the list title
                     string listTitle = String.Empty;
                     string itemName = String.Empty;
                     SPList list = null;
                     try
                     {
                        list = webSite.Lists[change.ListId];
                        listTitle = list.Title;
                     }
                     catch (SPException)
                     {
                        listTitle = "Unknown";
                     }

                     // Get the item title
                     if (list != null)
                     {
                        SPListItem item = null;
                        try
                        {
                           item = list.GetItemByUniqueId(change.UniqueId);
                           itemName = item.Name;
                        }
                        catch (ArgumentException)
                        {
                           itemName = "Unknown";
                        }

                     }

                     // Write to the log
                     writer.WriteLine("\r\nDate: {0}",
                        timeZone.UTCToLocalTime(change.Time).ToString());
                     writer.WriteLine("Change: {0} item", change.ChangeType);
                     writer.WriteLine("List: {0}", listTitle);
                     writer.WriteLine("Item: {0}", itemName);

                  }

                  // Break out of loop if we have the last batch
                  if (changes.Count < query.FetchLimit)
                     break;
                  // Otherwise, go get another batch
                  query.ChangeTokenStart = changes.LastChangeToken;
               }

               writer.WriteLine("\r\nTotal changes = {0:#,#}", total);
               writer.Flush();
               writer.Close();

               Console.WriteLine("{0} changes written to {1}", total, fileName);
            }
         }
         Console.Write("\nPress ENTER to continue...");
         Console.ReadLine();
      }
   }
}
Imports System
Imports System.IO
Imports Microsoft.SharePoint

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

            ' Construct a query
            Dim query As New SPChangeQuery(False, False)

            ' object type
            query.Item = True

            ' change types 
            query.Add = True
            query.Delete = True
            query.Update = True

            Dim timeZone As SPTimeZone = webSite.RegionalSettings.TimeZone
            Dim total As Long = 0

            Dim fileName As String = "ItemChanges.txt"
            Dim writer As StreamWriter = File.AppendText(fileName)

            While True

               Dim changes As SPChangeCollection = webSite.GetChanges(query)
               total += changes.Count

               For Each change As SPChangeItem In changes
                  ' Get the list title
                  Dim listTitle As String = String.Empty
                  Dim itemName As String = String.Empty
                  Dim list As SPList = Nothing
                  Try
                     list = webSite.Lists(change.ListId)
                     listTitle = list.Title
                  Catch ex As SPException
                     listTitle = "Unknown"
                  End Try

                  ' Get the item title
                  If list IsNot Nothing Then
                     Dim item As SPListItem = Nothing
                     Try
                        item = list.GetItemByUniqueId(change.UniqueId) 
                        itemName = item.Name
                     Catch ex As ArgumentException
                        itemName = "Unknown"
                     End Try
                  End If

                  ' Write to the log
                  writer.WriteLine(vbCrLf + "Date: {0}", _
                                   timeZone.UTCToLocalTime(change.Time).ToString())
                  writer.WriteLine("Change: {0} item", change.ChangeType)
                  writer.WriteLine("List: {0}", listTitle)
                  writer.WriteLine("Item: {0}", itemName)
               Next change

               ' Break out of the loop when we fetch the last batch of changes
               If changes.Count < query.FetchLimit Then
                  Exit While
               End If

               ' Go get another batch of changes starting where we left off
               query.ChangeTokenStart = changes.LastChangeToken

            End While

            writer.WriteLine(vbCrLf + "Total changes = {0:#,#}", total)
            writer.Flush()
            writer.Close()

            Console.WriteLine("{0} changes written to {1}", total, fileName)

         End Using
      End Using

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

   End Sub
End Module

請參閱

參照

SPWeb class

SPWeb members

GetChanges overload

Microsoft.SharePoint namespace

其他資源

Using the Change Log