c# - 日期之间所有帐户的 MS Dynamics 审计历史记录
问题描述
我有这段代码,它将提取提到的特定 Guid 的审计历史详细信息(请参阅第二条注释行):
//Create a new RetrieveAttributeChangeHistoryRequest
RetrieveAttributeChangeHistoryRequest req = new RetrieveAttributeChangeHistoryRequest();
//Set the target Entity......... Needs to be modified so ALL account records are returned instead of the specific one mentioned
req.Target = new EntityReference("accounts", new Guid("468f8db5-4f98-eb11-57ee-0006ffc2587a"));
//Set the attribute you want to retrieve specifically........ needs to be modified so that only records between two dates are returned
req.AttributeLogicalName = "credit_limit";
//Execute the request against the OrgService
RetrieveAttributeChangeHistoryResponse resp = (RetrieveAttributeChangeHistoryResponse)_service.Execute(req);
AuditDetailCollection details = resp.AuditDetailCollection;
foreach (var detail in details.AuditDetails)
{
if (detail.GetType() == typeof(AttributeAuditDetail))
{
AttributeAuditDetail attributeDetail = (AttributeAuditDetail)detail;
}
}
我需要修改它,以便它循环遍历在两个日期(例如:4 月 1 日至 4 月 7 日)之间创建的所有帐户记录,而不是提供的一个特定 Guid。Microsoft 没有提供可以执行此操作的示例。
感谢您的帮助。
解决方案
尝试下面的代码应该可以工作,也许是我这边的错字,但应该可以
// Define Condition Values
var query_createdon = "2020-07-15T00:00:00+02:00";
var query_createdon1 = "2021-02-12T00:00:00+01:00";
// Instantiate QueryExpression query
var query = new QueryExpression("account");
// Add columns to query.ColumnSet
query.ColumnSet.AddColumns("createdon", "name", "accountid");
// Define filter query.Criteria
query.Criteria.AddCondition("createdon", ConditionOperator.GreaterThan, query_createdon);
query.Criteria.AddCondition("createdon", ConditionOperator.LessThan, query_createdon1);
EntityCollection _accounts = _service.RetrieveMultiple(query);
foreach(var _account in _accounts.Entities){
//Create a new RetrieveAttributeChangeHistoryRequest
RetrieveAttributeChangeHistoryRequest req = new RetrieveAttributeChangeHistoryRequest();
//Set the target Entity......... Needs to be modified so ALL account records are returned instead of the specific one mentioned
req.Target = new EntityReference("accounts", _account.Id);
//Set the attribute you want to retrieve specifically........ needs to be modified so that only records between two dates are returned
req.AttributeLogicalName = "credit_limit";
//Execute the request against the OrgService
RetrieveAttributeChangeHistoryResponse resp = (RetrieveAttributeChangeHistoryResponse)_service.Execute(req);
AuditDetailCollection details = resp.AuditDetailCollection;
foreach (var detail in details.AuditDetails)
{
if (detail.GetType() == typeof(AttributeAuditDetail))
{
AttributeAuditDetail attributeDetail = (AttributeAuditDetail)detail;
var recordID = "(no value)";
var recordName = "(no value)";
var changedBy = "(no value)";
if (attributeDetail.OldValue.Contains("credit_limit"))
/// need to set the value of recordID in here but I don't know how
/// need to set the value of recordName in here but I don't know how
/// need to set the value of changedBy in here but I don't know how
Console.WriteLine("Record ID: "+recordID); /// returns (no value) because I don't know how to get the recordID value
Console.WriteLine("Record Name: "+recordName); /// returns (no value) because I don't know how to get the recordName value
Console.WriteLine("Changed By: "+changedBy); /// returns (no value) because I don't know how to get the changed by value
}
}
}
简而言之,您需要的是介于两者之间的两个日期并获取所有帐户。拥有所有这些帐户后,您需要遍历并获取每个帐户的审计历史记录。
注意:如果您要获取超过 5K 条记录,您可能需要查看分页,因为默认情况下 crm 仅检索 5k 条记录
// Define Condition Values
var query_createdon = "2020-07-15T00:00:00+02:00";
var query_createdon1 = "2021-02-12T00:00:00+01:00";
// Instantiate QueryExpression query
var query = new QueryExpression("account");
// Add columns to query.ColumnSet
query.ColumnSet.AddColumns("createdon", "name", "accountid");
// Define filter query.Criteria
query.Criteria.AddCondition("createdon", ConditionOperator.GreaterThan, query_createdon);
query.Criteria.AddCondition("createdon", ConditionOperator.LessThan, query_createdon1);
EntityCollection _accounts = _service.RetrieveMultiple(query);
推荐阅读
- javascript - 如何删除 html 中的脚本标签
- c++ - 如何使用自定义值创建原始 mpeg 标头
- typescript - TypeScript 具有 strictNullChecks 和检测空值的功能
- node.js - 无法从节点 js 客户端 + rest api spring boot 重定向到响应数据
- excel - 如何在 SPSS 和/或 excel 中将多列数据合并为两列?
- clojure - 循环遍历向量的向量并从 Clojure 中的向量中删除元素
- python - 以当前日期和时间格式保存文件
- scala - 我可以有一个带有默认/硬编码值的案例类吗
- android - 颤振复选框:当我勾选一个元素时,所有其他元素也被选中
- android - 如何强制显示通知的内容文本