Класс 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) этого типа являются потокобезопасными. Не гарантируется, что любые элементы экземпляров потокобезопасны.

См. также

Справочные материалы

Элементы SPChangeQuery

Пространство имен Microsoft.SharePoint