通过更改跟踪和 Web API 跟踪实体数据更改

已完成

通常,组织需要跨多个系统同步数据。 Microsoft Dataverse 提供了一种有效管理这种情况的功能,称为更改跟踪。 启用更改跟踪后,您可以构建应用程序来查询这些更改。

为表启用更改跟踪

您可以通过在 Power Apps Maker Portal 中的表设置上设置跟踪更改标志,为表启用更改跟踪,该设置位于高级选项 > 对于此表部分下。

根据 OData 4.0 文档,增量链接 是“不透明的、由服务生成的链接,客户端使用它来检索对结果的后续更改。”Microsoft 已将此标准构建到 Dataverse 的更改跟踪中,提供一种通用的标准方法来处理随时间推移而发生的更改数据。 有关增量链接的详细信息,请参阅 OData 版本 4.0 - 增量链接

在发出更改跟踪请求之后,您的响应将包含增量链接,然后您将它传递给下一个请求,以获取自最初的请求以来发生的更改。 增量链接将由应用负责维护,类似于过去使用日期/时间戳进行跟踪的方式。

使用 Web API 检索表的更改

为表启用更改跟踪后,可以通过 Web API 检索它的更改,方法是在 Web 请求中添加 odata.track-changes 作为首选项标头。 以下示例请求检索客户表中一组特定字段(nameaccount numbertelephone1fax)发生的更改。

GET [Organization URI]/org1/api/data/v9.2/accounts?$select=name,accountnumber,telephone1,fax HTTP/1.1
Prefer: odata.track-changes
Cache-Control: no-cache
OData-Version: 4.0
Content-Type: application/json

在最初的请求中,您将收到应用于查询的整个数据集,因为没有应用增量。 但是,响应将显示 @odata.deltaLink 值。 该链接包含 deltatoken 参数,当您希望查看自该查询运行以来应用了哪些更改时,该参数将被传递到您的后续请求。 可以将该过程想象成类似于在 OData 中处理分页的方式。

以下示例是对前面客户请求的响应:

{
          "@odata.context":"[Organization URI]/data/v9.2/$metadata#accounts(name,telephone1,fax)/$delta",
          "@odata.deltaLink":"[Organization URI]/api/data/v9.2/accounts?$select=name,telephone1,fax&$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44",
"value":
    [
        {
            "@odata.etag":"W/\"915244\"",
            "name":"Monte Orton",
            "telephone1":"555000",
            "fax":"10101",
            "accountid":"60c4e274-0d87-e711-80e5-00155db19e6d"
        },
        {
            "@odata.context":"[Organization URI]/api/data/v9.2/$metadata#accounts/$deletedEntity",
            "id":"2e451703-c686-e711-80e5-00155db19e6d",
            "reason":"deleted"
        }
    ]
}

在该场景中,假设已经过了一段时间,您现在想要查看是否应用了任何其他更改。 您可以使用 @odata.deltaLink 参数来运行您的查询(或者如果您以不同的方式管理连接字符串,则提取它的 deltatoken),并查看自上次请求以来发生了什么变化。

以下示例显示了如何通过运行返回的 @odata.deltaLink 来检索自上次请求以来的更改:

GET [Organization URI]/api/data/v9.2/accounts?$select=name,accountnumber,telephone1,fax&$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44

在该场景中,假设创建了新客户,并删除了另一个客户。 您的响应将类似于以下示例:

{
          "@odata.context":"[Organization URI]/data/v9.2/$metadata#accounts(name,telephone1,fax)/$delta",
          "@odata.deltaLink":"[Organization URI]/api/data/v9.2/accounts?$select=name,telephone1,fax&$deltatoken=919058%2108%2f22%2f2017%2008%3a21%3a20",
"value":
    [
        {
            "@odata.etag":"W/\"915244\"",
            "name":"Monte Orton",
            "telephone1":"555000",
            "fax":"10101",
            "accountid":"60c4e274-0d87-e711-80e5-00155db19e6d"
        },
        {
            "@odata.context":"[Organization URI]/api/data/v9.1/$metadata#accounts/$deletedEntity",
            "id":"2e451703-c686-e711-80e5-00155db19e6d",
            "reason":"deleted"
        }
    ]
}

如示例所示,提供了另一个增量链接,下次需要查看发生了什么变化时可以使用它。

检索增量中的更改数量

您还可以通过在请求中添加 $count 参数来检索给定增量中所做的更改数量。

GET [Organization URI]/api/data/v9.2/accounts/$count?$deltatoken=919042%2108%2f22%2f2017%2008%3a10%3a44