SPContentDatabase.GetChanges-Methode (SPChangeQuery)
Gibt eine Auflistung von Änderungen aus dem Änderungsprotokoll, die von der angegebenen Abfrage gefiltert wurden.
Namespace: Microsoft.SharePoint.Administration
Assembly: Microsoft.SharePoint (in Microsoft.SharePoint.dll)
Syntax
'Declaration
Public Function GetChanges ( _
query As SPChangeQuery _
) As SPChangeCollection
'Usage
Dim instance As SPContentDatabase
Dim query As SPChangeQuery
Dim returnValue As SPChangeCollection
returnValue = instance.GetChanges(query)
public SPChangeCollection GetChanges(
SPChangeQuery query
)
Parameter
query
Typ: Microsoft.SharePoint.SPChangeQueryEin SPChangeQuery -Objekt, für das Änderungsprotokoll ausführen die Abfrage darstellt.
Rückgabewert
Typ: Microsoft.SharePoint.SPChangeCollection
Eine Auflistung von SPChange -Objekten, die die Änderungen darstellen. Sie können die maximale Größe der Auflistung, die zurückgegeben wird, indem Sie die FetchLimit -Eigenschaft des SPChangeQuery -Objekts, das Sie übergeben, in dem Abfragezeichenfolgen-Parameter anpassen.
Hinweise
Verwenden Sie diese Methode, um Änderungen zu filtern, wenn Sie nur Änderungen an bestimmten Objekten, statt dass alle Objekte interessiert sind oder wenn Sie nur ausgewählte Aktionen auf bestimmten Objekten interessiert sind. Weitere Informationen finden Sie in der Dokumentation für die SPChangeQuery -Klasse.
Hinweis
In der Standardeinstellung behält das Änderungsprotokoll Daten für 60 Tage. Sie können die Aufbewahrungsdauer konfigurieren, indem die ChangeLogRetentionPeriod -Eigenschaft festlegen.
Beispiele
Das folgende Beispiel ist eine Konsolenanwendung, die fragt der Inhaltsdatenbank für alle Änderungen an Benutzer und Gruppen, und Informationen zu jeder Änderung an der Konsole gedruckt. Beachten Sie, dass die Anwendung ruft die GetChanges -Methode in einer Schleife, Abrufen von Änderungen in Batches, bis alle Änderungen abgerufen wurden.
using System;
using Microsoft.SharePoint;
namespace Test
{
class ConsoleApp
{
static void Main(string[] args)
{
using (SPSite siteCollection = new SPSite("https://localhost"))
{
using (SPWeb rootSite = siteCollection.RootWeb)
{
// Construct a query.
SPChangeQuery query = new SPChangeQuery(false, // limit object types
false); // limit change types
// object types
query.User = true;
query.Group = true;
// change types
query.Add = true;
query.Delete = true;
query.Update = true;
query.GroupMembershipAdd = true;
query.GroupMembershipDelete = true;
// Get the site collection users.
SPUserCollection users = rootSite.AllUsers;
// Get the site collection groups.
SPGroupCollection groups = rootSite.Groups;
SPTimeZone timeZone = rootSite.RegionalSettings.TimeZone
long total = 0;
while (true)
{
SPChangeCollection changes =
siteCollection.ContentDatabase.GetChanges(query);
total += changes.Count;
foreach (SPChange change in changes)
{
// Print the date of the change.
Console.WriteLine("\nDate: {0}",
timeZone.UTCToLocalTime(change.Time).ToString());
// Get url of the site where the change took place.
foreach (SPSite site in siteCollection.ContentDatabase.Sites)
{
if (site.ID == change.SiteId)
{
Console.WriteLine("Site Url: {0}", site.Url);
break;
}
}
// Get nature of change.
Console.WriteLine("Type of change: {0}", change.ChangeType);
// Get information about a user change.
if (change is SPChangeUser)
{
SPChangeUser userChange = (SPChangeUser)change;
if (userChange.Activate)
Console.WriteLine("This change activated a user.");
if (userChange.IsSiteAdminChange)
Console.WriteLine("This change made the user a site admin.");
// Try to get the user login name.
try
{
SPUser user = users.GetByID(userChange.Id); // Throws an exception if not found
Console.WriteLine("Login name: {0}", user.LoginName);
// Get information about the user.
if (user.IsDomainGroup)
Console.WriteLine("This user is a domain group.");
if (change.ChangeType == SPChangeType.Update)
{
Console.Write("Member of:");
foreach (SPGroup group in user.Groups)
Console.Write(" {0};", group.Name);
Console.WriteLine();
}
}
catch (SPException)
{
Console.WriteLine("Login name: unknown");
}
}
// Get information about a group change.
if (change is SPChangeGroup)
{
SPChangeGroup groupChange = (SPChangeGroup)change;
// Try to get the group name.
try
{
SPGroup group = groups.GetByID(groupChange.Id); // Throws an exception if not found
Console.WriteLine("Group name: {0}", group.Name);
Console.WriteLine("Number of members: {0}", group.Users.Count);
}
catch (SPException)
{
Console.WriteLine("Group name: unknown");
}
}
}
// 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;
}
Console.WriteLine("\nTotal changes = {0:#,#}", total);
}
}
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 rootSite As SPWeb = siteCollection.RootWeb
' Construct a query.
Dim query As New SPChangeQuery(False, False)
' object types
query.User = True
query.Group = True
' change types
query.Add = True
query.Delete = True
query.Update = True
query.GroupMembershipAdd = True
query.GroupMembershipDelete = True
' Get the site collection users.
Dim users As SPUserCollection = rootSite.AllUsers
' Get the site collection groups.
Dim groups As SPGroupCollection = rootSite.Groups
Dim timeZone As SPTimeZone = rootSite.RegionalSettings.TimeZone
Dim total As Long = 0
While True
Dim changes As SPChangeCollection = _
siteCollection.ContentDatabase.GetChanges(query)
total += changes.Count
For Each change As SPChange In changes
' Print date of the change.
Console.WriteLine(vbCrLf + "Date: {0}", _
timeZone.UTCToLocalTime(change.Time).ToString())
' Print the url of the site where the change took place.
For Each site As SPSite In siteCollection.ContentDatabase.Sites
If site.ID = change.SiteId Then
Console.WriteLine("Site Url: {0}", site.Url)
Exit For
End If
Next site
' Print the nature of change.
Console.WriteLine("Type of change: {0}", change.ChangeType)
' Get information about a user change.
If TypeOf change Is SPChangeUser Then
Dim userChange As SPChangeUser = CType(change, SPChangeUser)
If userChange.Activate Then
Console.WriteLine("This change activated a user.")
End If
If userChange.IsSiteAdminChange Then
Console.WriteLine("This change made the user a site admin.")
End If
' Try to get the user login name.
Try
Dim user As SPUser = users.GetByID(userChange.Id) ' Throws an exception if not found
Console.WriteLine("Login name: {0}", user.LoginName)
' Get information about the user.
If user.IsDomainGroup Then
Console.WriteLine("This user is a domain group.")
End If
If change.ChangeType = SPChangeType.Update Then
Console.Write("Member of:")
For Each group As SPGroup In user.Groups
Console.Write(" {0};", group.Name)
Next group
Console.WriteLine()
End If
Catch ex As SPException
Console.WriteLine("Login name: unknown")
End Try
End If
' Get information about a group change.
If TypeOf change Is SPChangeGroup Then
Dim groupChange As SPChangeGroup = CType(change, SPChangeGroup)
' Try to get the group name.
Try
Dim group As SPGroup = groups.GetByID(groupChange.Id) ' Throws an exception if not found
Console.WriteLine("Group name: {0}", group.Name)
Console.WriteLine("Number of members: {0}", group.Users.Count)
Catch ex As SPException
Console.WriteLine("Group name: unknown")
End Try
End If
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
Console.WriteLine(vbCrLf + "Total changes = {0:#,#}", total)
End Using
End Using
Console.Write(vbCrLf + "Press ENTER to continue...")
Console.ReadLine()
End Sub
End Module
Siehe auch
Referenz
Microsoft.SharePoint.Administration-Namespace