Utiliser le suivi des modifications pour synchroniser les données avec les systèmes externes
Date de publication : janvier 2017
S’applique à : Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
La fonctionnalité de suivi des modifications de Microsoft Dynamics 365 vous permet de préserver les performances la synchronisation des données en détectant les données qui ont changé depuis leur extraction initiale ou leur dernière synchronisation. Auparavant, sans cette nouvelle fonctionnalité, il était difficile de créer un mécanisme fiable et efficace pour déterminer les enregistrements qui avaient été modifiés dans Dynamics 365. Cette rubrique explique comment récupérer les modifications pour une entité.
Contenu de la rubrique
Activer le suivi des modifications pour une entité
Récupérer les modifications pour une entité
Exemple de code
Activer le suivi des modifications pour une entité
Avant de récupérer les modifications pour une entité, vérifiez que la fonctionnalité de suivi des modifications est activée pour cette entité. Cette fonctionnalité peut être activée via l'interface utilisateur de personnalisation ou par programme en définissant la propriété ChangeTrackingEnabled sur True. Pour plus d'informations sur l'utilisation de l'interface utilisateur de personnalisation, voir Activer le suivi des modifications pour contrôler la synchronisation des données.
Récupérer les modifications pour une entité
Lorsque le suivi des modifications est activé pour une entité, vous pouvez utiliser le message RetrieveEntityChangesRequest pour récupérer les modifications pour cette entité. La première fois que ce message est utilisé, il retourne tous les enregistrements de l'entité et ces données peuvent être utilisées pour remplir le stockage externe. Le message retourne également un numéro de version qui sera renvoyé lors de l'utilisation suivante du message RetrieveEntityChangesRequest afin que seules les données relatives aux modifications produites depuis cette version soient retournées.
Vous devez connaître les contraintes suivantes lorsque vous récupérez les modifications pour une entité :
Une seule entité est suivie lors de la récupération des modifications. Si la récupération des modifications est exécutée sans version ni jeton, le serveur la traite comme la version système minimale et retourne tous les enregistrements comme nouveau. Les objets supprimés ne seront pas retournés.
Les modifications seront retournées si le dernier jeton est situé dans le délai par défaut de 90 jours. S'il est situé au-delà de 90 jours, le système retournera tous les enregistrements.
Si un client a un ensemble de modifications pour une entité, que nous appelons version 1, et qu'un enregistrement est créé et supprimé avant la requête suivante relative aux modifications, l'article supprimé est retourné même s'il n'était pas présent au début.
Les enregistrements sont récupérés dans l'ordre déterminé par la logique côté serveur. Généralement, l'utilisateur final obtient toujours tous les enregistrements nouveaux ou mis à jour en premier (triés par numéro de version), suivis des enregistrements supprimés. S'il y a 3 000 enregistrements créés ou mis à jour et 2 000 enregistrements supprimés, Dynamics 365 retourne une collection de 5 000 enregistrements. Les 3 000 premières entrées sont constituées des enregistrements nouveaux ou mis à jour et les 2 000 entrées suivantes sont constituées des enregistrements supprimés.
Si la collection d'articles nouvelle ou mise à jour est supérieure à 5 000, l'utilisateur peut parcourir la collection.
Exemple de code
L'extrait de code suivant montre comment le message RetrieveEntityChangesRequest est utilisé pour récupérer les modifications pour une entité. Pour voir l'exemple complet, consultez Synchroniser les informations avec les systèmes externes avec le suivi des modifications.
string token;
// Initialize page number.
int pageNumber = 1;
List<Entity> initialrecords = new List<Entity>();
// Retrieve records by using Change Tracking feature.
RetrieveEntityChangesRequest request = new RetrieveEntityChangesRequest();
request.EntityName = _customBooksEntityName.ToLower();
request.Columns = new ColumnSet("sample_bookcode", "sample_name", "sample_author");
request.PageInfo = new PagingInfo() { Count = 5000, PageNumber = 1, ReturnTotalRecordCount = false };
// Initial Synchronization. Retrieves all records as well as token value.
Console.WriteLine("Initial synchronization....retrieving all records.");
while (true)
{
RetrieveEntityChangesResponse response = (RetrieveEntityChangesResponse)_serviceProxy.Execute(request);
initialrecords.AddRange(response.EntityChanges.Changes.Select(x => (x as NewOrUpdatedItem).NewOrUpdatedEntity).ToArray());
initialrecords.ForEach(x => Console.WriteLine("initial record id:{0}", x.Id));
if (!response.EntityChanges.MoreRecords)
{
// Store token for later query
token = response.EntityChanges.DataToken;
break;
}
// Increment the page number to retrieve the next page.
request.PageInfo.PageNumber++;
// Set the paging cookie to the paging cookie returned from current results.
request.PageInfo.PagingCookie = response.EntityChanges.PagingCookie;
}
Voir aussi
Définition de clés secondaires pour une entité
Utilisation d'une clé secondaire pour créer un enregistrement
Utilisation de Upsert pour insérer ou mettre à jour un enregistrement
Microsoft Dynamics 365
© 2017 Microsoft. Tous droits réservés. Copyright