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.