SPChangeQuery class

Defines a query that is performed against the change log in Microsoft SharePoint Foundation.

System.Object
  Microsoft.SharePoint.SPChangeQuery

Namespace:  Microsoft.SharePoint
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)

'Declaration
Public NotInheritable Class SPChangeQuery
'Usage
Dim instance As SPChangeQuery

Use an SPChangeQuery object to define a query that you can pass as an argument to a GetChanges method of the SPList, SPWeb, SPSite, or SPContentDatabase class.

The properties of the SPChangeQuery class can be used to specify filters for the query. There are two types of properties: those that apply to the type of object that has been changed, and those that apply to the type of change that occurred. Use these properties in conjunction with the SPChangeQuery constructor to define a query that will return specific data from the change log.

The following example is a console application that prints out the login names of users who have been added to groups within a site collection, as well as the groups to which they have been added and the date of the change.

Imports System
Imports Microsoft.SharePoint

Module ConsoleApp
   Sub Main()
      Using siteCollection As SPSite = New SPSite("http://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

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show: