Класс SPChangeQuery
Определяет запрос, который выполняется в Microsoft SharePoint Foundationжурнал изменений.
System.Object
Microsoft.SharePoint.SPChangeQuery
Пространство имен: Microsoft.SharePoint
Сборка: Microsoft.SharePoint (в Microsoft.SharePoint.dll)
'Декларация
Public NotInheritable Class SPChangeQuery
'Применение
Dim instance As SPChangeQuery
public sealed class SPChangeQuery
Используйте объект SPChangeQuery для определения запроса, который можно передать в качестве аргумента для метода GetChanges класса SPList, SPWeb, SPSiteили SPContentDatabase .
Свойства класса SPChangeQuery используется для определения фильтров для запроса. Существует два типа свойств: те, которые применимы к типу объекта, который был изменен, и тех, которые применяются в тип произошедшего изменения. Эти свойства можно используйте в сочетании с помощью конструктора SPChangeQuery для определения запроса, который будет возвращать данные из журнала изменений.
Следующий пример является консольным приложением, которое выводит имена входа пользователей, которые были добавлены в группы внутри семейства веб-сайтов, а также группы, для которой они были добавлены и Дата изменения.
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
Любые общедоступные элементы static (Shared в Visual Basic) этого типа являются потокобезопасными. Не гарантируется, что любые элементы экземпляров потокобезопасны.