Compartir a través de


(SPChangeQuery) del método SPContentDatabase.GetChanges

Devuelve una colección de cambios del registro de cambios que se hayan filtrado por la consulta especificada.

Espacio de nombres:  Microsoft.SharePoint.Administration
Ensamblado:  Microsoft.SharePoint (en Microsoft.SharePoint.dll)

Sintaxis

'Declaración
Public Function GetChanges ( _
    query As SPChangeQuery _
) As SPChangeCollection
'Uso
Dim instance As SPContentDatabase
Dim query As SPChangeQuery
Dim returnValue As SPChangeCollection

returnValue = instance.GetChanges(query)
public SPChangeCollection GetChanges(
    SPChangeQuery query
)

Parámetros

Valor devuelto

Tipo: Microsoft.SharePoint.SPChangeCollection
Una colección de objetos de SPChange que representan los cambios. Puede ajustar el tamaño máximo de la colección que se devuelve al establecer la propiedad FetchLimit del objeto SPChangeQuery que se pasa en el parámetro de consulta.

Comentarios

Use este método para filtrar los cambios cuando le interesan sólo los cambios realizados en determinados objetos, en lugar de todos los objetos, o cuando le interesan sólo acciones seleccionadas en objetos determinados. Para obtener más información, vea la documentación de la clase SPChangeQuery .

Nota

De forma predeterminada, el registro de cambios conserva los datos durante 60 días. Puede configurar el período de retención estableciendo la propiedad ChangeLogRetentionPeriod .

Ejemplos

En el siguiente ejemplo es una aplicación de consola que consulta la base de datos de contenido para todos los cambios a los usuarios y grupos y se imprime información acerca de cada cambio en la consola. Tenga en cuenta que la aplicación llama al método GetChanges en un bucle, la obtención de los cambios en lotes hasta que se hayan recuperado todos los cambios.

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

Vea también

Referencia

clase SPContentDatabase

Miembros SPContentDatabase

Sobrecarga GetChanges

Espacio de nombres Microsoft.SharePoint.Administration

Otros recursos

Using the Change Log