Sample: Synchronize data with external systems using change tracking

This sample code shows how to retrieve changes from a table and synchronize data with external systems by using the RetrieveEntityChanges message with the RetrieveEntityChangesRequest and RetrieveEntityChangesResponse classes. You can download the sample from here.

For more information about the feature that this sample demonstrates, see Use change tracking to synchronize data with external systems.

How to run this sample

  1. Download or clone the Samples repo so that you have a local copy.
  2. (Optional) Edit the cds/App.config file to define a connection string specifying the Microsoft Dataverse instance you want to connect to.
  3. Open the sample solution in Visual Studio and press F5 to run the sample. After you specify a connection string in cds/App.config, any sample you run will use that connection information.

If you do not specify a connection string in cds/App.config file, a dialog will open each time you run the sample and you will need to enter information about which Dataverse instance you want to connect to and which credentials you want to use. This dialog will cache previous connections so that you can choose a previously used connection.

Those samples in this repo that require a connection to a Dataverse instance to run will include a linked reference to the cds/App.config file.

What this sample does

The RetrieveEntityChanges message is intended to be used in a scenario where data from an external system is synchronized and the capability to use change tracking can be used to detect and reconcile data changes.

Without a separate system required to fully replicate this scenario, this sample simulates the scenario by performing two requests. In between the requests some data is changed so that the second request will return data about what was changed over time.

How this sample works

In order to simulate the scenario described in What this sample does, the sample will do the following:


  1. Import a managed solution ( that creates a sample_book table that has an alternate key named sample_bookcode. Verify that the indexes to support the alternate key are active
  2. 10 initial sample_book table records are created so that changes to those tables can be tracked.


  1. Perform initial request and cache the results, including the DataToken
  2. Update the records created in Setup
  3. Perform a second request, this time passing the DataVersion with the DataToken value retrieved from the initial request.
  4. Show the table changes returned by the second request

Clean up

Display an option to delete the managed solution imported in Setup, which removes the sample_book table and all the data created in the sample. The deletion is optional in case you want to examine the tables and data created by the sample. You can manually delete the ChangeTrackingSample to achieve the same result.