我正在编写一个通用集成,需要将Dynamics 365中的数据库用于客户参与作为记录系统。我将不时对其进行轮询,以使其他辅助系统中的数据保持最新。我当然可以通过检查“ modifiedon”属性来知道记录何时更改。我可以建立一个查询,说“给我自上次询问以来所有已更改的记录”。但是,最好能知道自上次询问以来删除了哪些记录。我与Salesforce有类似的集成,与SalesForce API无关紧要,但是我看不到如何使用Dynamics 365 API来实现。
看来,我的唯一选择可能是保留集成中所有记录主键的列表,并在每次轮询中下载CRM中存在的所有记录,然后根据自己的缺席自行找出已删除的记录。不过,这非常丑陋且效率低下。
有什么想法或建议吗?
答案 0 :(得分:3)
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
响应将具有带有增量令牌的增量链接:
"@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
答案 1 :(得分:0)
我想为这个问题做出贡献,这为我提供了很好的建议。 尽管在Dynamics官方文档上的文献记录很少,并且没有在其中解释更改跟踪,但Soap API中也提供了此强大功能:
我希望这对某人有帮助。