• 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

      当然,根据不同的场景,会用到不同的过滤条件,但是不管如何过滤,需要提醒一点的是,对待还原的数据多做一次确认,以免误还原,带来更多的问题。

  • 相关阅读:
    信号
    13. 罗马数字转整数
    ES6基础-constructor与super
    关于antd-vue动态表单的问题以及解决方案
    (vue)关于在ui框架方法中传入多个参数的解决方案
    ts-4: 类型别名与interface
    ts-3:元组与类型约束
    TS-2:类型注释与类型推断、函数参数的定义与返回类型的定义、对象成员与数组成员的定义方法、类型别名与类别名
    LeetCode 141. 环形链表 | Python
    LeetCode 459. 重复的子字符串 | Python
  • 原文地址:https://www.cnblogs.com/yobyron/p/9202694.html
Copyright © 2020-2023  润新知