Ejecute las operaciones por lotes mediante API web
Publicado: enero de 2017
Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Puede agrupar varias operaciones en una sola solicitud HTTP con una operación por lotes.
En este tema
Cuándo usar solicitudes por lotes
Solicitudes por lotes
Conjuntos de cambios
Ejemplo
Cuándo usar solicitudes por lotes
El valor que las solicitudes por lotes proporcionan es que pueden incluir conjuntos de cambios, que proporcionan una forma de empaquetar varias operaciones que se realizan correcta o incorrectamente como grupo. en una transacción. En comparación con otras operaciones que se pueden realizar a través de la API web, estas son más difíciles de crear sin algún modelo de objetos que incluya la serialización de objetos o una descripción más profunda del protocolo HTTP porque el cuerpo de la solicitud es esencialmente un documento de texto que debe cumplir requisitos muy específicos.
Recuerde que las entidades asociadas se pueden crear en una sola operación más fácilmente que usando una solicitud por lotes. La solicitudes por lotes son más convenientes al realizar operaciones en entidades que no están asociadas entre sí cuando todas las operaciones se deben realizar en una sola operación transaccional.
Además, las respuestas devueltas son esencialmente documentos de texto en lugar de objetos que pueden fácilmente ser analizados en JSON. Necesitará analizar el texto de la respuesta o localizar una biblioteca de código auxiliar para tener acceso a los datos de la respuesta.
Solicitudes por lotes
Use una solicitud POST para enviar una operación por lotes que contenga varias solicitudes. Una solicitud por lotes puede incluir solicitudes GET y conjuntos de cambios. Para usar las funcionalidades transaccionales de solicitudes por lotes, solo las operaciones que cambiarán datos se pueden incluir en un conjunto de cambios. Las solicitudes GET no se deben incluir en el conjunto de cambios.
La solicitud POST que contiene el lote debe tener un encabezado del tipo contenido con un valor establecido como multiparte/mixto con un conjunto de límites para incluir el identificador del lote utilizando este patrón:
--batch_<unique identifier>
El identificador único no necesita ser un GUID, pero debe ser único. Cada elemento dentro del lote debe ir precedido del identificador de lote con un encabezado Content-Type y Content-Transfer-Encoding como el siguiente:
--batch_WKQS9Yui9r
Content-Type: application/http
Content-Transfer-Encoding:binary
El final del lote debe contener un indicador de finalización como el siguiente:
--batch_WKQS9Yui9r--
Nota
La preferencia de odata.continue-on-error no es compatible con la API web. Los errores que se producen en el lote detendrán el procesamiento del resto del lote.
Conjuntos de cambios
Cuando un conjunto de cambios contiene varias operaciones, todas ellas se consideran atómicas, lo que significa que si alguna de las operaciones produce error, se revertirán las operaciones completadas. Como una solicitud de lote, los conjuntos de cambios deben tener un encabezado de tipo contenido con un valor establecido como multiparte/mixto con un conjunto de límites para incluir el identificador del conjunto de cambios utilizando este patrón:
--changeset_<unique identifier>
El identificador único no necesita ser un GUID, pero debe ser único. Cada elemento dentro del conjunto de cambios debe ir precedido del identificador de conjunto de cambios con un encabezado Content-Type y Content-Transfer-Encoding como el siguiente:
--changeset_BBB456
Content-Type: application/http
Content-Transfer-Encoding:binary
Los conjuntos de cambio también pueden incluir un encabezado Content-ID con un valor único. Este valor, cuando va precedido de $, representa una variable que contiene la Uri para cualquier entidad creada en esa operación. Por ejemplo, cuando establece el valor de 1, puede hacer referencia a esa entidad usando $1 más adelante en el conjunto de cambios.
El final del conjunto de cambios debe contener un indicador de finalización como el siguiente:
--changeset_BBB456--
Ejemplo
El siguiente ejemplo incluye un lote con un identificador único de AAA123 y un conjunto de cambios establecido con un identificador único de BBB456.
Dentro del conjunto de cambios, se crean dos tareas usando POST y se asocian con una cuenta existente con accountid = 00000000-0000-0000-000000000001.
Finalmente, se incluye una solicitud GET fuera del conjunto de cambios para devolver las seis tareas asociadas con la cuenta, incluidas las dos que se crearon en la solicitud de lote.
Solicitud
POST cc_WebAPI_ServiceURI/$batch HTTP/1.1 Content-Type: multipart/mixed;boundary=batch_AAA123 Accept: application/json OData-MaxVersion: 4.0 OData-Version: 4.0 --batch_AAA123 Content-Type: multipart/mixed;boundary=changeset_BBB456 --changeset_BBB456 Content-Type: application/http Content-Transfer-Encoding:binary Content-ID: 1 POST cc_WebAPI_ServiceURI/tasks HTTP/1.1 Content-Type: application/json;type=entry {"subject":"Task 1 in batch","regardingobjectid_account_task@odata.bind":"cc_WebAPI_ServiceURI/accounts(00000000-0000-0000-000000000001)"} --changeset_BBB456 Content-Type: application/http Content-Transfer-Encoding:binary Content-ID: 2 POST cc_WebAPI_ServiceURI/tasks HTTP/1.1 Content-Type: application/json;type=entry {"subject":"Task 2 in batch","regardingobjectid_account_task@odata.bind":"cc_WebAPI_ServiceURI/accounts(00000000-0000-0000-000000000001)"} --changeset_BBB456-- --batch_AAA123 Content-Type: application/http Content-Transfer-Encoding:binary GET cc_WebAPI_ServiceURI/accounts(00000000-0000-0000-000000000001)/Account_Tasks?$select=subject HTTP/1.1 Accept: application/json --batch_AAA123--
Respuesta
--batchresponse_c1bd45c1-dd81-470d-b897-e965846aad2f Content-Type: multipart/mixed; boundary=changesetresponse_ff83b4f1-ab48-430c-b81c-926a2c596abc --changesetresponse_ff83b4f1-ab48-430c-b81c-926a2c596abc Content-Type: application/http Content-Transfer-Encoding: binary Content-ID: 1 HTTP/1.1 204 No Content OData-Version: 4.0 Location: cc_WebAPI_ServiceURI/tasks(a59c24f3-fafc-e411-80dd-00155d2a68cb) OData-EntityId: cc_WebAPI_ServiceURI/tasks(a59c24f3-fafc-e411-80dd-00155d2a68cb) --changesetresponse_ff83b4f1-ab48-430c-b81c-926a2c596abc Content-Type: application/http Content-Transfer-Encoding: binary Content-ID: 2 HTTP/1.1 204 No Content OData-Version: 4.0 Location: cc_WebAPI_ServiceURI/tasks(a69c24f3-fafc-e411-80dd-00155d2a68cb) OData-EntityId: cc_WebAPI_ServiceURI/tasks(a69c24f3-fafc-e411-80dd-00155d2a68cb) --changesetresponse_ff83b4f1-ab48-430c-b81c-926a2c596abc-- --batchresponse_c1bd45c1-dd81-470d-b897-e965846aad2f Content-Type: application/http Content-Transfer-Encoding: binary HTTP/1.1 200 OK Content-Type: application/json; odata.metadata=minimal OData-Version: 4.0 { "@odata.context":"cc_WebAPI_ServiceURI/$metadata#tasks(subject)","value":[ { "@odata.etag":"W/\"474122\"","subject":"Task Created with Test Account","activityid":"919c24f3-fafc-e411-80dd-00155d2a68cb" },{ "@odata.etag":"W/\"474125\"","subject":"Task 1","activityid":"a29c24f3-fafc-e411-80dd-00155d2a68cb" },{ "@odata.etag":"W/\"474128\"","subject":"Task 2","activityid":"a39c24f3-fafc-e411-80dd-00155d2a68cb" },{ "@odata.etag":"W/\"474131\"","subject":"Task 3","activityid":"a49c24f3-fafc-e411-80dd-00155d2a68cb" },{ "@odata.etag":"W/\"474134\"","subject":"Task 1 in batch","activityid":"a59c24f3-fafc-e411-80dd-00155d2a68cb" },{ "@odata.etag":"W/\"474137\"","subject":"Task 2 in batch","activityid":"a69c24f3-fafc-e411-80dd-00155d2a68cb" } ] } --batchresponse_c1bd45c1-dd81-470d-b897-e965846aad2f--
Ver también
Realizar operaciones mediante la API web
Componer solicitudes HTTP y administrar errores
Consultar datos utilizando la API web
Cree una entidad usando API web
Recuperar una entidad usando API web
Actualizar y eliminar entidades mediante la API web
Asociar y anular la asociación de entidades mediante la API web
Usar funciones de la API web
Usar acciones de la API web
Suplantar a otro usuario utilizando la API web
Realizar operaciones condicionales mediante la API web
Microsoft Dynamics 365
© 2017 Microsoft. Todos los derechos reservados. Copyright