Criar e atualizar relações de tabela usando a API Web

A API da Web oferece suporte para trabalhar com definições de relacionamento (metadados). Os conceitos descritos nas Definições de relacionamento de tabela também se aplicam à API Web.

Elegibilidade para relacionamentos

Antes de criar uma relação de tabela (entidade), você deve confirmar se a tabela é elegível para participar da relação. Você pode usar as ações listadas na tabela a seguir para determinar a elegibilidade. Essas ações correspondem às mensagens do SDK do .NET descritas na Elegibilidade do relacionamento de tabela.

Action Description
Ação CanBeReferenced Verifica se a entidade especificada pode ser a entidade primária (uma) em uma relação um-para-muitos.
Ação CanBeReferencing Verifica se a entidade especificada pode ser a entidade de referência (muitos) em uma relação um-para-muitos.
Ação CanManyToMany Verifica se a entidade pode participar de uma relação muitos para muitos.
Função GetValidManyToMany Retorna o conjunto de entidades que podem participar de uma relação muitos para muitos.
Função GetValidReferencedEntities Retorna o conjunto de entidades que são válidas como a entidade primária (um) a partir da entidade especificada em uma relação um para muitos.
Função GetValidReferencingEntities Retorna o conjunto de entidades que são válidas como a entidade relacionada (muitos) para a entidade especificada em uma relação um para muitos.

Criar um relacionamento um para muitos

Ao criar uma relação um-para-muitos, defina-a usando o OneToManyRelationshipMetadata EntityType. Essa definição inclui o atributo de pesquisa, que é definido usando LookupAttributeMetadata EntityType e também requer propriedades complexas usando AssociatedMenuConfiguration ComplexType, CascadeConfiguration ComplexType, Label ComplexType e LocalizedLabel ComplexType. O atributo lookup é definido como a propriedade de navegação lookup de valor único do objeto OneToManyRelationshipMetadata e é criado ao mesmo tempo usando deep insert. Mais informações: Criar linhas de tabela relacionadas em uma operação e metadados de relação tabela

Se você quiser aplicar um nome de propriedade de navegação personalizado para uma relação um-para-muitos, você pode definir valores para as propriedades ReferencedEntityNavigationPropertyName e ReferencingEntityNavigationPropertyName.

Depois de gerar o JSON necessário para definir a relação e o atributo de pesquisa, POST envie o JSON para o RelationshipDefinitions conjunto de entidades. Você deve incluir o valor da propriedade @odata.type de Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata para esclarecer o tipo de relação que você está criando porque esse mesmo conjunto de entidades é usado para criar relações muitos para muitos. O uri da relação resultante é retornado na resposta.

Solicitação:

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"  
 }  
}  

Resposta:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
OData-EntityId: [Organization URI]/api/data/v9.2/RelationshipDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)  

Criar um relacionamento muitos-para-muitos

Se você quiser aplicar um nome de propriedade de navegação personalizado para uma relação muitos para muitos, poderá definir valores para as propriedades Entity2NavigationPropertyName e Entity1NavigationPropertyName.

Depois de gerar o JSON necessário para definir a relação, POST envie o JSON para o conjunto de entidades RelationshipDefinitions. Você deve incluir o valor da propriedade @odata.type de Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata para esclarecer o tipo de relação que está criando porque esse mesmo conjunto de entidades é usado para criar relações um para muitos. O URI da relação resultante é retornado na resposta.

Solicitação:

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"  
}  

Resposta:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
OData-EntityId: [Organization URI]/api/data/v9.2/RelationshipDefinitions(11bb11bb-cc22-dd33-ee44-55ff55ff55ff)    

Criar relações para dar suporte a uma consulta de várias tabelas

As colunas do tipo pesquisa em várias tabelas permitem que um usuário use uma tabela específica que tenha várias relações um-para-muitos (1:M) com outras tabelas no ambiente. Uma única coluna de tipo de pesquisa pode se referir a várias outras tabelas. Um valor de pesquisa enviado para a coluna de tipo de várias tabelas será associado a um registro em qualquer uma das tabelas relacionadas.

Mais informações: Usar colunas de pesquisa de várias tabelas

Atualizar relações

Conforme discutido em Atualizar definições de tabela, você atualiza os relacionamentos usando o método HTTP PUT para substituir a definição existente pelas alterações que deseja aplicar. Você não pode editar propriedades individuais usando o método HTTP PATCH como você pode com tabelas de dados empresariais. Assim como acontece com entidades e atributos, você deve incluir um MSCRM.MergeLabels cabeçalho com o valor definido para true para evitar a substituição de rótulos localizados não incluídos em sua atualização e você deve publicar personalizações antes que elas estejam ativas no sistema.

Excluir relacionamentos

Para excluir uma relação usando a API Web, use o método HTTP DELETE com o URI para a relação.

Consulte também

Usar a API Web com definições de tabela
Consultar definições de tabela usando a API Web
Recuperar definições de tabela por nome ou MetadataId
Modelar tabelas e colunas usando a API Web
Exemplo de operações de esquema de tabela da API Web
Exemplo de operações de esquema de tabela de API Web (C#)