Tracering gebruiken om gegevens te synchroniseren met externe systemen
Gepubliceerd: januari 2017
Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
De functie voor het bijhouden van wijzigingen in Microsoft Dynamics 365 biedt een manier om de gegevens efficiënt gesynchroniseerd te houden door te detecteren welke gegevens zijn gewijzigd sinds de gegevens oorspronkelijk zijn geëxtraheerd of voor het laatst zijn gesynchroniseerd. Voorheen, zonder deze nieuwe functie, was het moeilijk om een betrouwbaar en efficiënt mechanisme te bouwen om te bepalen welke records zijn gewijzigd in Dynamics 365. In dit onderwerp wordt besproken hoe wijzigingen voor een entiteit kunnen worden opgehaald.
In dit onderwerp
Bijhouden van wijzigingen inschakelen voor een entiteit
Wijzigingen voor een entiteit ophalen
Voorbeeldcode
Bijhouden van wijzigingen inschakelen voor een entiteit
Voordat u de wijzigingen voor een entiteit gaat ophalen, moet u eerst controleren of de functie voor het bijhouden van wijzigingen is ingeschakeld voor deze entiteit. Deze functie kan worden ingeschakeld door gebruik te maken van de gebruikersinterface (UI) voor aanpassen of programmatisch door de eigenschap ChangeTrackingEnabled in te stellen op True. Zie Bijhouden van wijzigingen inschakelen voor het besturen van gegevenssynchronisatie voor meer informatie over het gebruik van de gebruikersinterface (UI) voor aanpassing.
Wijzigingen voor een entiteit ophalen
Als het bijhouden van wijzigingen voor een entiteit is ingeschakeld, kunt u het RetrieveEntityChangesRequest-bericht gebruiken om de wijzigingen voor die entiteit op te halen. Wanneer dit bericht voor het eerst wordt gebruikt, worden alle records voor de entiteit geretourneerd en kunnen alle gegevens worden gebruikt voor het vullen van de externe opslag. Het bericht retourneert tevens een versienummer dat teruggezonden wordt bij het volgende gebruik van het RetrieveEntityChangesRequest-bericht zodat alleen gegevens worden geretourneerd voor wijzigingen die zijn opgetreden sinds die versie.
Houd rekening met de volgende beperkingen bij het ophalen van wijzigingen voor een entiteit:
Er wordt slechts één entiteit bijgehouden bij het ophalen van wijzigingen. Als het ophalen van wijzigingen plaatsvindt zonder versie of token, behandelt de server het als de minimale systeemversie, waarbij alle records worden geretourneerd als nieuw. Verwijderde objecten worden niet geretourneerd.
Er worden wel wijzigingen geretourneerd als het laatste token zich binnen een standaardwaarde van 90 dagen bevindt. Als het meer dan 90 dagen zijn, retourneert het systeem alle records.
Als een client een reeks wijzigingen voor een entiteit heeft, zeg versie 1, wordt een record gemaakt en verwijderd voorafgaand aan de volgende query voor wijzigingen. Zij krijgen het verwijderde item zelfs als zij het item in het begin helemaal niet hadden.
De volgorde van ophalen van records wordt bepaald door serverlogica. Normaal gesproken krijgt de eindgebruiker altijd alle nieuwe of bijgewerkte records eerst (gesorteerd op versienummer) gevolgd door verwijderde records. Als er 3000 records zijn gemaakt of bijgewerkt en 2000 records zijn verwijderd, wordt in Dynamics 365 een verzameling van 5000 records weergeven, waarin de eerste 3000 items van nieuwe of bijgewerkte records zijn opgenomen en de laatste 2000 items voor verwijderde records.
Als de verzameling van nieuwe of bijgewerkte items groter is dan 5000, kan de gebruiker door de verzameling bladeren.
Voorbeeldcode
Het volgende codestukje toont hoe het RetrieveEntityChangesRequest-bericht wordt gebruikt voor het ophalen van de wijzigingen voor een entiteit. Voor het complete voorbeeld raadpleegt u Gegevens synchroniseren met externe systemen via het bijhouden van wijzigingen.
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;
}
Zie ook
Alternatieve sleutels voor een entiteit definiëren
Een alternatieve sleutel gebruiken voor het maken van een record
Upsert gebruiken om een record in te voegen of bij te werken
Microsoft Dynamics 365
© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht