Dynamics 365 Customer Enagement中的更改跟踪(change tracking)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复349或者20190810可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
Dynamics 365 CRM 从2016版本起新增了一个新的消息叫RetrieveEntityChangesRequest,这个消息可以监控到CRM中数据自上次获取以来的变更。、首先需要为实体启用更改跟踪,可以参考文档 启用更改跟踪以控制数据同步 来做,其实很简单,选中实体的 更改跟踪 属性保存并发布即可。
为了测试,我先准备如下记录:
代码如下:
- using Microsoft.Xrm.Client;
- using Microsoft.Xrm.Client.Services;
- using Microsoft.Xrm.Sdk;
- using Microsoft.Xrm.Sdk.Messages;
- using Microsoft.Xrm.Sdk.Query;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.ServiceModel;
- namespace LuoYongLab
- {
- class Program
- {
- static void Main(string[] args)
- {
- try
- {
- var orgService = new OrganizationService(new CrmConnection("CRM"));
- string dataToken, changedType;
- List<Entity> initialrecords = new List<Entity>();
- RetrieveEntityChangesRequest request = new RetrieveEntityChangesRequest();
- request.EntityName = "ly_test";
- request.Columns = new ColumnSet("ly_name", "ly_alternatekey");
- request.PageInfo = new PagingInfo() { Count = , PageNumber = , ReturnTotalRecordCount = false };
- request.DataVersion = "565904!01/05/2016 06:57:22";
- Console.WriteLine("request.DataVersion = string.Empty;最初的同步,获取所有记录");
- while (true)
- {
- RetrieveEntityChangesResponse response = (RetrieveEntityChangesResponse)orgService.Execute(request);
- if (response.EntityChanges.Changes.Count >= )
- {
- foreach (var change in response.EntityChanges.Changes)
- {
- if (change.Type == ChangeType.NewOrUpdated)
- {
- NewOrUpdatedItem changedItem = (NewOrUpdatedItem)change;
- Entity changedRecord = changedItem.NewOrUpdatedEntity;
- if (changedRecord != null)
- {
- string firstName = changedRecord.GetAttributeValue<string>("ly_name");
- changedType = changedItem.Type.ToString();
- Console.WriteLine("变更类型={0} 名称={1}", changedType, firstName);
- }
- }
- else if (change.Type == ChangeType.RemoveOrDeleted)
- {
- RemovedOrDeletedItem removedItem = (RemovedOrDeletedItem)change;
- EntityReference removedRecord = removedItem.RemovedItem;
- if (removedRecord != null)
- {
- Guid id = removedRecord.Id;
- changedType = removedItem.Type.ToString();
- Console.WriteLine("变更类型={0} Id={1}", changedType, id.ToString());
- }
- }
- }
- }
- else
- {
- Console.WriteLine("没有记录发生了变更!");
- }
- if (!response.EntityChanges.MoreRecords)
- {
- dataToken = response.EntityChanges.DataToken;
- Console.WriteLine("本次获取记录变更时获取到的DataToken={0}", dataToken);
- using (StreamWriter sw = File.AppendText(@"c:\luoyong.txt"))
- {
- sw.WriteLine(string.Format("本次获取记录变更时获取到的DataToken= {0}", dataToken));
- }
- break;
- }
- request.PageInfo.PageNumber++;
- request.PageInfo.PagingCookie = response.EntityChanges.PagingCookie;
- }
- Console.WriteLine("程序运行完成");
- Console.ReadKey();
- }
- catch (FaultException ex)
- {
- Console.WriteLine("程序出现异常:ex.Message=" + ex.Message);
- Console.WriteLine("ex.StackTrace=" + ex.StackTrace);
- Console.ReadKey();
- }
- }
- }
- }
我运行代码后截图显示:
然后我将代码中的 request.DataVersion 的值改成获取到的值565904!01/05/2016 06:55:25后,运行结果如下,结果正确。
然后我新增了记录,修改了记录,删除了记录看看结果。结果正显示我修改了两条记录,新增了一条记录,删除了两条记录,其中一条是之前存在的被删除了,另外一条是新增后然后删除了,结果是正确的。结论是,这个时间段的新增然后删除的记录只会显示在删除里面,不会显示曾经新增过,所以要和外部系统集成的时候,删除对方系统记录的时候如果不存在也不要大惊小怪。
更多信息请参考文档: Use change tracking to synchronize data with external systems
Dynamics 365 Customer Enagement中的更改跟踪(change tracking)的更多相关文章
- SQL Server审计功能入门:更改跟踪(Change Tracking)
原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...
- Dynamics 365 Customer Engagement中插件的调试
微软动态CRM专家罗勇 ,回复319或者20190319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要根据官方的教 ...
- Dynamics 365 Customer Engagement 中对API的调整内容分享
当前版本中弃用了以下客户端 API 以重新组织 Xrm 客户端 API 对象模型,从而更好地满足以下需求:使用同一客户端脚本而不必基于上下文或基于运行这些脚本的客户端(Web 客户端或新的统一接口)来 ...
- Dynamics 365 Customer Engagement中使用JavaScript和C#调用操作Action示例
微软动态CRM专家罗勇 ,回复334或者20190509可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Action (操作)是流程的一种,可以在工作流中调用,可以使用 ...
- 介绍Dynamics 365 Customer Engagement中的备用键(alternate key)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 配置基于服务器认证的Dynamics 365 Customer Engagement和SharePoint Online集成
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 更改Dynamics 365 Customer Engagement本地部署的高级配置
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Dynamics 365 Customer Engagement安装FAQ
微软动态CRM专家罗勇 ,回复310或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文参考了包括但不限 ...
随机推荐
- Java修炼——面向对象的三大特征_封装的使用
封装的作用含义:程序设计追求"高内聚,低耦合" 1.提高代码的安全性 2.提高代码的复用性 3."高内聚":封装细节,便于修改内部代码,提高可 维护性 4.&q ...
- Ceph分布式存储-总
Ceph分布式存储-总 目录: Ceph基本组成及原理 Ceph之块存储 Ceph之文件存储 Ceph之对象存储 Ceph之实际应用 Ceph之总结 一.Ceph基本组成及原理 1.块存储.文件存储. ...
- mui 顶部选项卡的两种切换方式
mui 顶部选项卡的两种切换方式 第一种main页面 <!DOCTYPE html> <html> <head> <meta charset="ut ...
- JavaScript 逻辑与(&&) 与 逻辑或(||) 运算规则
逻辑与(&&) 逻辑与(&&)操作可以应用于任何的操作类型,不仅仅是布尔值, 在有一个操作数不是布尔值的情况下,&&操作符就不一定返回布尔值:遵循下面规 ...
- 记录一次VMware与xshell远程链接的总结
VMware 与xshell链接 说在前面 用了一年多的virtualbox,虚拟机环境的配置算是理清了,可最近参加红帽培训,大家用的都是VMware,想想我也试试吧,刚好再熟悉一下,于是就捣鼓了很久 ...
- 大数据学习笔记——Spark工作机制以及API详解
Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调 ...
- 【ZooKeeper系列】2.用Java实现ZooKeeper API的调用
温馨提示:在这里我再次提个小要求,希望大家能习惯看官方文档,文档虽然是英文但用词都比较简单,基本都能看懂文档表达的意思.授之以鱼不如授之以渔的道理相信大家都明白,也希望通过猿人谷的这个ZooKeepe ...
- 【Jackson】使用学习
Jackson学习 文档:http://tutorials.jenkov.com/java-json/index.html https://github.com/FasterXML/jackson/w ...
- Linux sudo用户提权与日志审计
一.格式说明及常用配置选项 格式: 用户或组 主机=授权可以使用哪个用户的权限 可以执行的命令 User_Alias 用户定义别名(别名可以是用户,用户组(用户组前面要加%))例:User_Alias ...
- django----csrf跨站请求伪造 auth组件 settings源码 importlib模块
目录 importlib模块 csrf跨站请求伪造 form表单发送 ajax发送 csrf装饰器 auth模块 如何创建超级用户(root) 创建用户 校验用户名和密码是否正确 保存用户登录状态 判 ...