Home

Showing posts with label Create request. Show all posts
Showing posts with label Create request. Show all posts

Wednesday, September 13, 2017

Create Entity using Web API in Dynamics 365

Creating an account record with name "sample account" using web api's
https://msdn.microsoft.com/en-us/library/gg328090.aspx
// Request 
POST [Organization URI]/api/data/v8.2/accounts HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
    "name": "Sample Account",  
}
// Response
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v8.2/accounts(GUID)
---------------------------------------------------------------------------------------------------
function createEntity() {
    var entityName = "accounts";// Entity Name
    var clientURL = Xrm.Page.context.getClientUrl();// To get CRM client URl 
    var req = new XMLHttpRequest(); //Creating New HTTP request

    req.open("POST", encodeURI(clientURL + "/api/data/v8.2/" + entityName, true));

    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");

    req.onreadystatechange = function () {
        if (this.readyState == 4 /* complete */) {
            req.onreadystatechange = null;
            if (this.status == 204) {/* Status 204 denotes success */
                alert("account created from api");
            }
            else {
                var error = JSON.parse(this.response).error;
                alert(error.message);
            }
        }
    };

    req.send(JSON.stringify(// json object to be created
        {
            name: "sample account"
        }));

}

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