1

我正在编写一个通用集成,它需要使用 Dynamics 365 for Customer Engagement 中的数据库作为记录系统。我将不时对其进行轮询,以使其他辅助系统中的数据保持最新。当然,通过检查“modifiedon”属性,我可以知道记录何时更改。我可以建立一个查询,说“给我自从我上次询问以来发生变化的所有记录”。但是,最好能够知道自从我上次询问以来哪些记录已被删除。我与 Salesforce 进行了类似的集成,这对 SalesForce API 来说是微不足道的,但我不知道如何使用 Dynamics 365 API 来做到这一点。

看来,对我来说唯一的选择可能是在我的集成中保留所有记录主键的列表,并在每次轮询时下载 CRM 中存在的所有记录,然后自己找出删除的记录。不过,这非常丑陋且效率低下。

有什么想法或建议吗?

4

2 回答 2

3

MS为此目的引入了变更跟踪。

Dynamics 365 for Customer Engagement Customer Engagement 中的更改跟踪功能通过检测自最初提取或上次同步数据以来发生了哪些数据更改,提供了一种以高性能方式保持数据同步的方法。

下面的示例 Web api 请求

GET [Organization URI]/org1/api/data/v9.0/accounts?$select=name,accountnumber,telephone1,fax HTTP/1.1
Prefer: odata.track-changes

响应将具有带有 delta 令牌的 delta 链接:

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

当您使用上述 URI 时,您可以获得包括已删除条目在内的更改。

{
          "@odata.context":"[Organization URI]/data/v9.0/$metadata#accounts(name,telephone1,fax)/$delta",
          "@odata.deltaLink":"[Organization URI]/api/data/v9.0/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.0/$metadata#accounts/$deletedEntity",
            "id":"2e451703-c686-e711-80e5-00155db19e6d",
            "reason":"deleted"
        }
    ]
}

示例:使用更改跟踪将数据与外部系统同步

于 2019-01-08T19:41:31.177 回答
0

我想为这个问题做出贡献,它为我的方向提供了极好的建议。虽然官方 Dynamics 文档中的文档记录很差,并且没有提到更改跟踪的解释,但 Soap API 中也提供了这个强大的功能:

我希望这可以帮助别人。

于 2019-07-09T09:13:20.290 回答