当不知道 Dataverse 记录的主键值时,使用具有数据集成方案的备用键来执行数据操作。 只能对已定义备用键的表使用备用键。 大多数 Dataverse 表没有备用键,除非自定义它们以包含备用键。
若要了解如何定义和标识表的备用键,请参阅以下文章:
使用 Dataverse Web API 或适用于 .NET 的 SDK 处理备用键。
使用 Web API 时,使用 URL 引用特定记录。 然后,使用POST或 PATCHDELETE HTTP 方法执行数据操作。 你还可以使用 URL 通过 @odata.bind 语法设置单值导航属性的值,或者将 URL 用作函数和操作的参数。
下表提供了演示如何使用相对 URL 引用记录的示例:
| 情况 | 示例 |
|---|---|
| 带有主键 |
/accounts(00000000-0000-0000-0000-000000000001) 或accounts(accountid=00000000-0000-0000-0000-000000000001)请参阅以下关于systemuser和team实体类型的说明 |
| 使用单个备用密钥 | /accounts(accountnumber='ABC123') |
| 使用由多个部分组成的备用键 | /contacts(firstname='Joe',emailaddress1='abc@example.com') |
| 具有查找列的备用键 | /accounts(_primarycontactid_value=00000000-0000-0000-0000-000000000002)为查找列定义备用键时,必须使用相应的 Lookup 属性的名称。 查找属性遵循以下命名约定: _<name of single-valued navigation property>_value |
Note
由于 systemuser 和 team 实体类型从 principal 实体类型继承的方式,您不能使用命名主键来引用这些实体。 这两个实体的主键是 ownerid,而不是 systemuserid 或 teamid。 实体 principal 类型不支持 GET 操作。 详细信息: EntityType 继承
在 Web API 中使用备用密钥时出现异常
使用备用键时,请注意以下条件和可能的异常:
如果指定未定义为唯一键的列,则会发生错误。 错误消息为:
The key in the request URI is not valid for resource 'Microsoft.Dynamics.CRM.<table logical name>'. Ensure that the names and number of key properties match the declared or alternate key properties for the resource 'Microsoft.Dynamics.CRM.<table logical name>'.备用键值不能包含一些特殊字符。
不支持具有以下字符
/的备用键值、<、>*、%&、:、\\、?+。 这些特殊字符在 URL 路径段中具有保留或结构意义。 如果在 URL 的括号内发送GET包含这些值的请求,Dataverse 将返回错误。 解决方法不是检索单个记录,而是使用备用键值来$filter检索包含与备用键值匹配的一条记录的集合。例如,不要使用这个会失败的请求:
GET [Organization URI]/api/data/v9.2/new_skts(new_name='M%26M')使用
$filter查询:GET [Organization URI]/api/data/v9.2/new_skts?$filter=new_name eq 'M%26M'&$select=new_name如果只需要访问记录,则可以从返回的集合中的
value第一条(且仅)匹配记录中获取数据。 如果需要执行一些其他操作(例如更新或删除记录),可以使用此方法获取匹配记录的 ID,然后使用 ID 值而不是备用键的值来引用记录。Note
参数别名 (
@param) 不适用于备用键语法。 在键谓词中使用参数别名时,即使对于不含特殊字符的值,也会返回400错误。 改用$filter。
详细信息: 使用备用键检索记录