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
query
Typ: Microsoft.SharePoint.SPChangeQueryDie Abfrage, die für das Änderungsprotokoll ausgeführt wird.
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
Microsoft.SharePoint-Namespace