SPWeb.GetChanges-Methode (SPChangeQuery)

Ruft ab, Änderungen aus dem Änderungsprotokoll, die durch die angegebene Abfrage gefiltert.

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

Syntax

'Declaration
Public Function GetChanges ( _
    query As SPChangeQuery _
) As SPChangeCollection
'Usage
Dim instance As SPWeb
Dim query As SPChangeQuery
Dim returnValue As SPChangeCollection

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

Parameter

Rückgabewert

Typ: Microsoft.SharePoint.SPChangeCollection
Die Änderungen, die auf der Website auf Grundlage der angegebenen Abfrage aufgetreten sind. Geben Sie die maximale Anzahl von Änderungen durch Festlegen der FetchLimit -Eigenschaft des Abfrageparameters zurückgegeben.

Hinweise

Verwenden Sie diese Methode, um Änderungen auf bestimmte Objekte, nicht alle Objekte, oder nur für ausgewählte Aktionen auf bestimmte Objekte abzurufen. Weitere Informationen finden Sie unter der der SPChangeQuery -Klasse.

Hinweis

Standardmäßig behält das Änderungsprotokoll für 60 Tage Daten. Um den Standard-Aufbewahrungszeitraum zu ändern, legen Sie die ChangeLogRetentionPeriod -Eigenschaft.

Beispiele

Im folgende Beispiel wird eine Konsolenanwendung, mit die eine Textdatei mit Informationen zu Listenelemente erstellt, die hinzugefügt, aktualisiert oder gelöscht wurden. Die Anwendung ruft die GetChanges -Methode in einer Schleife, Abrufen von Änderungen in den Reihen, bis alle Änderungen abgerufen wurden.

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

Siehe auch

Referenz

SPWeb Klasse

SPWeb-Member

GetChanges-Überladung

Microsoft.SharePoint-Namespace

Weitere Ressourcen

Using the Change Log