Actualizar y eliminar filas de tablas usando la API web
Las operaciones para modificar datos son una parte básica de la API web. Además de una simple actualización y eliminación de operaciones, puede realizar operaciones en columnas de una sola tabla (atributos de entidad) y componer solicitudes upsert que actualizarán o insertarán datos dependiendo de si existen.
Actualización básica
Las operaciones de actualización usan el verbo HTTP PATCH
. Pase un objeto JSON que contenga las propiedades que desee actualizar a la URL que representa al registro. Se devolverá una respuesta con un estado de 204 No Content
si la actualización es correcta.
El encabezado If-Match: *
garantiza que no crea un nuevo registro al realizar accidentalmente una operación upsert. Más información: Evitar realizar operaciones de creación en upsert.
Importante
Al actualizar una entidad, incluya únicamente las propiedades que está modificando en el cuerpo de la solicitud. Actualizando simplemente las propiedades de una entidad que recuperó anteriormente, e incluyendo ese JSON en su solicitud, se actualizará cada propiedad aunque el valor sea el mismo. Esto puede provocar eventos del sistema que pueden desencadenar la lógica de negocios que espera que los valores hayan cambiado. Esto puede hacer que parezca que las propiedades se han actualizado en auditoría de datos cuando de hecho no han cambiado realmente.
Cuando actualice la propiedad statecode
, es importante establecer siempre el statuscode
deseado. statecode
y statuscode
tienen valores dependientes. Puede haber varios valores statuscode
válidos para un valor statecode
dado, pero cada columna de statecode
tiene un único valor DefaultStatus configurado. Cuando actualice statecode
sin especificar un statuscode
, el sistema establecerá el valor de estado predeterminado. Además, cuando la auditoría está habilitada en la tabla y la columna statuscode
, el valor modificado para la columna statuscode
no se capturará en los datos de auditoría a menos que se especifique en la operación de actualización.
Nota
La definición de atributos incluye una propiedad RequiredLevel
. Cuando esta opción se establece en SystemRequired
, no puede establecer estos atributos a un valor nulo. Más información: Nivel de requisito de atributo
Este ejemplo actualiza un registro de cuenta existente con el valor accountid
de 00000000-0000-0000-0000-000000000001.
Solicitud:
PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-Match: *
{
"name": "Updated Sample Account ",
"creditonhold": true,
"address1_latitude": 47.639583,
"description": "This is the updated description of the sample account",
"revenue": 6000000,
"accountcategorycode": 2
}
Respuesta:
HTTP/1.1 204 No Content
OData-Version: 4.0
Nota
Consulte Uso de propiedades de navegación de un solo valor para obtener información sobre cómo asociar y desasociar entidades en la actualización.
Actualizar con datos devueltos
Para recuperar datos de una entidad que está actualizando puede crear la solicitud PATCH
de forma que los datos del registro creado sean devueltos con un estado de 200 (OK). Para obtener este resultado, debe usar el encabezado de solicitud Prefer: return=representation
.
Para controlar qué propiedades se devuelven, anexe la opción de consulta $select
a la dirección URL del conjunto de entidades. Se ignorará la opción de consulta $expand
si se utiliza.
Este ejemplo actualiza una entidad de cuenta y devuelve los datos solicitados en la respuesta.
Solicitud:
PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json; charset=utf-8
Prefer: return=representation
If-Match: *
{"name":"Updated Sample Account"}
Respuesta:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
Preference-Applied: return=representation
OData-Version: 4.0
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
"@odata.etag": "W/\"536537\"",
"accountid": "00000000-0000-0000-0000-000000000001",
"accountcategorycode": 1,
"description": "This is the description of the sample account",
"address1_latitude": 47.63958,
"creditonhold": false,
"name": "Updated Sample Account",
"createdon": "2016-09-28T23:14:00Z",
"revenue": 5000000.0000,
"_transactioncurrencyid_value": "048dddaa-6f7f-e611-80d3-00155db5e0b6"
}
Actualizar múltiples registros en una sola solicitud
La forma más rápida de actualizar varios registros del mismo tipo en una sola solicitud es utilizar la acción UpdateMultiple. En el momento de escribir este artículo, la acción UpdateMultiple. No todas las tablas estándar admiten esta acción, pero todas las tablas elásticas sí.
Más información:
- Mensajes de operación en masa
- Muestra: API web, Usar operaciones masivas
- Use UpdateMultiple con tablas elásticas
Actualizar un solo valor de propiedad
Cuando desee actualizar únicamente un solo valor de propiedad, utilice una solicitud PUT
con el nombre de propiedad anexado a la Uri de la entidad.
El siguiente ejemplo actualiza la propiedad de name
de una fila account
existente con el valor accountid
de 00000000-0000-0000-0000-000000000001.
Solicitud:
PUT [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/name HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
{"value": "Updated Sample Account Name"}
Respuesta:
HTTP/1.1 204 No Content
OData-Version: 4.0
Eliminar un solo valor de propiedad
Para eliminar el valor de una sola propiedad, utilice una solicitud DELETE
con el nombre de propiedad anexado a la Uri de la entidad.
El siguiente ejemplo elimina el valor de la propiedad description
de una entidad de cuenta existente con el valor accountid
de 00000000-0000-0000-0000-000000000001.
Solicitud:
DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/description HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Respuesta:
HTTP/1.1 204 No Content
OData-Version: 4.0
Nota
Esto no se puede usar con una propiedad de navegación de un solo valor para anular la asociación de dos entidades. Para un enfoque alternativo, consulte Desasociar con una propiedad de navegación de un solo valor.
Upsert la fila de una tabla
Una operación upsert es similar a una actualización. Usa una solicitud PATCH
y usa una URI para hacer referencia a un registro específico. La diferencia es que si el registro no existe, se creará. Si ya existe, se actualiza.
Upsert es valioso al sincronizar datos entre sistemas externos. El sistema externo no puede contener una referencia a la clave principal de la tabla Dataverse, por lo que puede configurar claves alternativas para la tabla Dataverse utilizando valores del sistema externo que identifiquen de forma única el registro en ambos sistemas. Más información: Definir claves alternativas para hacer referencia a filas
Puede ver las claves alternativas definidas para una tabla en las anotaciones para el tipo de entidad en el documento $Metadata Service. Más información: Claves alternativas.
En el siguiente ejemplo, hay una tabla con el nombre sample_thing
que tiene un clave alternativa que hace referencia a dos columnas: sample_key1
y sample_key2
, ambas definidas para almacenar valores enteros.
Solicitud:
PATCH [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1) HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Content-Type: application/json
{
"sample_name": "1:1"
}
Tanto para las operaciones de creación como para las de actualización, obtiene la misma respuesta. El encabezado de respuesta OData-EntityId
usa los valores clave, y no el identificador de clave principal GUID para el registro.
Respuesta:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1)
Debido a que la respuesta es la misma, no puede saber si la operación representó una operación Create
o Update
.
Si necesita saberlo, puede usar el encabezado de solicitud Prefer: return=representation
. Con este encabezado, obtiene una respuesta 201 Created
cuando se crea un registro y una respuesta 200 OK
cuando se actualiza el registro. Esta opción agrega una operación Retrieve
, que tiene un impacto en el rendimiento. Si usa el encabezado de solicitud Prefer: return=representation
, asegúrese de que su $select
incluya la cantidad mínima de datos, preferiblemente solo la columna de clave principal. Más información: Actualizar con datos devueltos y Crear con datos devueltos.
Cuando utilice claves alternativas, no debe incluir los valores clave alternativa en el cuerpo de la solicitud.
- Cuando un upsert representa un
Update
, estos valores clave alternativa se ignoran. No puede actualizar los valores de clave alternativa mientras los usa para identificar el registro. - Cuando un upsert representa a
Create
, los valores clave en la URL se establecen para el registro si no están presentes en el cuerpo. Por lo tanto, no es necesario incluirlos en el cuerpo de la solicitud.
Más información: Uso de Upsert para crear o actualizar un registro
Nota
Normalmente, al crear un nuevo registro, usted deja que el sistema asigne un valor GUID para la clave principal. Este es un método recomendado porque el sistema genera claves que están optimizadas para el índice, y esto mejora el rendimiento. Pero, si necesita crear un registro con un valor de clave principal específico, como cuando un sistema externo genera el valor GUID de clave, la operación upsert
proporciona una manera de hacer esto.
Impedir crear o actualizar con upsert
A veces, hay situaciones donde desea realizar upsert
, pero desea evitar una de las operaciones potenciales: crear o actualizar. Puede hacerlo mediante encabezados If-Match
o If-None-Match
. Para obtener más información, consulte Limitar operaciones de upsert.
Eliminación básica
Una operación de eliminación es sencilla. Utilice el verbo DELETE
con el URI de la entidad que desea borrar. Este mensaje de ejemplo elimina una entidad de cuenta con el valor de clave principal accountid
igual a 00000000-0000-0000-0000-000000000001.
Solicitud:
DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1
Content-Type: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Respuesta:
Si existe la entidad, recibirá una respuesta con estado 204 para indicar que la eliminación fue correcta. Si no se encuentra la entidad, recibirá una respuesta con estado 404.
HTTP/1.1 204 No Content
OData-Version: 4.0
Comprobar registros duplicados
Consulte Detectar duplicados durante la operación de actualizaicón mediante la API web para obtener más información sobre cómo buscar registros duplicados durante la operación de actualización.
Eliminar múltiples registros en una sola solicitud
La forma más rápida de eliminar varios registros del mismo tipo en una sola solicitud es utilizar la acción DeleteMultiple
. En el momento de escribir este artículo, la acción DeleteMultiple
es una función de vista previa. Las tablas estándar no admiten esta acción, pero todas las tablas elásticas sí.
Nota
Para las tablas estándar, recomendamos usar la acción BulkDelete, que permite la eliminación asíncrona de registros que coinciden con una consulta. Más información: Eliminar datos en masa
Más información:
- Mensajes de operación en masa
- Código de ejemplo de tablas elásticas
- Use DeleteMultiple con tablas elásticas
Actualizar y eliminar documentos en particiones de almacenamiento
Si está actualizando o eliminando datos de tabla elástica almacenados en particiones, asegúrese de especificar la clave de partición cuando acceda a esos datos.
Más información: Elegir un valor de PartitionId
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 mediante la API web
Crear una fila de tabla usando la API web
Recuperar una fila de tabla usando la API web
Asociar y anular la asociación de filas de tabla mediante 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).