使用更改跟踪将数据与外部系统同步
发布日期: 2017年1月
适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online
Microsoft Dynamics 365 的更改跟踪功能提供了永久保持数据同步的方法:同时从最初解压缩或最后被同步开始就监测被更改的数据。 以前,没有此新功能,创建一个可靠而有效的机制以确定 Dynamics 365 中的哪些记录被更改非常困难。 本主题讨论如何检索实体的更改。
本主题内容
为实体启用更改跟踪
检索实体的更改
示例代码
为实体启用更改跟踪
在检索实体的更改之前,请确保更改跟踪功能已对该实体启用。 此功能可使用自定义用户界面 (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 插入或更新记录
Microsoft Dynamics 365
© 2017 Microsoft。 保留所有权利。 版权