Compartilhar via


SPChangeCollection class

Representa uma coleção de objetos derivada da classe SPChange .

Inheritance hierarchy

System.Object
  Microsoft.SharePoint.Administration.SPAutoSerializingObject
    Microsoft.SharePoint.SPBaseCollection
      Microsoft.SharePoint.SPChangeCollection

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

Syntax

'Declaração
Public NotInheritable Class SPChangeCollection _
    Inherits SPBaseCollection
'Uso
Dim instance As SPChangeCollection
public sealed class SPChangeCollection : SPBaseCollection

Comentários

Use o método GetChanges do objeto SPList, SPWeb, SPSiteou SPContentDatabase para retornar um objeto SPChangeCollection com as alterações que ocorreram em um determinado escopo. Em seguida, você pode enumerar a coleção e examinar cada um dos seus membros individualmente.

Cada objeto no SPChangeCollection que é retornado pelo método GetChanges é uma subclasse da classe SPChange . As propriedades da classe pai SPChange contêm informações básicas sobre uma alteração, incluindo o tipo de alteração, conforme representado pela propriedade ChangeType ; o tempo da alteração, conforme representado pela propriedade Time ; e a identificação do conjunto de sites em que a alteração foi feita, conforme representado pela propriedade SiteId . As propriedades das subclasses de SPChange contêm informações específicas ao tipo de objeto que foi alterado. Por exemplo, a classe SPChangeItem representa uma alteração em um objeto de SPListItem e, portanto, tem uma propriedade ListId que identifica a lista em que o item foi alterado. Da mesma forma, a classe SPChangeList representa uma alteração em uma lista e possui uma propriedade WebId que identifica o site em que a lista foi alterada.

O número total de alterações retornados por uma consulta contra o log de alteração pode ser muito grande, dependendo da período de retenção definido para o log e o escopo da consulta. Por motivos de desempenho, as alterações são retornadas em lotes do tamanho limitado. Se você desejar que todas as alterações, em vez de apenas o primeiro lote, seu código deve chamar o método GetChanges em um loop até que retorna uma coleção com zero alterações, significando que atingiu o final do log. Você pode usar o ChangeToken da última alteração do primeiro lote para obter o segundo lote, e assim por diante até obter uma coleção vazia.

Como alternativa, você pode passar um objeto SPChangeQuery para o método GetChanges . Esse objeto tem propriedades que você pode usar para filtrar por tipo de objeto e alterar o tipo de alterações. Você também pode ajustar o tamanho da coleção é retornada em uma única ida e volta, definindo a propriedade de FetchLimit do objeto SPChangeQuery .

Para obter mais informações sobre como trabalhar com o log de alterações, consulte Using the Change Log.

Examples

O exemplo a seguir é um aplicativo de console simples que consulta o log de alteração de itens adicionados, atualizados ou excluídos de uma lista especificada. Depois de recuperar as alterações, o aplicativo examina cada alteração e imprime a data de alteração, tipo de alteração e o nome do item que foi alterado no console.

Imports System
Imports Microsoft.SharePoint

Module ConsoleApp
   Sub Main()
      Using siteCollection As SPSite = New SPSite("https://localhost")
         Using webSite As SPWeb = siteCollection.OpenWeb()

            ' Get a list.
            Dim list As SPList = webSite.Lists(0)

            ' Construct a query
            Dim query As New SPChangeQuery(False, False)

            ' Specify the object type. 
            query.Item = True

            ' Specify change types. 
            query.Add = True
            query.Delete = True
            query.Update = True

            Dim timeZone As SPTimeZone = webSite.RegionalSettings.TimeZone
            Dim total As Integer = 0

            ' Loop until we reach the end of the log.
            While True

               Dim changes As SPChangeCollection = list.GetChanges(query)

               total += changes.Count

               ' Print info about each change to the console.
               For Each change As SPChangeItem In changes
                  ' Get the item name.
                  Dim itemName As String = String.Empty
                  Dim item As SPListItem = Nothing
                  Try
                     item = list.GetItemByUniqueId(change.UniqueId)
                     itemName = item.Name
                  Catch ex As ArgumentException
                     itemName = "Unknown"
                  End Try

                  Console.WriteLine(vbCrLf + "Date: {0}", timeZone.UTCToLocalTime(change.Time).ToString())
                  Console.WriteLine("Change: {0}", change.ChangeType)
                  Console.WriteLine("Item: {0}", itemName)

               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 of {0:#,#} changes to {1} list", total, list.Title)

         End Using
      End Using

      Console.Write(vbCrLf + "Press ENTER to continue...")
      Console.ReadLine()

   End Sub
End Module

Thread safety

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

Ver também

Referência

SPChangeCollection members

Microsoft.SharePoint namespace