Home

Sunday, December 25, 2016

Bulk data upload in MS Dynamic CRM

 Processes more than 1000 records in CRM in batches and returns the request with response and faults using response and request parameters.


--------------------------------------------------------------------------------------------------------------------------
The method takes entity-collection as a parameter and processes the entity collection based on its size, By default CRM service is restricted to execute only 1000 requests and we can manually change this count in CRM db.

private void ExecuteRequest(EntityCollection entityCollection)
        {          
            if (entityCollection.Entities.Count <= 1000)
            {
                ExecuteMultipleRequest requestWithResults = null;
                ExecuteMultipleResponse responseWithResults = null;
                requestWithResults = new ExecuteMultipleRequest()
                {
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = true,
                        ReturnResponses = true
                    },
                    Requests = new OrganizationRequestCollection()
                };

                foreach (var entity in entityCollection.Entities)
                {
                    CreateRequest createRequest = new CreateRequest { Target = entity };
                    requestWithResults.Requests.Add(createRequest);
                }

                // for requests less than 1000 
                responseWithResults = (ExecuteMultipleResponse)Service.Execute(requestWithResults);
                this.LogExecuteRequestResponse(requestWithResults, responseWithResults);
            }
            else
            {
                // for requests more than 1000 
                this.ProcessRequestinBatches(entityCollection);
            }

        }



--------------------------------------------------------------------------------------------------------------------------
This method process the entity collection batch by batch and process 1000 records at once.

        private void ProcessRequestinBatches(EntityCollection entityCollection)
        {
            int batchSize = 0;
            do
            {
                ExecuteMultipleRequest requestWithResults = new ExecuteMultipleRequest()
                {
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = true,
                        ReturnResponses = true
                    },
                    Requests = new OrganizationRequestCollection()
                };

                foreach (var entity in entityCollection.Entities.Skip(batchSize).Take(1000))
                {
                    CreateRequest createRequest = new CreateRequest { Target = entity };
                    requestWithResults.Requests.Add(createRequest);
                }

                ExecuteMultipleResponse responseWithResults = (ExecuteMultipleResponse)Service.Execute(requestWithResults);
                this.LogExecuteRequestResponse(requestWithResults, responseWithResults);

                batchSize += 1000;
            }
            while (batchSize < entityCollection.Entities.Count);
        }

Convert subgrid to Comments