Dynamics crm Dynamics365 web api更新与升级

Dynamics crm Dynamics365 web api更新与升级,dynamics-crm,microsoft-dynamics-webapi,Dynamics Crm,Microsoft Dynamics Webapi,我很困惑。我理解这两者之间的实际区别,但我看不到这里的实际实现有任何区别 以下是这些文件的摘录 更新操作使用HTTPPATCH动词。传递一个JSON对象 包含要更新到所指定URI的属性 表示实体。将显示状态为204的响应 如果更新成功,则返回 此示例使用accountid更新现有帐户记录 00000000-0000-0000-0000-000000000001的值 PATCH [Organization URI]/api/data/v9.0/accounts(00000000-0000-0000

我很困惑。我理解这两者之间的实际区别,但我看不到这里的实际实现有任何区别

以下是这些文件的摘录

更新操作使用HTTP
PATCH
动词。传递一个JSON对象 包含要更新到所指定URI的属性 表示实体。将显示状态为204的响应 如果更新成功,则返回

此示例使用accountid更新现有帐户记录 00000000-0000-0000-0000-000000000001的值

PATCH [Organization URI]/api/data/v9.0/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

{  
    "name": "Updated Sample Account ",  
    "creditonhold": true,  
    "address1_latitude": 47.639583,  
    "description": "This is the updated description of the sample account",  
    "revenue": 6000000,  
    "accountcategorycode": 2  
}
upsert操作与更新完全相同。它使用
补丁
请求并使用URI引用特定实体。区别 如果实体不存在,它将被创建。如果已经 已存在,将对其进行更新。通常在创建新实体时 将允许系统分配唯一标识符。这是最好的 练习。但如果需要创建具有特定id值的记录, upsert操作提供了一种执行此操作的方法。这在某些情况下可能很有价值 在不同系统中同步数据的情况

有时,在某些情况下,您需要执行向上插入, 但您希望防止一种潜在的默认操作:或 创建或更新。您可以通过添加
如果匹配
如果不匹配
标题。有关详细信息,请参阅

因此,实际上,如上所述的
基本更新
将是一个
升级
,为了实现真正的基本更新(如果给定帐户存在,则更新,否则404),我需要将
如果匹配:
头添加到
补丁
请求中


我理解对了吗?

我在这里的理解和你的一样。在实践中,我发现如果记录不存在,使用不带
If Match::
的补丁请求将执行插入操作。然而,令人费解的是,当upsert成功插入记录时,它返回一个
404
错误。当我包含
If Match:
时,当更新失败时,我收到一个
400
错误