SPChangeQuery - Classe
Définit une requête effectuée sur le journal de modification dans Microsoft SharePoint Foundation.
Hiérarchie d’héritage
System.Object
Microsoft.SharePoint.SPChangeQuery
Espace de noms : Microsoft.SharePoint
Assembly : Microsoft.SharePoint (dans Microsoft.SharePoint.dll)
Syntaxe
'Déclaration
Public NotInheritable Class SPChangeQuery
'Utilisation
Dim instance As SPChangeQuery
public sealed class SPChangeQuery
Remarques
Utilisez un objet SPChangeQuery pour définir une requête que vous pouvez passer comme argument à une méthode de GetChanges de la classe SPList, SPWeb, SPSiteou SPContentDatabase .
Les propriétés de la classe SPChangeQuery peuvent être utilisées pour spécifier des filtres pour la requête. Il existe deux types de propriétés : ceux qui s'appliquent au type de l'objet qui a été modifié et celles qui s'appliquent au type de modification qui s'est produite. Utilisez ces propriétés en association avec le constructeur SPChangeQuery pour définir une requête qui retourne des données spécifiques du journal des modifications.
Exemples
L'exemple suivant est une application de console qui imprime les noms de connexion des utilisateurs qui ont été ajoutés aux groupes au sein d'une collection de sites, ainsi que les groupes pour lesquels ils ont été ajoutés et la date de la modification.
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, false);
// Set a limit on the number of changes returned on a single trip.
query.FetchLimit = 500;
// object type
query.Group = true;
// change type
query.GroupMembershipAdd = true;
// Get the users and groups for the site collection.
SPUserCollection users = rootSite.AllUsers;
SPGroupCollection groups = rootSite.Groups;
// Convert to local time.
SPTimeZone timeZone = rootSite.RegionalSettings.TimeZone;
// total changes
int total = 0;
// Loop until we reach the end of the log.
while (true)
{
SPChangeCollection changes = siteCollection.GetChanges(query);
total += changes.Count; // running total
foreach (SPChangeGroup change in changes)
{
// Try to get the group name.
string groupName = String.Empty;
try
{
SPGroup group = groups.GetByID(change.Id);
groupName = group.Name;
}
catch (SPException)
{
groupName = "Unknown";
}
// Try to get the user name.
string loginName = String.Empty;
try
{
SPUser user = users.GetByID(change.UserId);
loginName = user.LoginName;
}
catch (SPException)
{
loginName = "Unknown";
}
// Write to the console.
Console.WriteLine("\nDate: {0}",
timeZone.UTCToLocalTime(change.Time).ToString());
Console.WriteLine("{0} was added to the {1} group.",
loginName, groupName);
}
// 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)
' Set a limit on the number of changes returned on a single trip.
query.FetchLimit = 500
' Select the object type.
query.Group = True
' Select the change type.
query.GroupMembershipAdd = True
' Get the users and groups for the site collection.
Dim users As SPUserCollection = rootSite.AllUsers
Dim groups As SPGroupCollection = rootSite.Groups
' Convert to local time.
Dim timeZone As SPTimeZone = rootSite.RegionalSettings.TimeZone
' total changes
Dim total As Integer = 0
' Loop until we reach the end of the log.
While True
Dim changes As SPChangeCollection = siteCollection.GetChanges(query)
total += changes.Count ' running total
For Each change As SPChangeGroup In changes
' Try to get the group name.
Dim groupName As String = String.Empty
Try
Dim group As SPGroup = groups.GetByID(change.Id)
groupName = group.Name
Catch ex As SPException
groupName = "Unknown"
End Try
' Try to get the user name.
Dim loginName As String = String.Empty
Try
Dim user As SPUser = users.GetByID(change.UserId)
loginName = user.LoginName
Catch ex As SPException
loginName = "Unknown"
End Try
' Write to the console.
Console.WriteLine(vbCrLf + "Date: {0}", _
timeZone.UTCToLocalTime(change.Time).ToString())
Console.WriteLine("{0} was added to the {1} group.", _
loginName, groupName)
Next change
' Break out of loop if we have the last batch.
If changes.Count < query.FetchLimit Then
Exit While
End If
' Otherwise, go get another batch.
query.ChangeTokenStart = changes.LastChangeToken
End While
Console.WriteLine(vbCrLf + "Total of {0:#,#} changes", total)
End Using
End Using
Console.Write(vbCrLf + "Press ENTER to continue...")
Console.ReadLine()
End Sub
End Module
Cohérence de thread
Tous les membres statique (Partagé dans Visual Basic)s publics de ce type sont thread-safe. Cela n’est pas garanti pour les membres d’instance.