Crear una fila de tabla usando la API web
Use una solicitud POST
para enviar datos para crear una fila de tabla (registro de entidad). Puede crear varias filas de tabla relacionadas en una sola operación usando inserción profunda. También necesita saber cómo establecer valores para asociar una nueva fila de tabla a tablas existentes usando la anotación @odata.bind
.
Nota
Para obtener información sobre cómo crear y actualizar las definiciones de tabla (entidad) mediante la API web, consulte Crear y actualizar definiciones de tablas mediante la API web.
Crear básico
En este ejemplo crea un nuevo registro de entidad de cuenta. accounts
es el nombre de entidad establecido para account EntityType. El encabezado OData-EntityId
de respuesta contiene el URI de la entidad creada.
Solicitud:
POST [Organization URI]/api/data/v9.2/accounts
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"name": "Sample Account",
"creditonhold": false,
"address1_latitude": 47.639583,
"description": "This is the description of the sample account",
"revenue": 5000000,
"accountcategorycode": 1
}
Respuesta:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(7eb682f1-ca75-e511-80d4-00155d2a68d1)
Para crear un nuevo registro de entidad debe identificar el nombre del conjunto de ntidades, y los nombres y los tipos de propiedad válidos. Para todas las tablas y atributos del sistema (columnas de la tabla), puede encontrar esta información en el artículo para esa entidad en Referencia del tipo de entidad de la API web. Para tablas o columnas personalizadas, consulte la definición de esa tabla en $Metadata Document CSDL. Más información: EntityTypes de la API web
Establecer el valor de la clave principal
Cada tabla tiene una columna de clave principal de identificador único que puede especificar al crear una fila. En la mayoría de los casos debe permitir que el sistema lo establezca automáticamente porque los valores generados por el sistema se optimizan para el máximo rendimiento.
Con tablas elásticas, puede crear registros con valores de clave primaria duplicados y diferentes valores partitionid
. Sin embargo, este patrón no es compatible con lienzo o basado en modelo Power Apps. Obtenga información sobre cómo configurar el valor de la clave principal con tablas elásticas
Crear con datos devueltos
Puede crear su solicitud POST
de forma que los datos del registro creado sean devueltos con un estado de 201 (Created)
. Para obtener este resultado, debe usar la preferencia return=representation
en los encabezados de solicitud.
Para controlar qué propiedades se devuelven, anexe la opción de consulta $select
a la dirección URL del conjunto de entidades. También puede utilizar $expand
para devolver entidades relacionadas.
Las propiedades de navegación de $expand
anidado con valor de colección no devolverán datos cuando se usan con la preferencia return=representation
. Más información: Expansión anidada en propiedades de navegación con valores de colección
Cuando se crea una entidad de esta forma, el encabezado OData-EntityId
que contiene el URI al registro creado no se vuelve.
Este ejemplo crea una nueva entidad de cuenta y devuelve los datos solicitados en la respuesta.
Solicitud:
POST [Organization URI]/api/data/v9.2/accounts?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json; charset=utf-8
Prefer: return=representation
{
"name": "Sample Account",
"creditonhold": false,
"address1_latitude": 47.639583,
"description": "This is the description of the sample account",
"revenue": 5000000
}
Respuesta:
HTTP/1.1 201 Created
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/\"536530\"",
"accountid": "d6f193fc-ce85-e611-80d8-00155d2a68de",
"accountcategorycode": 1,
"description": "This is the description of the sample account",
"address1_latitude": 47.63958,
"creditonhold": false,
"name": "Sample Account",
"createdon": "2016-09-28T22:57:53Z",
"revenue": 5000000.0000,
"_transactioncurrencyid_value": "048dddaa-6f7f-e611-80d3-00155db5e0b6"
}
Crear múltiples registros en una sola solicitud
La forma más rápida de crear varios registros del mismo tipo en una sola solicitud es utilizar la acción CreateMultiple. En el momento de escribir este artículo, la acción CreateMultiple. 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: SDK para .NET, Usar operaciones masivas
- Use CreateMultiple con tablas elásticas
Crea filas de tablas relacionadas en una sola operación
Con las tablas estándar, puede crear entidades relacionadas entre sí definiéndolas como valores de propiedades de navegación. Este patrón se conoce como inserción en profundidad. Este método tiene dos ventajas. Es más eficiente, porque reemplaza múltiples operaciones más sencillas de creación y asociación con una operación atómica. Una operación atómica tiene éxito o falla por completo.
Como con un Crear básico, el encabezado OData-EntityId
de respuesta contiene el URI de la entidad creada. Los URI de las entidades relacionadas creadas no se devuelven. Puede obtener los valores de clave principal de los registros si utiliza el encabezado Prefer: return=representation
para que devuelva los valores del registro creado. Más información: Crear con datos devueltos
Por ejemplo, el siguiente cuerpo de solicitud enviado al conjunto de entidades accounts
crea un total de cuatro registros en el contexto de creación de una cuenta.
Se crea un contacto porque se define como una propiedad de objeto de la propiedad de navegación de valor único
primarycontactid
.Se crea una oportunidad porque se define como un objeto dentro de una matriz que se establece en el valor de una propiedad de navegación valorada como colección
opportunity_customer_accounts
.Se crea una tarea porque se define como un objeto en una matriz que se establece en el valor de una propiedad de navegación valorada como colección
Opportunity_Tasks
.
Nota
Cuando crea una nueva fila de tabla, no puede insertar una imagen no primaria al mismo tiempo. Para agregar una imagen no principal, la fila ya debe existir.
Solicitud:
POST [Organization URI]/api/data/v9.2/accounts
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"name": "Sample Account",
"primarycontactid":
{
"firstname": "John",
"lastname": "Smith"
},
"opportunity_customer_accounts":
[
{
"name": "Opportunity associated to Sample Account",
"Opportunity_Tasks":
[
{ "subject": "Task associated to opportunity" }
]
}
]
}
Respuesta:
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/accounts(3c6e4b5f-86f6-e411-80dd-00155d2a68cb)
Asociar filas de tabla en la creación
Para asociar nuevos registros nuevos ocn registros existentes al crearlos, use la anotación @odata.bind
par establecer el valor de las propiedades de navegación.
El siguiente cuerpo de solicitud enviado al conjunto de entidades de accounts
crea una nueva cuenta asociada a un contacto existentes con el valor contactid
de 00000000-0000-0000-0000-000000000001
y dos tareas existentes con valores activityid
de 00000000-0000-0000-0000-000000000002
y 00000000-0000-0000-0000-000000000003
.
Esta solicitud utiliza el encabezado Prefer: return=representation
para que devuelva los valores del registro creado. Más información: Crear con datos devueltos
Solicitud:
POST [Organization URI]/api/data/v9.2/accounts?$select=name&$expand=primarycontactid($select=fullname),Account_Tasks($select=subject)
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Prefer: return=representation
{
"name": "Sample Account",
"primarycontactid@odata.bind": "/contacts(00000000-0000-0000-0000-000000000001)",
"Account_Tasks@odata.bind": [
"/tasks(00000000-0000-0000-0000-000000000002)",
"/tasks(00000000-0000-0000-0000-000000000003)"
]
}
Respuesta:
HTTP/1.1 201 Created
OData-Version: 4.0
Preference-Applied: return=representation
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,primarycontactid(fullname),Account_Tasks(subject))/$entity",
"@odata.etag": "W/\"36236432\"",
"name": "Sample Account",
"accountid": "00000000-0000-0000-0000-000000000004",
"primarycontactid": {
"@odata.etag": "W/\"28877094\"",
"fullname": "Yvonne McKay (sample)",
"contactid": "00000000-0000-0000-0000-000000000001"
},
"Account_Tasks": [
{
"@odata.etag": "W/\"36236437\"",
"subject": "Task 1",
"activityid": "00000000-0000-0000-0000-000000000002"
},
{
"@odata.etag": "W/\"36236440\"",
"subject": "Task 2",
"activityid": "00000000-0000-0000-0000-000000000003"
}
]
}
Comprobar registros duplicados
De forma predeterminada, se suprime la detección de duplicados cuando se crean registros mediante la API web. Para hbilitar la detección de duplicados, incluya el encabezado MSCRM.SuppressDuplicateDetection: false
con la solicitud POST para habilitar la detección de duplicados. Detección de duplicados solo se aplica cuando se cumplen las siguientes condiciones:
- La organización ha habilitado la detección de duplicados.
- La entidad tiene habilitada la detección de duplicados.
- Se aplican las reglas de detección de duplicados activas.
Más información:
Crear un registro a partir de otro registro
Utilice la función InitializeFrom para crear un nuevo registro en el contexto de un registro existente en el que se asigna una relación entre tablas. Para obtener información sobre cómo crear estas asignaciones, consulte:
Para determinar si se pueden asignar dos entidades, utilice la consulta siguiente:
GET [Organization URI]/api/data/v9.2/entitymaps?$select=sourceentityname,targetentityname&$orderby=sourceentityname
La creación de un nuevo registro a partir de otro registro es un proceso de dos pasos. Primero, use la función InitializeFrom
para devolver valores de propiedad asignados desde el registro original. Luego, combien los datos de respuesta devueltos en InitializeFrom
function con los cambios que desee realizar y luego publique los datos mediante POST
para crear el registro.
El siguiente ejemplo muestra cómo crear un registro de cuenta utilizando los valores de un registro de cuenta existente con el valor accountid
igual a 00000000-0000-0000-0000-000000000001
.
Paso 1: Obtenga los datos con InitializeFrom
Solicitud:
GET [Organization URI]/api/data/v9.2/InitializeFrom(EntityMoniker=@p1,TargetEntityName=@p2,TargetFieldType=@p3)?@p1={'@odata.id':'accounts(00000000-0000-0000-0000-000000000001)'}&@p2='account'&@p3=Microsoft.Dynamics.CRM.TargetFieldType'ValidForCreate'
If-None-Match: null
OData-Version: 4.0
OData-MaxVersion: 4.0
Content-Type: application/json
Accept: application/json
Respuesta:
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"parentaccountid@odata.bind": "accounts(00000000-0000-0000-0000-000000000001)",
"transactioncurrencyid@odata.bind": "transactioncurrencies(732e87e1-1d96-e711-80e4-00155db75426)",
"address1_line1": "123 Maple St.",
"address1_city": "Seattle",
"address1_country": "United States of America"
}
Paso 2: Crear el nuevo registro
La respuesta recibida de InitializeFrom
function consta de valores de columnas asignadas entre la tabla de origen y la tabla de destino y el GUID del registro primario. La asignación de columnas entre las tablas que tienen una relación de entidad es diferente para tablas diferentes y se puede personalizar, por lo que la respuesta de la solicitud de InitializeFrom
function puede variar para organizaciones diferentes.
También pueden establecerse y/o modificarse otros valores de propiedades para el nuevo registro agregándolos en el cuerpo de la solicitud JSON, como se muestra en el siguiente ejemplo:
POST [Organization URI]/api/data/v9.2/accounts
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"parentaccountid@odata.bind": "accounts(00000000-0000-0000-0000-000000000001)",
"transactioncurrencyid@odata.bind": "transactioncurrencies(732e87e1-1d96-e711-80e4-00155db75426)",
"name":"Contoso Ltd",
"numberofemployees":"200",
"address1_line1":"100 Maple St.",
"address1_city":"Seattle",
"address1_country":"United States of America",
"fax":"73737"
}
}
Crear documentos en particiones de almacenamiento
Si está creando una gran cantidad de registros para tablas elásticas, puede crear las entidades en particiones de almacenamiento para acelerar el acceso a esos registros de entidad.
Más información: Crear un registro en una tabla elástica
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)
Función InitializeFrom
Realizar operaciones mediante la API web
Componer solicitudes HTTP y administrar errores
Consultar datos mediante la API web
Recuperar una fila de tabla usando la API web
Actualizar y eliminar filas de tablas 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).