使用 Web API 创建和更新表关系

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#)