Dynamics 365 CE自带的Audit功能,虽然不会给我们的业务流程带来显著变化,但是这个功能对于我们追溯数据变化的历史,诊断定制触发的执行,以及数据还原等,都是不可或缺的关键先生。尤其是涉及到多部门合作,在数据变化方面产生“矛盾”的时候,这个功能将成为关键的证据。但是万事有利必有弊,这些Audit log,在SQL里对应的是表记录,也就是说,需要消耗的你的Storage资源。在Dynamics 365 CE从V8升级到V9之后,你也许会发现升级前够用的Storage,在升级之后不够用了,这个的原因肯定方方面面都有,其中一个可能的情况就是Audit log占用的Storage变多了。如果在对环境分析之后,发现真的是由于Audit log的事,那么就继续我们这次的主题,Delete Audit。

  CE自带的有Audit Log Management管理功能,里面会显示每个季度的Audit Log Size,并且还提供Delete功能。

  如果你发现Audit Size太大,可以考虑先把时间比较久的Audit删除掉,以释放一部分Storage。那么如果Audit Size是最近一个季度的比较大呢?由于Audit Log Management的删除功能只是以时间段为条件,不能再细化到Entity级别,这就导致我们需要考虑如何删除某个Entity的Audit,以及如何删除某个Entity,某个时间段之前的Audit。

  Dynamics 365目前关于Delete Audit提供了两个API:DeleteRecordChangeHistoryRequest和DeleteAuditDataRequest。

  DeleteAuditDataRequest是V9以前就有的API,具体的功能有点类似上面的Audit Log Management。就是给一个EndDate,然后发送请求删除这个时间点之前所有的Audit。下面给个官方Code帮助理解:

// Get the list of audit partitions.
var partitionRequest =(RetrieveAuditPartitionListResponse)svc.Execute(new RetrieveAuditPartitionListRequest());
AuditPartitionDetailCollection partitions = partitionRequest.AuditPartitionDetailCollection; // Create a delete request with an end date earlier than possible.
var deleteRequest = new DeleteAuditDataRequest();
deleteRequest.EndDate = new DateTime(, , ); // Check if partitions are not supported as is the case with SQL Server Standard edition.
if (partitions.IsLogicalCollection)
{
// Delete all audit records created up until now.
deleteRequest.EndDate = DateTime.Now;
} // Otherwise, delete all partitions that are older than the current partition.
// Hint: The partitions in the collection are returned in sorted order where the
// partition with the oldest end date is at index 0.
else
{
for (int n = partitions.Count - ; n >= ; --n)
{
if (partitions[n].EndDate<DateTime.Now && partitions[n].EndDate>deleteRequest.EndDate)
{
deleteRequest.EndDate=(DateTime)partitions[n].EndDate;
break;
}
}
} // Delete the audit records.
if (deleteRequest.EndDate != new DateTime(, , ))
{
svc.Execute(deleteRequest);
Console.WriteLine("Audit records have been deleted.");
}
else
Console.WriteLine("There were no audit records that could be deleted.");

  这个API在某些时候可能有用,比如想指定具体的时间点,而不是一个季度一个季度地去删除。

  DeleteRecordChangeHistoryRequest是V9以后才有的API,也就是说在使用这个API之前,你得先把你的XRM Dll升级到对应的版本,以及把.Net Framework版本更新到4.6.2,要不你会发现这个对象在使用的时候不存在。这个API的作用,是删除某条具体Entity Record的所有Audit记录。用法是指定Target属性即可,这个是EntityReference对象。

  由于Dynamics 365不支持直接删除Audit记录的操作,就是你如果想先获取Audit记录,然后调用Delete方法去删除某条具体的Audit Record,这个是行不通的。所以综上来看,我们只有Audit Log Management以及两个API可用。那么再回到上面的问题:如何删除某个Entity的Audit,以及如何删除某个Entity,某个时间段之前的Audit?目前来看,只好利用DeleteRecordChangeHistoryRequest来迂回实现了。

  

Dynamics 365 Online-Delete Audit History Data的更多相关文章

  1. Dynamics 365-如何利用Audit History还原被删除的数据

    Audit History,常被用来记录record的日常操作信息,包括创建,更新,删除.这是一个非常实用的功能,想想看,如果数据被误修改了,通过Audit History,可以很容易地找到修改前的数 ...

  2. Use SQL to Query Data from CDS and Dynamics 365 CE

    from : https://powerobjects.com/2020/05/20/use-sql-to-query-data-from-cds-and-dynamics-365-ce/ Have ...

  3. Dynamics 365 for Team Members Description

    Dynamics 365 for Team Members, Business edition The Dynamics 365 for Team Members, Business edition ...

  4. Dynamics 365中的批量删除作业执行频率可以高于每天一次吗?

    微软动态CRM专家罗勇 ,回复317或者20190314可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 我先来做一个例子,登 ...

  5. Dynamics 365 CE中AsyncOperationBase表记录太多,影响系统性能怎么办?

    微软动态CRM专家罗勇 ,回复311或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要是根据微软官 ...

  6. 安装完成Dynamics 365 CE后别忘了更改维护作业的运行时间

    摘要: 微软动态CRM专家罗勇 ,回复309或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 安装完毕Dy ...

  7. Dynamics 365 Online-Microsoft Flow

    自December 2016 update for Dynamics 365 (online)之后的Online版本,Dynamics 365有了个新Feature:Microsoft Flow Co ...

  8. 可以设置实体在Dynamics 365高级查找中不显示吗?

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

  9. Introduction to Microsoft Dynamics 365 licensing

    Microsoft Dynamics 365 will be released on November 1. In preparation for that, Scott Guthrie hosted ...

随机推荐

  1. 5. abp集成asp.net core

    一.前言 参照前篇<4. abp中的asp.net core模块剖析>,首先放张图,这也是asp.net core框架上MVC模块的扩展点 二.abp的mvc对象 AbpAspNetCor ...

  2. 面试连环炮系列(十一):说说你们的分布式ID设计方案

    说说你们的分布式ID设计方案 我们采用Snowflake算法,生成一个64bit的数字,64bit被划分成多个段,分别表示时间戳.机器编码.序号. 41位的时间序列(精确到毫秒,41位的长度可以使用6 ...

  3. Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记

    背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工 ...

  4. Linux使用alias自定义命令自定义快捷键

    比如我经常需要进入一个很深的目录如 /home/walking/weblogic/devlop/script/application/.../... 这样每次进入这个目录操作是不是很麻烦,可能有时候记 ...

  5. Vue-cli项目部署到Nginx

    项目环境: 0. Nginx使用 以windows版为例,下载niginx压缩包并解压到任意目录,双击nginx.exe,在浏览器中访问http://localhost,如果出现Welcome to ...

  6. DotNet Core中使用dapper

    我们都知道,ORM全称是,Object Relationship Mapper,即,对象关系映射.也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架叫做dappe ...

  7. Mac Electron 应用的签名(signature)和公证(notarization)

    背景 在MacOS 10.15之前,应用如果没有签名,那么首次打开时就会弹出这种“恶意软件”的提示框. 这时只要应用签名了,就不会弹这个框. 但在MacOS 10.14.5之后,应用如果没有公证(简单 ...

  8. diango中的MTV——FBV/CBV以及装饰器的复用问题解决

    MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...

  9. dp习题

    仅收录有意思的题目 数的划分 导弹拦截 : LIS的两种优化 教主的花园:将不同的情况分类,最后取max 午餐 & 挂饰: 需要排序 挂饰:0-1背包处理负数体积 投资的最大效益 : 完全背包 ...

  10. [译]Vulkan教程(20)重建交换链

    [译]Vulkan教程(20)重建交换链 Swap chain recreation 重建交换链 Introduction 入门 The application we have now success ...