如何检测 Dataverse 表记录的变化
Posted
技术标签:
【中文标题】如何检测 Dataverse 表记录的变化【英文标题】:How to detect changes in records of Dataverse tables 【发布时间】:2022-01-21 20:46:02 【问题描述】:我需要从 Dataverse 中获取记录,其中在特定列值中进行了一些更改。例如,假设我们有一个名为employee 的表,其中有一个名为position 的字段,该字段可以随时间从实习生、软件开发人员、开发主管等更改。如果我们当前有10 条记录,并且其中一个的职位员工变了,我只需要那一份员工记录。我经历了Retrieve and detect changes to table definitions,但我相信它与架构的变化有关,而不是数据的相关变化。我正在使用带有 Java 11 的 Spring Boot 并使用 Dataverse 我正在使用 Olingo 库,如果需要也可以使用 Web API。有没有办法像上面描述的那样检测数据的变化?
编辑
要添加更多详细信息,我们将有一个在 X 分钟触发的计划作业,该作业需要获取与上次获取 X 分钟时间相比职位已更改的员工数据。正如我们在下图中看到的那样,所有 3 条记录都在 X 分钟内更新,并且最后修改时间已全部更新。我需要获取位置属性已更改的以绿色突出显示的记录。对于 ID 为 2 的记录,我不需要获取它,因为位置相同。
【问题讨论】:
我至少可以想到三种不同的方法来在 Dataverse 中实现这一目标。请详细说明您的要求。您需要更改字段的先前值吗?您是否只需要检测对单个特定属性或任何属性的更改?想到其他要求了吗? 你好@JevgenijMartynenko,我已经为这个问题添加了更多细节。如果您需要更多详细信息,请告诉我。谢谢 【参考方案1】:解决方案 1:自定义更改表
如果您可以并且可以扩展您当前的 Dataverse 环境
-
创建一个名为 Employee Change 的新表。添加名为 Employee 的 Lookup 类型的列并将其链接到您的 Employee 表
修改主窗体并将Employee列添加到窗体
创建将在字段更改时触发的工作流程。在工作流程中,您创建一个Employee Change记录并将查找列值设置为更改的记录
您现在可以在 Employee Change 表中查询已更改的记录。您需要展开查找列以从 Employee 表中获取所需的列。
Web API 查询示例:
GET [Organization URI]/api/data/v9.1/employee?$select=createdon, employeeid
&$expand=employeeid($select=employeeid,fullname,column2,column3) HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
关于扩展查找列的更多信息可以找到here
解决方案 2:审计
使用内置审计功能
-
确保启用审核。详情可见docs
启用对 Employee 表中所需列的审核
Query audit records 用于 Employee 表中的更改。您只需要注意感兴趣的特定属性的变化
您将获得一个已更改的记录列表,然后您必须再次查询以检索记录的列
解决方案 3:推而不是拉
将更改从 Dataverse 推送到您的 API 而不是不断查询更改可能更有意义。 您可以使用 Microsoft Power Automate 创建一个简单的流程,当在 Dataverse 中检测到更改时调用您的 API/平台
探索以下 Power Automate 模板是一个好的开始:When a record is updated in Microsoft Dataverse, send an email。然后,您可以使用查询其他 API 替换“发送电子邮件”步骤
【讨论】:
以上是关于如何检测 Dataverse 表记录的变化的主要内容,如果未能解决你的问题,请参考以下文章
用DataVerse的entity来控制Powerautomate的启动时间