Search code examples
soapdynamics-crmdynamics-crm-webapi

How do I fetch a list of >130 entities by ID from Dynamics 365?


I have a list of entity IDs that I need to fetch from Dynamics into my application. Using the WebAPI the query must be URL encoded and passed as a GET request which limits the number of entities to about 130 (more than that hits the URL length limit)

Previously we could use the SOAP endpoint to make a single POST request but this is on the deprecation path.

So what is the recommended way to make such a query now?

Some options:

  • Manually paginate and run through the WebAPI making parallel requests. This is less than ideal, especially when making abstractions around Dynamics since requests may fail.

UPDATE

Thanks to @Guido Preite I was able to use a WebAPI batch request. Basically you issue the GET request with the 130+ entities but encode it in the batch request body to work around the character limit. I'll post the request below for Postman ...

Post to {{myDynamicsURL}}/api/data/v9.0/$batch

Headers

Authorization:Bearer {{token}}
Content-Type:multipart/mixed;boundary=batch_AAA123 
Accept:application/json
Cache-Control:no-cache
OData-MaxVersion:4.0
OData-Version:4.0
Prefer:odata.maxpagesize=500, odata.include-annotations="*", return=representation

Body

--batch_AAA123
Content-Type: application/http  
Content-Transfer-Encoding:binary

GET {{myDynamicsURL}}/connections?$filter=(connectionid eq 9b704176-2f60-e911-a830-000d3a385a17 or connectionid eq 1ccc526c-2e6c-e911-a831-000d3a385a17 ... <REST OF QUERIES HERE>) HTTP/1.1
Accept: application/json

--batch_AAA123--

Solution

  • you can query using a FetchXML passed inside a POST request

    https://dreamingincrm.com/2017/01/15/executing-large-fetchxml-with-webapi/