我尝试在 CRM 中查找每个 WEB API 给定名称的重复项。 我使用这样的 API 调用:
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1=%7B%22%40odata.type%22%3A%22Microsoft.Dynamics.CRM.account%22%2C%22name%22%3A%22ACME%20Corp%22%7D&@p2=%27account%27&@p3=%7B%27PageNumber%27%3A1%2C%27Count%27%3A50%7D
@p1 是一个 urlecoded json:
{"@odata.type":"Microsoft.Dynamics.CRM.account","name":"ACME Corp"}
所有工作都没有问题,直到名称包含像 ACME (USA) Corp 这样的括号。这会给我错误消息“错误请求 - 查询语法错误。”
仅当右括号后有文本时才会发生错误,因此
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1=%7B%22%40odata.type%22%3A%22Microsoft.Dynamics.CRM.account%22%2C%22name%22%3A%22ACME%20%28USA%29%22%7D&@p2=%27account%27&@p3=%7B%27PageNumber%27%3A1%2C%27Count%27%3A50%7D
{"@odata.type":"Microsoft.Dynamics.CRM.account","name":"ACME (USA)"}
按预期工作并检索现有重复项。
但这会产生错误的请求错误:
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1=%7B%22%40odata.type%22%3A%22Microsoft.Dynamics.CRM.account%22%2C%22name%22%3A%22ACME%20%28USA%29Corp%22%7D&@p2=%27account%27&@p3=%7B%27PageNumber%27%3A1%2C%27Count%27%3A50%7D
{"@odata.type":"Microsoft.Dynamics.CRM.account","name":"ACME (USA)Corp"}
我尝试了括号,斜杠转义括号,双斜杠转义括号,所有前者都经过urlencoded。
括号五“错误请求”,单斜杠给出“无效的 JSON。在 JSON 字符串值中发现无法识别的转义序列 '\('。”,双斜杠给出没有错误,但也没有重复,即使它们存在。
这似乎是由内部序列化缺陷引起的。
解决方法可能是使用 ID 来识别您需要检查重复项的记录。您的查询将如下所示:
https://orgname.crm.dynamics.com/api/data/v9.2/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1={"@odata.type":"Microsoft.Dynamics.CRM.account","accountid":"b6047a80-b59d-ef11-a72c-0022489e68d8"}&@p2='account'&@p3={'PageNumber':1,'Count':50}
当您没有 ID 时,您可以使用如下简单查询:
https://orgname.crm.dynamics.com/api/data/v9.2/accounts?$filter=name eq 'ACME (USA) Corp.' and statecode eq 0&$top=50