Asociar y desasociar filas de tabla mediante la API web

Use la API web para asociar y desasociar filas de tabla con otras filas de tabla a través de las relaciones que existen entre las definiciones de 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 ver las tablas existentes de Dataverse, consulte la Web API EntityType Reference. Para cada tipo de entidad, consulte las propiedades de navegación con valores únicos y con valores de colección enumerados.

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

Type Description Example
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 un solo valor.
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 propiedad de navegación con valores de colección de systemuserroles_association.

Use propiedades de navegación con un solo valor

Para los registros existentes en el lado muchos de una relación uno a muchos o muchos a uno, puede asociar el registro estableciendo una referencia URI al otro registro. La forma más fácil y común de hacerlo es anexar la anotación @odata.bind al nombre de la propiedad de navegación con un solo valor y, a continuación, establecer el valor como el URI del otro registro en una solicitud PATCH.

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

Por ejemplo, para asociar un registro de contacto a un registro de cuenta mediante la parentcustomerid_account propiedad de navegación con 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, también puede asociar nuevos registros a los registros existentes de la misma manera.

Desasociar utilizando una propiedad de navegación de valor único

Para desasociar, establezca el valor en NULL.

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 mediante este método, no incluya la @odata.bind anotación . Use 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)

Para obtener más información, consulte Actualización básica.

Asocie y desasocie mediante solicitudes de $ref

Puede usar otros métodos para lograr los mismos resultados descritos anteriormente con propiedades de navegación con un solo valor.

Use la siguiente PUT solicitud para establecer el valor de la parentcustomerid_account propiedad de navegación con un solo valor:

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

Note

Debe usar una dirección URL absoluta al establecer el valor de @odata.id.

Para quitar la referencia, use esta DELETE solicitud:

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

Usar propiedades de navegación con valor de 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 uno a varios y varios a uno, la tabla del lado "Uno" tiene una propiedad de navegación con valores de colección. No hay ninguna diferencia en cómo trabajar con cualquiera de estos tipos de relaciones al usar 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 para 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 cuentacontact_customer_accounts donde el valor de contacto contactid es 00aa00aa-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 usando la API web
Redacción de solicitudes HTTP y control de 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
Uso de funciones de API web
Usar acciones de la API web
Ejecución de operaciones por lotes mediante la API web
Suplantar a otro usuario mediante la API web
Realización de operaciones condicionales mediante la API web