使用备用键引用记录

当不知道 Dataverse 记录的主键值时,使用具有数据集成方案的备用键来执行数据操作。 只能对已定义备用键的表使用备用键。 大多数 Dataverse 表没有备用键,除非自定义它们以包含备用键。

若要了解如何定义和标识表的备用键,请参阅以下文章:

使用 Dataverse Web API 或适用于 .NET 的 SDK 处理备用键。

使用 Web API 时,使用 URL 引用特定记录。 然后,使用POSTPATCHDELETE HTTP 方法执行数据操作。 你还可以使用 URL 通过 @odata.bind 语法设置单值导航属性的值,或者将 URL 用作函数和操作的参数。

下表提供了演示如何使用相对 URL 引用记录的示例:

情况 示例
带有主键 /accounts(00000000-0000-0000-0000-000000000001)
accounts(accountid=00000000-0000-0000-0000-000000000001)
请参阅以下关于systemuserteam实体类型的说明
使用单个备用密钥 /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

由于 systemuserteam 实体类型从 principal 实体类型继承的方式,您不能使用命名主键来引用这些实体。 这两个实体的主键是 ownerid,而不是 systemuseridteamid。 实体 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

详细信息: 使用备用键检索记录

另见

定义表的备用键
使用更改跟踪将数据与外部系统同步
使用 Upsert 插入或更新记录