从 Azure Function 查询 Dataverse 审计日志

Query Dataverse audit logs from Azure Function

我对此很陌生所以请原谅我

我们有一个需求Every X days, query changes made in tables/records in dataverse and send email with these changes

据我所知,这可以通过 Power Automate 来完成,因此每 7 天 运行 一个 HTTP 触发器会触发一个 C# 函数,该函数查询审计日志并发送一封带有 table 发生了变化。

我的测试环境中有审计日志记录,它显示了对 table 所做的更改,这是我不确定的其余部分。

我遇到的主要问题是如何从 C# Azure Function 应用程序查询 dataverse 审计日志?

使用 Azure 函数

您可以使用 audits 实体集名称对 Dataverse 网络 API 执行 HTTP 请求。该请求类似于:

GET /api/data/v9.2/audits HTTP/1.1
Host: {organizationUniqueName}.{region}.dynamics.com
Authorization: Bearer eyJ0eXAi...

请注意,您需要在请求中提供持有者身份验证令牌(有关查询 Dataverse 网络的综合指南,请参阅 Use OAuth authentication with Microsoft Dataverse for details on how to do that. See Query data using the Web API API。

或者,您可以使用以下任一 NuGet 包通过 C# 查询 Dataverse。

  1. Microsoft.CrmSdk.CoreAssemblies(仅适用于 Azure 函数运行时 1.x)
  2. Microsoft.PowerPlatform.Dataverse.Client(Public 预览。适用于运行时 2.x+)

无论您选择使用哪个包,C# 代码看起来都差不多,除了 ServiceClient 适用于第二个 NuGet 包,CrmServiceClient 适用于第二个 NuGet 包第一个包裹。

var client = new CrmServiceClient(connectionString);

var auditLogsQuery =
    @"<fetch top='50' >
        <entity name='audit' >
            <filter>
            <condition attribute='operation' operator='eq' value='1' />
            <condition attribute='createdon' operator='last-x-hours' value='1' />
            </filter>
        </entity>
    </fetch>";

EntityCollection auditLogs = client.RetrieveMultiple(new FetchExpression(auditLogsQuery));

使用 Power Automate

看到你提到了Power Automate的使用,我建议你考虑使用它来满足你的要求。通过内置的 Dataverse 连接器查询 Dataverse 中的数据是 Power Automate 的原生功能。

假设您有以下 Fetch XML 查询来提取操作 Create (1) 并且操作是在过去一小时内执行的所有审核日志。

Tip: You can use the FetchXML Builder plugin in the XrmToolBox to author these queries. Querying the audit logs in the advanced find is not supported.

<fetch top="50" >
  <entity name="audit" >
    <filter>
      <condition attribute="operation" operator="eq" value="1" />
      <condition attribute="createdon" operator="last-x-hours" value="1" />
    </filter>
  </entity>
</fetch>

使用 Dataverse List rows 操作,您可以指定要查询 Audits table 并在 [=19= 中提供上述 Fetch XML 查询] 属性 的动作。请参阅下面的示例:

此查询的结果现在可在整个 Power Automate 云流程中使用。例如,这里我使用 Compose 操作为返回的审计日志写出 OperationRecord TypeRecord IDChanged Field