我对此很陌生,所以请原谅我
我们有一个需求Every X days, query changes made in tables/records in dataverse and send email with these changes
根据我的计算结果,这可以用完成,所以每7天运行一个HTTP触发器,触发一个C#函数,该函数查询审计日志,并发送一封电子邮件,其中包含已更改的内容表。
我在我的测试环境中进行了审计日志记录,它显示了对一个表所做的更改,这只是我不确定的其余部分。
我遇到的主要问题是如何从C# Azure函数应用程序中查询dataverse审计日志?
发布于 2021-06-24 22:12:55
使用Azure函数
您可以使用audits实体集名称对Dataverse执行HTTP请求。请求看起来类似于:
GET /api/data/v9.2/audits HTTP/1.1
Host: {organizationUniqueName}.{region}.dynamics.com
Authorization: Bearer eyJ0eXAi...注意,您需要在请求中提供一个承载身份验证令牌(有关如何这样做的详细信息,请参见在Microsoft中使用OAuth身份验证。有关查询Dataverse的全面指南,请参阅使用Web查询数据。
或者,您可以使用下面的NuGet包中的任何一个来使用C#查询Dataverse。
考虑到您选择使用的包,C#代码看起来大致相同,除了适用于第二个NuGet包的ServiceClient和应用于第一个包的CrmServiceClient之外。
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,我建议您考虑使用它来满足您的需求。在Dataverse中查询数据是Power通过内置的Dataverse连接器自动生成的.
假设您有下面的获取XML查询来提取操作为Create (1)并在最后一小时内执行的所有审计日志。
提示:您可以使用XrmToolBox中的XrmToolBox插件来编写这些查询。不支持在高级查找中查询审计日志。
<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表,并在操作的Fetch Xml Query属性中提供上述Fetch Xml Query查询。关于一个例子,见下文:

这个查询的结果现在可以在Power自动云流中使用。例如,这里我使用Compose操作为返回的审计日志编写Operation、Record Type、Record ID和Changed Field。

https://stackoverflow.com/questions/68103354
复制相似问题