Comparteix a través de


Asociar y anular la asociación de filas de tabla mediante la API web

Puede asociar registros individuales en las filas de la tabla con otros registros usando las relaciones existentes entre las definiciones de la tabla. En OData, las relaciones se expresan como propiedades de navegación.

Puede descubrir qué propiedades de navegación existen en el documento $Metadata Service. Consulte Propiedades de navegación de la API web. Para las tablas de Dataverse existentes, consulte la Referencia de EntityType de API web, para cada tipo de entidad, consulte las propiedades de navegación de un solo valor y de colección enumeradas.

La siguiente tabla describe los tres tipos de relaciones entre tablas en Dataverse.

Type Descripción Ejemplo
Uno a varios Un registro puede tener muchos registros asociados. Un registro de cuenta puede tener muchos registros de contacto en la contact_customer_accountspropiedad de navegación de colección valorada.
Varios a uno Muchos registros se pueden asociar a un registro.

Varios a uno es una imagen reflejada de una relación Uno a varios. Solo hay una relación.
Se pueden asociar varios registros de contacto a un único registro de cuenta mediante la parentcustomerid_accountpropiedad de navegación de valor único.
Varios a varios Muchos registros se pueden asociar a muchos registros. Cada rol de seguridad (rol) puede incluir referencias a la definición de un usuario del sistema.
Ambas tablas tienen una systemuserroles_associationpropiedad de navegación con valores de colección.

Uso de propiedades de navegación de un solo valor

Para los registros existentes en el lado varios de una relación Uno a varios o Varios a uno, puede asociar el registro estableciendo una referencia Uri al otro registro. La manera más sencilla y habitual de hacerlo es anexar la anotación @odata.bind al nombre de la propiedad de navegación de un solo valor y, a continuación, establecer el valor como URI en el otro registro de una solicitud PATCH.

Asociar con una propiedad de navegación de un solo valor

Por ejemplo, para asociar un registro de contacto a una cuenta mediante la propiedad de parentcustomerid_account navegación de un solo valor:

Solicitud:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account@odata.bind": "accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Como se describe en Asociar filas de tabla en la creación, los nuevos registros también se pueden asociar con registros existentes de la misma manera.

Desasociar con una propiedad de navegación de un solo valor

Si desea desasociar, simplemente puede establecer el valor en nulo.

Solicitud:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account@odata.bind": null
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Al desasociar de esta manera, no necesita incluir la anotación @odata.bind. Puede simplemente usar el nombre de la propiedad de navegación de un solo valor:

Solicitud:

PATCH [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "parentcustomerid_account": null
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Más información: Actualización básica

Otros métodos

Hay otras formas de lograr los mismos resultados descritos anteriormente con las propiedades de navegación de un solo valor.

Puedes usar la siguiente solicitud PUT para fijar el valor de la propiedad de navegación de un solo valor parentcustomerid_account:

Solicitud:

PUT [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)"
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Nota

Nota: Debe usar una URL absoluta al establecer el valor para @odata.id.

Para eliminar la referencia, también puede utilizar esta solicitud DELETE:

Solicitud:

DELETE [Organization Uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/parentcustomerid_account/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Uso de propiedades de navegación valoradas como colección

Con OData, ambos lados de una relación de varios a varios tienen las propiedades de navegación valorada como colección: Para las relaciones de uno a varios o de varios a varios, la tabla uno del lado "Uno" tiene una propiedad de navegación valorada como colección. No hay ninguna diferencia en la forma de trabajar con cualquiera de estos tipos de relaciones mientras se usan las propiedades de navegación con valores de colección. En esta sección se describe cómo trabajar con propiedades de navegación con valores de colección con cualquier tipo de relación.

Agregar un registro a una colección

En el ejemplo siguiente se muestra cómo agregar un registro de contacto a la colección de cuentacontact_customer_accounts, que forma parte de una relación de uno a varios.

Solicitud:

POST [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)"
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

En el ejemplo siguiente se muestra cómo agregar un registro de rol a la colección systemusersystemuserroles_association, que es una relación de varios a varios.

Solicitud:

POST [Organization Uri]/api/data/v9.2/systemusers(34dcbaf5-f718-ed11-b83e-00224837179f)/systemuserroles_association/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "@odata.id": "[Organization URI]/api/data/v9.2/roles(886b280c-6396-4d56-a0a3-2c1b0a50ceb0)"
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Quitar un registro de una colección

En el ejemplo siguiente se muestra cómo quitar un registro de contacto de la colección de cuentastcontact_customer_accounts donde se encuentra el valor de contactidcontacto00aa00aa-bb11-cc22-dd33-44ee44ee44ee.

Solicitud:

DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/$ref HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

También funciona la siguiente solicitud:

Solicitud:

DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts/$ref?$id=[Organization URI]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee) HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Consulte también

Ejemplo de operaciones básicas de la API web (C#)
Ejemplo de operaciones básicas de la API web (JavaScript del lado del cliente)
Realizar operaciones mediante la API web
Componer solicitudes HTTP y administrar errores
Consultar datos utilizando la API web
Crear una fila de tabla usando la API web
Recuperar una fila de tabla usando la API web
Actualizar y eliminar filas de tablas usando la API web
Usar funciones de la API web
Usar acciones de la API web
Ejecute las operaciones por lotes mediante API web
Suplantar a otro usuario utilizando la API web
Realizar operaciones condicionales mediante la API web