Web API 支持处理关系定义(元数据)。 表关系定义中所述的概念也适用于 Web API。
建立关系的资格
在创建表(实体)关系之前,应确认该表是否有资格参与关系。 可以使用下表中列出的操作来确定资格。 这些操作对应于表关系资格中描述的 .NET SDK 消息。
| Action | Description |
|---|---|
| CanBeReferenced 操作 | 检查指定的实体是否可以是一对多关系中的主实体(一个)。 |
| CanBeReferencing 操作 | 检查指定的实体是否可以是一对多关系中的引用方实体(多)。 |
| CanManyToMany 操作 | 检查实体是否可以参与多对多关系。 |
| GetValidManyToMany 函数 | 返回可以参与多对多关系的实体集。 |
| GetValidReferencedEntities 函数 | 从一对多关系中的指定实体返回作为主要实体(一个)有效的实体集。 |
| GetValidReferencingEntities 函数 | 返回在一对多关系中,可作为指定实体相关实体(多方)的实体集。 |
创建一对多关系
创建一对多关系时,可以使用 OneToManyRelationshipMetadata EntityType 定义它。 此定义包括查找属性,该属性是使用 LookupAttributeMetadata EntityType 定义的,还需要使用 AssociatedMenuConfiguration ComplexType、CascadeConfiguration ComplexType、Label ComplexType 和 LocalizedLabel ComplexType 的复杂属性。 查找属性设置为 OneToManyRelationshipMetadata 对象的 Lookup 单值导航属性,并使用 深度插入同时创建。 详细信息: 在一个操作中创建相关表行 和 表关系元数据
如果要为一对多关系应用自定义导航属性名称,可以为 ReferencingEntityNavigationPropertyName 和 ReferencedEntityNavigationPropertyName 属性设置值。
生成用于定义关系和查找属性的必要 JSON 后,POST将该 JSON 发送到 RelationshipDefinitions 实体集。 必须包含 Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata 的 @odata.type 属性值,以阐明所创建关系的类型,因为此实体集用于创建多对多关系。 生成的关系的 URI 在响应中返回。
请求:
POST [Organization URI]/api/data/v9.2/RelationshipDefinitions HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"SchemaName": "new_contact_new_bankaccount",
"@odata.type": "Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata",
"AssociatedMenuConfiguration": {
"Behavior": "UseCollectionName",
"Group": "Details",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Bank Accounts",
"LanguageCode": 1033
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Bank Accounts",
"LanguageCode": 1033
}
},
"Order": 10000
},
"CascadeConfiguration": {
"Assign": "Cascade",
"Delete": "Cascade",
"Merge": "Cascade",
"Reparent": "Cascade",
"Share": "Cascade",
"Unshare": "Cascade"
},
"ReferencedAttribute": "contactid",
"ReferencedEntity": "contact",
"ReferencingEntity": "new_bankaccount",
"Lookup": {
"AttributeType": "Lookup",
"AttributeTypeName": {
"Value": "LookupType"
},
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "The owner of the account",
"LanguageCode": 1033
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "The owner of the account",
"LanguageCode": 1033
}
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Account Owner",
"LanguageCode": 1033
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Account Owner",
"LanguageCode": 1033
}
},
"RequiredLevel": {
"Value": "ApplicationRequired",
"CanBeChanged": true,
"ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"
},
"SchemaName": "new_AccountOwner",
"@odata.type": "Microsoft.Dynamics.CRM.LookupAttributeMetadata"
}
}
响应:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/RelationshipDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)
创建多对多关系
如果要为多对多关系应用自定义导航属性名称,则可以为 Entity1NavigationPropertyName 和 Entity2NavigationPropertyName 属性设置值。
生成用于定义关系的必要 JSON 后,POST将该 JSON 发送到 RelationshipDefinitions 实体集。 必须包含 Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata 的 @odata.type 属性值,以阐明所创建关系的类型,因为此相同的实体集用于创建一对多关系。 生成的关系的 URI 在响应中返回。
请求:
POST [Organization URI]/api/data/v9.2/RelationshipDefinitions HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"SchemaName": "new_accounts_campaigns",
"@odata.type": "Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata",
"Entity1AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Account",
"LanguageCode": 1033
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Account",
"LanguageCode": 1033
}
},
"Order": 10000
},
"Entity1LogicalName": "account",
"Entity2AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Campaign",
"LanguageCode": 1033
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Campaign",
"LanguageCode": 1033
}
},
"Order": 10000
},
"Entity2LogicalName": "campaign",
"IntersectEntityName": "new_accounts_campaigns"
}
响应:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/RelationshipDefinitions(11bb11bb-cc22-dd33-ee44-55ff55ff55ff)
创建关系以支持多表查找
多表查找类型列允许用户使用与环境中其他表具有多个一对多(1:M)关系的特定表。 单个查找类型列可以引用多个其他表。 提交到多表类型列的查阅值将与任何相关表中的记录匹配。
详细信息: 使用多表查找列
更新关系
如 Update 表定义中所述,使用 HTTP PUT 方法更新关系,用要应用的更改替换现有定义。 不能像处理业务数据表那样,使用 HTTP PATCH 方法编辑单个属性。 就像处理实体和属性时一样,您应包含值设置为 true 的 MSCRM.MergeLabels 标头,以避免覆盖您的更新中未包含的本地化标签文本,并且您必须先发布自定义项,它们才会在系统中生效。
删除关系
若要使用 Web API 删除关系,请使用 HTTP DELETE 方法并指定该关系的 URI。
另请参阅
将 Web API 与表定义配合使用
使用 Web API 查询表定义
按名称或 MetadataId 检索表定义
使用 Web API 为表和列建模
Web API 表架构操作示例
Web API 表架构作示例 (C#)