在 Dynamics 365 XRM Tooling SDK 中查询已删除的实体

Query for deleted entities in Dynamics 365 XRM Tooling SDK

我正在编写一个通用集成,需要使用 Dynamics 365 for Customer Engagement 中的数据库作为记录系统。我将不时对其进行轮询,以使其他辅助系统中的数据保持最新。当然,我可以通过检查 "modifiedon" 属性知道记录何时更改。我可以构建一个查询 "give me all the records that have changed since the last time I asked"。但是,最好能够知道自从我上次询问以来哪些记录已被删除。我与 Salesforce 有类似的集成,这对 SalesForce API 来说很简单,但我看不出如何用 Dynamics 365 API.

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

有什么想法或建议吗?

微软为此引入了 change tracking

The change tracking feature in Dynamics 365 for Customer Engagement Customer Engagement provides a way to keep the data synchronized in a performant way by detecting what data has changed since the data was initially extracted or last synchronized.

下面的sample web api request

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

响应将有增量 link 和增量令牌:

"@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"
        }
    ]
}

Sample: Synchronize data with external systems using change tracking

我想为这个问题做出贡献,它为我的方向提供了很好的建议。 尽管在官方 Dynamics 文档中记录不多,也没有在解释更改跟踪的地方提及,但 Soap API:

中也提供了这个强大的功能

我希望这对某人有所帮助。