我正在编写一个通用集成,需要使用Dynamics 365 for Customer Engagement中的数据库作为记录系统。我将不时地对其进行轮询,以便在其他辅助系统中保持数据最新。当然,我可以通过检查“modifiedon”属性来更改记录。我可以建立一个查询,说“给我自上次询问以来已经改变的所有记录”。但是,自上次询问以来,能够知道哪些记录已被删除也是最佳的。我与Salesforce有类似的集成,这对于SalesForce API来说是微不足道的,但我看不到如何使用Dynamics 365 API。
似乎对我来说唯一的选择可能是在我的集成中保留所有记录主键的列表,并在每个轮询中下载存在于CRM中的所有记录,然后在他们缺席的情况下自己找出已删除的记录。但这非常难看且效率低下。
任何想法或建议?
MS为此目的引入了change tracking。
Dynamics 365客户参与客户参与中的更改跟踪功能提供了一种通过检测自数据最初提取或上次同步以来已更改的数据来以高效方式保持数据同步的方法。
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"
}
]
}
Sample: Synchronize data with external systems using change tracking
我想为这个问题做出贡献,这个问题给了我很好的建议。虽然官方Dynamics文档中没有详细记录,也未提及解释更改跟踪的位置,但Soap API中也提供了这一强大功能:
我希望这可以帮助别人。