Utilizzare il rilevamento delle modifiche per sincronizzare i dati con sistemi esterni

 

Data di pubblicazione: gennaio 2017

Si applica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

La nuova funzionalità di rilevamento delle modifiche di Microsoft Dynamics 365 fornisce un modo per mantenere i dati archiviati in un'origine dati esterna, sincronizzati in modalità ad alte prestazioni tramite il rilevamento dei dati modificati dopo l'estrazione iniziale o l'ultima sincronizzazione. In precedenza, senza la nuova funzionalità, era difficile creare un meccanismo efficiente ed affidabile per determinare quali record erano stati modificati in Dynamics 365. In questo argomento viene illustrato come si recuperano le modifiche di un'entità.

In questo argomento

Abilitare il rilevamento delle modifiche per un'entità

Recuperare le modifiche per un'entità

Codice di esempio

Abilitare il rilevamento delle modifiche per un'entità

Prima di recuperare le modifiche per un'entità, verifica che la funzionalità di rilevamento delle modifiche sia abilitata per l'entità. Questa funzionalità può essere abilitata tramite l'interfaccia utente di personalizzazione o a livello di programmazione impostando la proprietà ChangeTrackingEnabled su True. Per ulteriori informazioni sull'utilizzo dell'interfaccia utente di personalizzazione, vedi Abilitare il rilevamento delle modifiche per controllare la sincronizzazione dei dati.

Recuperare le modifiche per un'entità

Quando il rilevamento modifiche è abilitato per una entità, puoi utilizzare il messaggio RetrieveEntityChangesRequest per recuperare le modifiche per l'entità. Quando utilizzi il messaggio per la prima volta, restituisce tutti i record per l'entità e tali dati possono essere utilizzati per popolare l'archivio esterno. Il messaggio restituisce anche un numero di versione che verrà rispedito con l'utilizzo successivo del messaggio RetrieveEntityChangesRequest in modo che vengono restituiti solo i dati delle modifiche apportate dopo questa versione.

È opportuno essere a conoscenza dei seguenti vincoli relativi al recupero delle modifiche per un'entità:

  • Una sola entità verrà tracciata per il recupero delle modifiche. Se il recupero delle modifiche viene eseguito senza versione o token, il server lo tratterà come fosse una versione minima del sistema, restituendo tutti i record come nuovi. Gli oggetti eliminati non verranno restituiti.

  • Le modifiche vengono restituite se l'ultimo token rientra nel valore predefinito di 90 giorni. Se va oltre i 90 giorni, il sistema restituirà tutti i record.

  • Se il client ha un set di modifiche per un'entità (versione 1), un record viene creato ed eliminato prima della successiva query sulle modifiche, verrà restituito l'elemento eliminato anche se non era presenti l'elemento da cui iniziare.

  • I record vengono recuperati nell'ordine determinato dalla logica del lato server. In genere, l'utente finale recupera sempre tutti i record nuovi o aggiornati prima (ordinamento per numero di versione) seguiti dai record eliminati.  Se sono presenti 3000 record creati o aggiornati e 2000 record eliminati, Dynamics 365 restituisce una raccolta di 5000 record, con le prime 3000 voci composte da record nuovi o aggiornati e le ultime 2000 voci dai record eliminati.

  • Se la raccolta di elementi nuova o aggiornata include oltre 5000 voci, l'utente può eseguire il paging della raccolta.

Codice di esempio

Il seguente frammento di codice mostra come si utilizza il messaggio RetrieveEntityChangesRequest per recuperare le modifiche per un'entità. Per l'esempio completo, vedi Sincronizzare i dati con sistemi esterni utilizzando il rilevamento delle modifiche.


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

Vedere anche

Definire le chiavi alternative per un'entità
Utilizzare una chiave alternativa per creare un record
Utilizzare Upsert per inserire o aggiornare un record

Microsoft Dynamics 365

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright