Dynamics 365-如何利用Audit History还原被删除的数据
Audit History,常被用来记录record的日常操作信息,包括创建,更新,删除。这是一个非常实用的功能,想想看,如果数据被误修改了,通过Audit History,可以很容易地找到修改前的数据值,然后还原回来;不仅如此,如果数据有异常,也可以通过Audit History,看看数据是由谁在什么时候给修改了。
关于如何开启Audit,以及如何自定义配置Auditing,这里不再多赘述,这些基础操作都在Settings -> Auditing 里,网上也有不少这方面的介绍

这里着重想说的,是在误删了数据之后,如何借用Audit功能,还原数据。
一般情况下,我们查看数据的Audit信息,是通过具体record的Audit History。

但是如果这条record已经被删除了呢,上面的操作就行不通了。
这个时候,可以看第一张截图,里面有个Audit Summary View。在这里,我们将会有所发现。

这里是其中的一条删除的相关记录,可以看到,最后的操作是Delete。
如果你打开这条操作记录,里面会显示这条记录在删除前的字段信息,以及是谁在什么时候,执行了删除操作。
现在,我们已经有了这条删除操作的记录,那么如何还原这条记录,大致的思路也就很清晰了:
1. 获取Audit操作记录
2. 根据Audit中待还原记录的字段信息,还原数据
下面是具体的代码实现:
//获取所有的相关的Audit记录
var auditrecords = service.RetrieveMultiple(new FetchExpression(fetchXML));
foreach (Entityaudit in auditrecords.Entities)
{
//根据Audit Id查询Audit Details
RetrieveAuditDetailsRequest auditDetailsRequest = new RetrieveAuditDetailsRequest();
auditDetailsRequest.AuditId = audit.Id;
RetrieveAuditDetailsResponseauditDetailsResponse =
(RetrieveAuditDetailsResponse)service.Execute(auditDetailsRequest);
//待还原对象是Audit Detail的OldValue
AuditDetail auditDetail = auditDetailsResponse.AuditDetail;
AttributeAuditDetail attributeAuditDetail = auditDetail as AttributeAuditDetail;
//还原对象
service.Create(attributeAuditDetail.OldValue);
}
需要注意的是,在过滤Audit记录的时候,以上面的例子来看,我们想找的是对某个Entity的delete操作,那么条件包含如下:
1. Delete操作。在Audit Summary View中对Operation Filter的时候,可以看到有4个选项

其实Operation是一个OptionSet:Create -> 1; Update -> 2; Delete -> 3; Access -> 4
logicalName: operation
2. 某个Entity。这里需要的是Entity的OTC值
logicalName:objecttypecode
当然,根据不同的场景,会用到不同的过滤条件,但是不管如何过滤,需要提醒一点的是,对待还原的数据多做一次确认,以免误还原,带来更多的问题。
Dynamics 365-如何利用Audit History还原被删除的数据的更多相关文章
- RookeyFrame 还原 软删除的数据 怎么硬删除 或者 怎么还原
列表搜索栏上有个删除图标,可以进入回收站 如图:
- Dynamics 365 Online-Delete Audit History Data
Dynamics 365 CE自带的Audit功能,虽然不会给我们的业务流程带来显著变化,但是这个功能对于我们追溯数据变化的历史,诊断定制触发的执行,以及数据还原等,都是不可或缺的关键先生.尤其是涉及 ...
- 利用Fiddler修改请求信息通过Web API执行Dynamics 365操作(Action)实例
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复261或者20170724可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之一:准备工作
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十二:新增SQL Server可用性副本
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之六:安装后端服务器
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Dynamics 365利用Web API对视图进行查询
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十三:从可用性组中移除副本然后重新添加
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十一:SQL Server配置Always On后D365的配置更改
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
随机推荐
- 一次 HTTP 请求响应过程的完整解析
因特网无疑是人类有史以来最伟大的设计,它互联了全球数亿台计算机.通讯设备,即便位于地球两端的用户也可在顷刻间完成通讯. 可以说『协议』是支撑这么一个庞大而复杂的系统有条不紊运作的核心,而所谓『协议』就 ...
- 【RL-TCPnet网络教程】第21章 RL-TCPnet之高效的事件触发框架
第21章 RL-TCPnet之高效的事件触发框架 本章节为大家讲解高效的事件触发框架实现方法,BSD Socket编程和后面章节要讲解到的FTP.TFTP和HTTP等都非常适合使用这种方式 ...
- [Swift]LeetCode583. 两个字符串的删除操作 | Delete Operation for Two Strings
Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 t ...
- 写给需要的Javaer-大数据学习路线篇
已经更新100+篇~ 关注公众号,BAT大神带你飞~ 听说你还在写Java,看Spring,看Dubbo,今天SpringCloud, 明天Dubbo3.X新版本... 10个开发9个半在写Java后 ...
- Java中的数组添加,数组相关代码
private static void demo() { // TODO Auto-generated method stub /** * @author square 凉 * @功能 实 ...
- 机器学习入门16 - 多类别神经网络 (Multi-Class Neural Networks)
原文链接:https://developers.google.com/machine-learning/crash-course/multi-class-neural-networks/ 多类别分类, ...
- Python档案袋( Socket 与 ScoketServer 通信 )
Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢.其中[recv(1024)]表示从缓冲区里取最大为1024个字节,但实际 ...
- 还在使用SimpleDateFormat?你的项目崩没?
如果是在多线程环境下,就需要注意了. 要点: 1.加Synchronized同步: 2.使用ThreadLocal: 3.jdk8使用DateTimeFormatter替代SimpleDateForm ...
- JSON 序列化的时候忽略无效的属性值
例如我拥有以下代码. public class NewObject { public int? TestValue { get; set; } public int? Age { get; set; ...
- tensorflow 1.0 学习:用别人训练好的模型来进行图像分类
谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类. 下载地址:https://storage.googleapis.com/down ...