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 Dataverse existentes, consulte Web API EntityType Reference; para cada tipo de entidad, consulte las propiedades de navegación valoradas como colección y de un solo valor.
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 account puede tener muchos registros contact en la propiedad de navegación valorada como colección contact_customer_accounts . |
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. |
Muchos registros contact se pueden asociar a un solo registro account usando la propiedad de navegación valorada como colección parentcustomerid_account . |
Varios a varios | Muchos registros se pueden asociar a muchos registros. | Cada security role (role) puede incluir referencias a la definición de un systemuser. Ambas tablas tienen una propiedad de navegación valorada como colección systemuserroles_association . |
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 forma más fácil y común de hacer esto es agregando la anotación @odata.bind
al nombre de la propiedad de navegación de un solo valor y, luego, estableciendo el valor como el Uri para el otro registro en una solicitud PATCH
.
Asociar con una propiedad de navegación de un solo valor
Por ejemplo, para asociar un registro contact a un account utilizando la propiedad de navegación de un solo valor parentcustomerid_account
:
Solicitud:
PATCH [Organization Uri]/api/data/v9.2/contacts(cf9eaaef-f718-ed11-b83e-00224837179f) 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(cf9eaaef-f718-ed11-b83e-00224837179f)
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(cf9eaaef-f718-ed11-b83e-00224837179f) 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(cf9eaaef-f718-ed11-b83e-00224837179f)
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(cf9eaaef-f718-ed11-b83e-00224837179f) 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(cf9eaaef-f718-ed11-b83e-00224837179f)
Más información: Actualización básica
Otros métodos
Hay otras formas de lograr los mismos resultados descritos anteriormente con 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(cf9eaaef-f718-ed11-b83e-00224837179f)/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(cf9eaaef-f718-ed11-b83e-00224837179f)/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 Varios a varios tendrán propiedades de navegación valoradas como colección. En relaciones Uno a varios y Varios a uno, la tabla uno del lado 'Uno' tendrá una propiedad de navegación valorada como colección. No hay diferencia en cómo trabaja con cualquiera de estos tipos de relaciones mientras usa propiedades de navegación valoradas como colección. Esta sección describirá cómo trabajar con propiedades de navegación valoradas como colección con cualquier tipo de relación.
Agregar un registro a una colección
El siguiente ejemplo muestra cómo agregar un registro contact a la colección accountcontact_customer_accounts
que es parte de una relación 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(cf9eaaef-f718-ed11-b83e-00224837179f)"
}
Respuesta:
HTTP/1.1 204 NoContent
OData-Version: 4.0
El siguiente ejemplo muestra cómo agregar un registro role a la colección systemusersystemuserroles_association
que es parte de una relación 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
El siguiente ejemplo muestra cómo eliminar un registro contact a la colección accountcontact_customer_accounts
donde el valor contactid
del contacto es cf9eaaef-f718-ed11-b83e-00224837179f
.
Solicitud:
DELETE [Organization Uri]/api/data/v9.2/accounts(ce9eaaef-f718-ed11-b83e-00224837179f)/contact_customer_accounts(cf9eaaef-f718-ed11-b83e-00224837179f)/$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
Lo siguiente también funciona:
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(cf9eaaef-f718-ed11-b83e-00224837179f) 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
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de