Partager via


SPChangeCollection - Classe

Représente une collection d'objets dérivés de la classe SPChange .

Hiérarchie d’héritage

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

Espace de noms :  Microsoft.SharePoint
Assembly :  Microsoft.SharePoint (dans Microsoft.SharePoint.dll)

Syntaxe

'Déclaration
Public NotInheritable Class SPChangeCollection _
    Inherits SPBaseCollection
'Utilisation
Dim instance As SPChangeCollection
public sealed class SPChangeCollection : SPBaseCollection

Remarques

Utilisez la méthode GetChanges de l'objet SPList, SPWeb, SPSiteou SPContentDatabase pour renvoyer un objet SPChangeCollection avec les modifications qui se sont produites dans une portée donnée. Vous pouvez énumérer la collection, puis examiner chacun de ses membres individuellement.

Chaque objet de SPChangeCollection qui est retourné par la méthode GetChanges est une sous-classe de la classe SPChange. Les propriétés de la classe SPChange parente contiennent des informations de base sur une modification, notamment le type, comme représenté par la propriété ChangeType, l’heure, comme représenté par la propriété Time, et l’ID de la collection de sites où la modification a été apportée, comme représenté par la propriété SiteId. Les propriétés des sous-classes de SPChange comportent des informations spécifiques au type d’objet modifié. Par exemple, la classe SPChangeItem représente une modification à un objet SPListItem et possède donc une propriété ListId qui identifie la liste où l’élément a été modifié. De même, la classe SPChangeList représente une modification à une liste et possède une propriété qui identifie WebId le site Web où la liste a été modifiée.

Le nombre total de modifications retournées par une requête sur le journal des modifications peut être très élevé, en fonction de la période de rétention définie pour le journal et la portée de la requête. Pour des raisons de performances, les modifications sont renvoyées dans des lots de taille limitée. Si vous souhaitez que toutes les modifications plutôt que seul le premier lot, votre code doit appeler la méthode GetChanges dans une boucle jusqu'à ce qu'elle retourne une collection avec sans changement, ce qui signifie qu'il a atteint la fin du journal. Vous pouvez utiliser le ChangeToken à partir de la dernière modification du premier lot pour obtenir le deuxième lot d'instructions, et ainsi de suite jusqu'à ce que vous obteniez une collection vide.

Vous pouvez également passer un objet SPChangeQuery à la méthode GetChanges . Cet objet possède des propriétés que vous pouvez utiliser pour filtrer les modifications par type d'objet et par type de modification. Vous pouvez également ajuster la taille de la collection qui est retournée sur un seul aller-retour en définissant la propriété FetchLimit de l'objet SPChangeQuery .

Pour plus d'informations sur l'utilisation du journal des modifications, consultez Using the Change Log.

Exemples

L'exemple suivant est une application console simple qui interroge le journal modification pour les éléments ajoutés, mis à jour ou supprimés à partir d'une liste spécifiée. Après avoir récupéré les modifications, l'application examine chaque modification et imprime la date de la modification, le type de modification et le nom de l'élément qui a été modifié dans la 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

Cohérence de thread

Tous les membres statique (Partagé dans Visual Basic)s publics de ce type sont thread-safe. Cela n’est pas garanti pour les membres d’instance.

Voir aussi

Référence

SPChangeCollection - Membres

Microsoft.SharePoint - Espace de noms