Compartir a través de


Creación y actualización de relaciones de tabla mediante la API web

La API web admite el trabajo con definiciones de relación (metadatos). Los conceptos descritos en Definiciones de relación de tabla también se aplican a la API web.

Idoneidad para las relaciones

Antes de crear una relación de tabla (entidad), debe confirmar si la tabla es apta para participar en la relación. Puede usar las acciones enumeradas en la tabla siguiente para determinar la idoneidad. Estas acciones corresponden al SDK de .NET para mensajes descritos en Elegibilidad de relación de tablas.

Acción Description
Acción CanBeReferenced Comprueba si la entidad especificada puede ser la entidad principal (una) en una relación uno a varios.
Acción CanBeReferencing Comprueba si la entidad especificada puede ser la entidad de referencia (varios) en una relación de uno a varios.
Acción CanManyToMany Comprueba si la entidad puede participar en una relación de muchos a muchos.
Acción GetValidManyToMany Devuelve el conjunto de entidades que pueden participar en una relación de varios a varios.
Función GetValidReferencedEntities Devuelve el conjunto de entidades que son válidas como entidad principal (uno) de la entidad especificada en una relación de uno a varios.
Función GetValidReferencingEntities Devuelve el conjunto de entidades que son válidas como la entidad relacionada (varias) de la entidad especificada en una relación uno a varios.

Crear una relación uno a varios

Cuando se crea una relación uno a varios, se define mediante oneToManyRelationshipMetadata EntityType. Esta definición incluye el atributo de búsqueda, que se define mediante LookupAttributeMetadata EntityType y también requiere propiedades complejas mediante AssociatedMenuConfiguration ComplexType, CascadeConfiguration ComplexType, Label ComplexType y LocalizedLabel ComplexType. El atributo de búsqueda se establece como la propiedad de navegación de un solo valor Lookup del objeto OneToManyRelationshipMetadata y se crea a la vez mediante inserción profunda. Más información: Creación de filas de tabla relacionadas en una operación y metadatos de relación de tabla

Si desea aplicar un nombre de propiedad de navegación personalizado para una relación uno a varios, puede establecer valores para las propiedades ReferencingEntityNavigationPropertyName y ReferencedEntityNavigationPropertyName.

Una vez que haya generado el JSON necesario para definir la relación y el atributo de búsqueda, POST el JSON en el conjunto de entidades RelationshipDefinitions. Debe incluir el valor de la propiedad @odata.type de Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata para aclarar el tipo de relación que está creando porque este mismo conjunto de entidades se usa para crear relaciones de varios a varios. El URI de la relación resultante se devuelve en la respuesta.

Solicitud:

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

Respuesta:

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

Crear nueva relación de varios a varios

Si desea aplicar un nombre de propiedad de navegación personalizado para una relación de varios a varios puede establecer valores para las propiedades Entity1NavigationPropertyName y Entity2NavigationPropertyName.

Una vez que haya generado el JSON necesario para definir la relación, mande el JSON al conjunto de entidades RelationshipDefinitions. Debe incluir el valor de la propiedad @odata.type de Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata para aclarar el tipo de relación que está creando porque este mismo conjunto de entidades se usa para crear relaciones de uno a varios. El URI de la relación resultante se devuelve en la respuesta.

Solicitud:

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

Respuesta:

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

Crear relaciones para admitir una búsqueda en múltiples tablas

Las columnas de tipo de búsqueda de varias tablas permiten a un usuario usar una tabla específica que tenga varias relaciones de uno a varios (1:M) con otras tablas del entorno. Una sola columna de tipo de búsqueda puede hacer referencia a varias otras tablas. Un valor de búsqueda enviado a la columna de tipo de varias tablas coincidirá con un registro en cualquiera de las tablas relacionadas.

Más información: Uso de columnas de búsqueda de varias tablas

Actualización de relaciones

Como se describe en Actualizar definiciones de tabla, se actualizan las relaciones mediante el método HTTP PUT para reemplazar la definición existente por los cambios que desea aplicar. No puede editar propiedades individuales mediante el método HTTP PATCH como puede con tablas de datos profesionales. Al igual que con las entidades y atributos, debe incluir un MSCRM.MergeLabels encabezado con el valor establecido en true para evitar sobrescribir etiquetas localizadas no incluidas en la actualización y debe publicar personalizaciones antes de que estén activas en el sistema.

Eliminar relaciones

Para eliminar una relación mediante la API web, use el método HTTP DELETE con el URI de la relación.

Consulte también

Uso de la API web con definiciones de tabla
Consultar definiciones de tabla con la API web
Recuperar definiciones de tabla por nombre o MetadataId
Modelar tablas y columnas mediante la API web
Ejemplo de operaciones de esquema de tabla de API web
Ejemplo de operaciones de esquema de tabla de API web (C#)