Del via


Brug ændringssporing til at synkronisere data med eksterne systemer

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Ændringssporingsfunktionen i Microsoft Dynamics 365 gør det muligt at gemme dataene i en ekstern datakilde, der er synkroniseret på en måde, så det effektiv kan registreres, hvilke data er blevet ændret, siden dataene først blev udtrukket, eller sidst de blev synkroniseret. Tidligere, uden denne funktion, var det vanskeligt at bygge en pålidelig og effektiv mekanisme, der kunne afgøre, hvilke poster der var ændret i Dynamics 365. I dette emne beskrives, hvordan du kan hente ændringer for et objekt.

Dette emne indeholder

Aktivere sporingsændring for et objekt

Hent ændringer for et objekt

Eksempelkode

Aktivere sporingsændring for et objekt

Når du vil spore ændringerne for et objekt, skal du først aktivere ændringssporingsfunktionen for det pågældende objekt. Denne funktion kan aktiveres i tilpasningsgrænsefladen eller ved hjælp af programmering ved at indstille egenskaben ChangeTrackingEnabled til True. Du kan finde flere oplysninger om brug af tilpasningsgrænsefladen under Aktivér ændringssporing for at styre datasynkronisering.

Hent ændringer for et objekt

Når sporing af ændringer er aktiveret for et objekt, kan du bruge meddelelsen RetrieveEntityChangesRequest til at hente ændringerne for det pågældende objekt. Første gang denne meddelelse bruges, returneres alle poster for objektet, og disse data kan bruges til at udfylde det ekstern lager. Meddelelsen returnerer også et versionsnummer, der skal sendes tilbage, næste gang RetrieveEntityChangesRequest-meddelelsen bruges, så kun data for de ændringer, der er udført efter denne version, returneres.

Du skal være opmærksom på følgende begrænsninger, når du henter ændringer for et objekt:

  • Kun én enhed spores under hentning af ændringer. Hvis ændringssporingen udføres uden version / eller token, behandler serveren den som systemets minimumversion og returnerer alle poster som nye. Slettede objekter returneres ikke.

  • Ændringer bliver returneret, hvis det sidste token ligger inden for en standardværdi på 90 dage. Hvis det er mere end 90 dage, returnerer systemet alle poster.

  • Hvis en klient har en række ændringer for et objekt, f.eks. version 1, oprettes en post, som slettes, før den næste søgning efter ændringer. Det slettede emne hentes, selvom klienten ikke havde emnet som udgangspunkt.

  • Poster hentes i den rækkefølge, der bestemmes af logikken på serversiden. Slutbrugeren får som regel altid alle nye eller opdaterede poster først (sorteret efter versionsnummer) efterfulgt af slettede poster.  Hvis der er 3000 oprettede eller opdaterede poster og 2000 slettede poster, returnerer Dynamics 365 en samling på 5000 poster, hvor de første 3000 registreringer består af nye eller opdaterede poster og de sidste 2000 registreringer består af for slettede poster.

  • Hvis den nye eller opdaterede samling er større end 5000, kan brugeren bladre gennem samlingen.

Eksempelkode

Følgende kodestykke viser, hvordan RetrieveEntityChangesRequest-meddelelsen bruges til at hente ændringer for et objekt. Du kan se hele eksemplet under Synkronisere data med eksterne systemer ved hjælp af sporing af ændringer.


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;
}

Se også

Definer alternative nøgler for et objekt
Brug en alternativ nøgle til at oprette en post
Brug Upsert til at indsætte eller opdatere en post

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret