Dynamics 365 Online-Delete Audit History Data
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的更多相关文章
- Dynamics 365-如何利用Audit History还原被删除的数据
Audit History,常被用来记录record的日常操作信息,包括创建,更新,删除.这是一个非常实用的功能,想想看,如果数据被误修改了,通过Audit History,可以很容易地找到修改前的数 ...
- 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 ...
- Dynamics 365 for Team Members Description
Dynamics 365 for Team Members, Business edition The Dynamics 365 for Team Members, Business edition ...
- Dynamics 365中的批量删除作业执行频率可以高于每天一次吗?
微软动态CRM专家罗勇 ,回复317或者20190314可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 我先来做一个例子,登 ...
- Dynamics 365 CE中AsyncOperationBase表记录太多,影响系统性能怎么办?
微软动态CRM专家罗勇 ,回复311或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要是根据微软官 ...
- 安装完成Dynamics 365 CE后别忘了更改维护作业的运行时间
摘要: 微软动态CRM专家罗勇 ,回复309或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 安装完毕Dy ...
- Dynamics 365 Online-Microsoft Flow
自December 2016 update for Dynamics 365 (online)之后的Online版本,Dynamics 365有了个新Feature:Microsoft Flow Co ...
- 可以设置实体在Dynamics 365高级查找中不显示吗?
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Introduction to Microsoft Dynamics 365 licensing
Microsoft Dynamics 365 will be released on November 1. In preparation for that, Scott Guthrie hosted ...
随机推荐
- Python文件的操作函数的使用
字符编码 二进制和字符之间的转换过程 --> 字符编码 ascii,gbk,shit,fuck 每个国家都有自己的编码方式 美国电脑内存中的编码方式为ascii ; 中国电脑内存中的编码方式为g ...
- Sqlite—查询语句(Select)
基本语法如下 sqlite> select * from tb_user; sqlite> select userid,username from tb_user; 格式化的查询输出 sq ...
- vue学习笔记(十)路由
前言 在上一篇博客vue学习笔记(九)vue-cli中的组件通信内容中,我们学习组件通信的相关内容和进行了一些组件通信的小练习,相信大家已经掌握了vue-cli中的组件通信,而本篇博客将会带你更上一层 ...
- js 从两道面试题加深理解闭包与箭头函数中的this
壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ...
- php的swoole和rpc区别
RPC是远程过程调用(Remote Procedure Call)的缩写形式. SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自 ...
- 分布式全局唯一ID的实现
分布式全局唯一ID的实现 前言 上周末考完试,这周正好把工作整理整理,然后也把之前的一些素材,整理一番,也当自己再学习一番. 一方面正好最近看到几篇这方面的文章,另一方面也是正好工作上有所涉及,所以决 ...
- k8s 使用 Init Container 确保依赖的服务已经启动
k8s 使用 Init Container 确保依赖的服务已经启动 Intro 最近 helm 3 正式发布了,dotnetcore 3.1 也正式发布了,最近打算把我的活动室预约项目做一个升级,项目 ...
- 案例——UDP聊天
UDP聊天案例 做一个网络编程相关的案例,想着用利用UDP的快速且不用连接的优点做一个聊天室,我们一个聊天程序需要可以接收消息,也要可以发送消息,所以我们的DatagramSocket对象不但需要 ...
- ubuntu 安装在硬盘与配置
安装 下载Ubuntu ISO文件,使用rufus制作启动U盘,重启选择这个U盘启动. 用rufus做启动盘时,提示缺少文件,点下载,找到log,进入找到下载地址,手动下载,并放到软件所在路径下的文件 ...
- bayaim——达梦数据库安装DM7-单实例-Centos7.txt
bay——安装_达梦DM7-单实例-Centos7.txt IP:10.20.100.22 ---------------------------------------------1.下载 注意:要 ...