다음을 통해 공유


변경 내용 추적을 사용하여 데이터를 외부 시스템과 동기화

 

게시 날짜: 2016년 11월

적용 대상: Dynamics CRM 2015

변경 내용 추적 기능은 Microsoft Dynamics 365 데이터를 데이터가 처음 추출되었거나 마지막 동기화된 이후로 변경된 데이터를 감지함으로써 효율적인 방식으로 동기화를 유지하는 방법을 제공합니다. 이전에는 이 새로운 기능이 없이는 어떤 레코드가 Dynamics 365에서 변경되었는지 확인하는 신뢰성 있고 효율적인 메커니즘을 구축하기 어려웠습니다. 이 항목에서는 엔터티에 대한 변경 내용을 검색하는 방법을 설명합니다.

참고

Microsoft Dynamics CRM Online 조직의 경우 이 기능은 조직이 Dynamics CRM Online 2015 업데이트 1로 업데이트된 경우에만 사용할 수 있습니다. 이 기능은 Dynamics CRM(온-프레미스)에서는 사용할 수 없습니다.

이 항목의 내용

엔터티에 대한 변경 추적 활성화

엔터티에 대한 변경 내용 검색

샘플 코드

엔터티에 대한 변경 추적 활성화

엔터티에 대한 변경을 검색하기 전에 해당 엔터티에 대한 변경 내용 추적 기능이 사용하도록 설정되었는지 확인하십시오. 이 기능은 사용자 지정 사용자 인터페이스(UI)를 사용하거나 ChangeTrackingEnabled 속성을 True로 설정하여 프로그래밍 방식으로 활성화할 수 있습니다. 사용자 지정 사용자 인터페이스(UI) 사용에 대한 자세한 내용은 데이터 동기화를 제어하기 위해 변경 내용 추적을 활성화를 참조하십시오.

엔터티에 대한 변경 내용 검색

엔터티에 대한 변경 내용 추적 기능이 활성화되면 RetrieveEntityChangesRequest 메시지를 사용하여 해당 엔터티에 대한 변경 내용을 검색할 수 있습니다. 이 메시지가 처음 사용되면 엔터티에 대한 모든 레코드를 반환하고 해당 데이터를 사용하여 외부 저장소를 채울 수 있습니다. 또한 다음 번에 RetrieveEntityChangesRequest 메시지를 사용하면 메시지는 돌려 보내는 버전 번호를 반환하므로 해당 버전 이후에 발생한 변경의 데이터만 반환됩니다.

엔터티에 대한 변경을 검색할 때는 다음 제약을 인식해야 합니다:

  • 변경 내용을 검색하는 데 하나의 엔터티만 추적됩니다. 버전이나 토큰 없이 변경 내용 검색을 실행하는 경우 서버는 시스템 최소 버전으로 취급하여 모든 레코드를 신규 레코드로 반환합니다. 삭제된 개체는 반환되지 않습니다.

  • 마지막 토큰이 기본값인 90일 이내에 있는 경우 변경 내용이 반환됩니다. 90일 이상인 경우 시스템은 모든 레코드를 반환합니다.

  • 클라이언트에 버전이 1인 엔터티에 대한 변경 집합이 있고 변경에 대한 다음 쿼리 전에 레코드가 만들어지고 삭제된 경우 시작할 항목이 없었다고 해도 삭제된 항목을 가져옵니다.

  • 레코드는 서버 쪽 논리에 의해 결정된 순서로 검색됩니다. 일반적으로, 최종 사용자는 항상 모든 신규 또는 업데이트된 레코드(버전 번호로 정렬된)를 먼저 받은 다음에 삭제된 레코드를 받을 것입니다.  생성 또는 업데이트된 레코드가 3000개이고 삭제된 레코드가 2000개인 경우, Dynamics 365은 5000개 레코드 모음을 반환하는데, 그것은 먼저 신규 또는 업데이트된 레코드로 구성된 3000개와 마지막으로 삭제된 레코드가 2000개를 갖습니다.

  • 새로운 또는 업데이트된 항목 컬렉션이 5000개 이상인 경우 사용자는 컬렉션 페이지 사이를 이동할 수 있습니다.

샘플 코드

다음 코드 조각은 RetrieveEntityChangesRequest 메시지를 사용하여 엔터티에 대한 변경 내용을 검색하는 방법을 보여줍니다. 전체 샘플은 변경 내용 추적을 사용하여 데이터를 외부 시스템과 동기화를 참조하십시오.


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

참고 항목

엔터티에 대한 대체 키 정의
대체 키를 사용하여 레코드 만들기
Upsert를 사용하여 레코드 삽입 또는 업데이트

© 2017 Microsoft. All rights reserved. 저작권 정보