在审计数据方面,OData/Web API REST 端点在 PowerBI 中不是那么友好,因为审计数据在数据库中存储为分隔值。 Refer my answer in this SO thread.
如果是 javascript 或 .net 应用程序,您可以使用 RetrieveAuditDetails 函数进行迭代调用,以在使用 https://crmdev.crm.dynamics.com/api/data/v9.1/audits 获取完整列表后获取完整详细信息。这就是您在其中看到 Function 的原因。
例如:
var parameters = {};
var entity = {};
entity.id = "5701259e-59b8-e911-bcd0-00155d0d4a79";
entity.entityType = "audit";
parameters.entity = entity;
var retrieveAuditDetailsRequest = {
entity: parameters.entity,
getMetadata: function() {
return {
boundParameter: "entity",
parameterTypes: {
"entity": {
"typeName": "mscrm.audit",
"structuralProperty": 5
}
},
operationType: 1,
operationName: "RetrieveAuditDetails"
};
}
};
Xrm.WebApi.online.execute(retrieveAuditDetailsRequest).then(
function success(result) {
if (result.ok) {
var results = JSON.parse(result.responseText);
}
},
function(error) {
Xrm.Utility.alertDialog(error.message);
}
);
更新:
进一步分析 - 上述RetrieveAuditDetails 查询针对单个auditid 或以下过滤的audits 查询针对单个recordid 的输出架构之间没有太大区别。
https://crmdev.crm.dynamics.com/api/data/v9.1/audits?$filter=_objectid_value eq 449d2fd8-58b8-e911-a839-000d3a315cfc
事实是 web api 或 fetchxml,结果集无法获取包含更改的字段值的重要列 changedata - 由于限制:Retrieve can only return columns that are valid for read. Column : changedata. Entity : audit
我在 FetchXML 构建器中得到了这个:
还有另一种方法,但无论如何都与 PowerBI 不兼容,使用 RetrieveRecordChangeHistory 定位 recordid 以获取具有旧值和新值的所有审计集合。示例如下:
https://crmdev.crm.dynamics.com/api/data/v9.0/RetrieveRecordChangeHistory(Target=@Target)?@Target={%22accountid%22:%22449d2fd8-58b8-e911-a839-000d3a315cfc%22,%22@odata.type%22:%22Microsoft.Dynamics.CRM.account%22}