Usar o controle de alterações para sincronizar dados com sistemas externos
Publicado: novembro de 2016
Aplicável a: Dynamics CRM 2015
O novo recurso de controle de alterações do Microsoft Dynamics 365 oferece uma maneira de manter os dados sincronizados de uma maneira eficaz ao detectar quais dados foram alterados desde sua extração inicial ou de sua última sincronização. Anteriormente, sem esse novo recurso, era difícil criar um mecanismo confiável e eficiente para determinar quais registros tinha sido alterados no Dynamics 365. Este tópico discute como recuperar alterações para uma entidade.
Observação
Para organizações que utilizam o Microsoft Dynamics CRM Online, esse recurso só estará disponível se a sua organização tiver atualizado para a Atualização 1 do Dynamics CRM Online 2015. Este recurso não está disponível para o Dynamics CRM (local).
Neste tópico
Habilitar o controle de alterações para uma entidade
Recuperar alterações para uma entidade
Código de exemplo
Habilitar o controle de alterações para uma entidade
Antes de recuperar as alterações de uma entidade, verifique se o recurso de controle de alterações está habilitado para a entidade. Esse recurso pode ser habilitado usando a interface do usuário (IU) de personalização ou programaticamente, por meio da configuração da propriedade ChangeTrackingEnabled como True. Para obter mais informações sobre como usar a interface do usuário (IU) de personalização, consulte Habilitar o controle de alterações para a sincronização de dados de controle.
Recuperar alterações para uma entidade
Quando o controle de alterações estiver habilitado para uma entidade, você poderá usar a mensagem RetrieveEntityChangesRequest para recuperar as alterações dessa entidade. Na primeira vez em que a mensagem é usada, ela retorna os registros da entidade e os dados que podem ser usados para preencher o armazenamento externo. A mensagem também retorna um número da versão que será enviado de volta na próxima utilização da mensagem RetrieveEntityChangesRequest, de forma que somente os dados das alterações ocorridas a partir dessa versão sejam retornados.
Você deve estar ciente das seguintes restrições ao recuperar alterações de uma entidade:
Somente uma entidade será controlada na recuperação de alterações. Se recuperar alterações for executado com sem versão / ou token, o servidor o tratará como a versão mínima do sistema, retornando todos os registros como novos. Os objetos excluídos não serão retornados.
As alterações serão retornadas se o último token estiver dentro de um valor padrão de 90 dias. Se for maior do que 90 dias, o sistema retornará todos os registros.
Se um cliente tiver um conjunto de alterações para uma entidade, digamos a versão 1, um registro será criado excluído antes da próxima consulta de alterações, elas terão o item excluído mesmo se não tiverem o item para começar.
Os registros são recuperados na ordem determinada pela lógica do servidor. Geralmente, o usuário final obterá sempre registros novos ou atualizados primeiro (classificado pelo número de versão) acompanhados por registros excluídos. Se houver 3000 registros criados ou atualizados e 2000 registros excluídos; Dynamics 365 devolve uma coleção de 5000 registros, que tem as primeiras 3000 entradas com registros novos ou atualizados e as últimas 2000 entradas com registros excluídos.
Se a coleção de itens novos ou atualizados for maior do que 5000, o usuário poderá navegar pela coleção.
Código de exemplo
O trecho de código a seguir mostra como a mensagem RetrieveEntityChangesRequest é usada para recuperar as alterações de uma entidade. Para obter um exemplo completo, consulte Sincronizar dados com sistemas externos usando o controle de alterações.
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;
}
Confira Também
Definir chaves alternativas para uma entidade
Usar uma chave alternativa para criar um registro
Usar Upsert para inserir ou atualizar um registro
© 2017 Microsoft. Todos os direitos reservados. Direitos autorais