Uso del seguimiento de cambios para sincronizar los datos con sistemas externos

 

Publicado: enero de 2017

Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

La característica de seguimiento de Microsoft Dynamics 365 proporciona una forma de mantener los datos sincronizados con alto rendimiento detectando qué datos se han modificado desde que los datos se extrajeron inicialmente o se sincronizaron por última vez. Anteriormente, sin esta nueva característica, era difícil crear un mecanismo confiable y eficaz para determinar los registros que se habían cambiado en Dynamics 365. Este tema analiza cómo recuperar los cambios de una entidad.

En este tema

Habilitar el seguimiento de cambios de una entidad

Recuperar cambios para una entidad

Código de ejemplo

Habilitar el seguimiento de cambios de una entidad

Antes de recuperar los cambios para una entidad, asegúrese de que la característica de seguimiento de cambios está habilitada para esa entidad. Esta característica se pueden habilitar en la interfaz de usuario (UI) de personalización o mediante programación estableciendo la propiedad ChangeTrackingEnabled como True. Para obtener más información sobre el uso de la interfaz de usuario (UI) de personalización, consulte Habilitar seguimiento de cambios para controlar la sincronización de datos.

Recuperar cambios para una entidad

Cuando el seguimiento de cambios está habilitado para una entidad, puede usar el mensaje RetrieveEntityChangesRequest para recuperar los cambios para esa entidad. La primera vez que se usa este mensaje devuelve todos los registros de la entidad y que los datos se pueden usar para rellenar el almacenamiento externo. El mensaje también devuelve un número de versión que se enviará con el uso siguiente del mensaje RetrieveEntityChangesRequest de modo que solo se devolverán los datos de los cambios que se han producido desde esa versión.

Debe conocer las siguientes restricciones para recuperar los cambios de una entidad:

  • Solo se realizará seguimiento de una entidad en recuperación de cambios. Si recuperación de cambios se ejecuta sin la versión o token, el servidor lo tratará como la versión mínima del sistema, devolviendo todos los registros como nuevos. Los objetos eliminados no se devolverán.

  • Los cambios se devolverán si el último token se encuentra dentro de un valor predeterminado de 90 días. Si es superior a 90 días, el sistema devolverá todos los registros.

  • Si un cliente tiene un conjunto de cambios para una entidad, supongamos la versión 1, un registro se crea y elimina antes de la siguiente consulta cambios, éste obtendrá el elemento eliminado incluso aunque no tuviera el elemento para empezar.

  • Los registros se recuperan en el orden determinado por la lógica del lado del servidor. Normalmente, el usuario final obtendrá siempre todos los registros nuevos o actualizados primero (clasificados por número de versión) seguidos de los registros eliminados.  Si hay 3000 registros creados o actualizados y 2000 registros eliminados, Dynamics 365 devuelve una colección de 5000 registros, que tienen las primeras 3000 entradas formadas por registros nuevos o actualizados y las 2000 últimas entradas de registros eliminados.

  • Si la colección de registros nuevos o actualizados es superior a 5000, el usuario puede desplazarse entre las páginas de la colección.

Código de ejemplo

El fragmento de código siguiente muestra cómo el mensaje de RetrieveEntityChangesRequest se usa para recuperar los cambios de una entidad. Para ver el ejemplo completo, vea Sincronizar datos con sistemas externos utilizando seguimiento de cambios.


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

Ver también

Defina claves alternativas para una entidad
Usar una clave alternativa para crear un registro
Use Upsert para insertar o actualizar un registro

Microsoft Dynamics 365

© 2017 Microsoft. Todos los derechos reservados. Copyright