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还原被删除的数据的更多相关文章

  1. RookeyFrame 还原 软删除的数据 怎么硬删除 或者 怎么还原

     列表搜索栏上有个删除图标,可以进入回收站   如图:

  2. Dynamics 365 Online-Delete Audit History Data

    Dynamics 365 CE自带的Audit功能,虽然不会给我们的业务流程带来显著变化,但是这个功能对于我们追溯数据变化的历史,诊断定制触发的执行,以及数据还原等,都是不可或缺的关键先生.尤其是涉及 ...

  3. 利用Fiddler修改请求信息通过Web API执行Dynamics 365操作(Action)实例

    本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复261或者20170724可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  4. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之一:准备工作

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  5. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十二:新增SQL Server可用性副本

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  6. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之六:安装后端服务器

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  7. Dynamics 365利用Web API对视图进行查询

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  8. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十三:从可用性组中移除副本然后重新添加

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十一:SQL Server配置Always On后D365的配置更改

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

随机推荐

  1. idea中@Data标签getset不起作用

    spring cloud中使用@Data标签,不用手动添加get set方法,但是如果项目中其他类中使用getset方法,如果报错,原因是idea中没有添加Lombok插件,添加上插件便可以解决.截图 ...

  2. 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

    第33章      SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...

  3. [Swift]LeetCode833. 字符串中的查找与替换 | Find And Replace in String

    To some string S, we will perform some replacement operations that replace groups of letters with ne ...

  4. HBase之行信息简析

    这一节我们简单介绍一下HBase的行信息.文章前半部分会对照源码介绍,后面会有我自己画的图,大家如果对这些信息已经比较了解了,跳过源码对照部分看后面的图,加深一下印象. 下面简单分析一下HBase中对 ...

  5. 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题

    今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一.缓存雪崩 1.1什么是缓存雪崩? 回顾一下我们为什么要用缓存(Redis ...

  6. 记一次尴尬的git reset丢失分支故障

    最近...似乎一直在踩坑... 也不是什么故障,只是把一个分支的功能弄没了,之后在reflog里找到又恢复了. 产生原因是有同事错误地把分支B merge到了分支A并push. 我直接在分支A上res ...

  7. 【Spark篇】---Spark中Master-HA和historyServer的搭建和应用

    一.前述 本节讲述Spark Master的HA的搭建,为的是防止单点故障. Spark-UI 的使用介绍,可以更好的监控Spark应用程序的执行. 二.具体细节 1.Master HA 1.Mast ...

  8. Error: Cannot fit requested classes in a single dex file (# methods: 149346 > 65536)

    引用第三方库的jar文件,都有可能会触发这个错误.解决方案如下: 参考<[Android]Cannot fit requested classes in a single dex file. T ...

  9. Java开发知识之JavaIO操作缓存操作

    目录 带缓存的输入/输出流 一丶简介 二丶BufferedInputStream 与 BufferedOutputString类. 2.BufferOutputStream类. 三丶BufferedR ...

  10. Java开发知识之Java的异常处理

    Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...