Friday 13 September 2013

Bulk import functionality using Execcute Multiple Request UR12 -Not OOB feature

Hi folks, after long time adding something to my blog

This is a small feature which was requested by my client where they wanted to have bulk import functionality in there Web application but they never wanted to use OOB Bulk Import functionality in MSCRM 2011.
Scenario: Customer would upload a excel file from web application which consists (1000 Min) rows , for which the record should be created in MSCRM 2011

We Used normal create call but the time consumed to created record was very High . In a scenario time taken to create 25 records is (90 Sec Approx.) . Later we achieved the same using the new class in UR12 "ExecuteMultipleRequest" class. using which 25 records got created in (12 sec Approx.).Below code gives the demo of how to create a series of record using the new class.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;
using System.ServiceModel;
using MS.GetOnline.SiteInfo.code;
using MS.GetOnline.SiteInfo.CrmOrgServiceLib;
using Microsoft.Xrm.Sdk;
using System.Globalization;
using AjaxControlToolkit;
using System.Runtime.InteropServices;
using System.Collections;
using System.Text.RegularExpressions;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Crm.Sdk.Messages;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk.Client;
using System.Configuration;
using System.Data;
using System.Diagnostics;
namespace MS.GetOnline.SiteInfo
{
    public partial class Bulk_Import : System.Web.UI.Page
   
{
 public void bulkimport(List<SiteInformation> objSiteInformation, string status)
        {
            try
            {
//Object which we create using the data imported in Excel sheet Count.
                int noOfRecs = objSiteInformation.Count();
                List<Guid> _createdSiteGuids = new List<Guid>();
                #region Site with ExecuteMultipleRequest

                ExecuteMultipleRequest SiteCreation = new ExecuteMultipleRequest()
                {
                    // Assign settings that define execution behavior: continue on error, return responses.
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = true,
                        ReturnResponses = true
                    },
                    // Create an empty organization request collection.
                    Requests = new OrganizationRequestCollection()
                };
                for (int i = 0; i < noOfRecs; i++)
                {
                    Entity site = new Entity("Entity Logical Name");
                    site["new_name"] = objSiteInformation[i].SiteUrl;
                    Guid PrimaryContactIdStr = new Guid(Crm.Data.GetContactIdByFullName(objSiteInformation[i].PrimaryContactName));
                    site["new_primarycontactid"] = new EntityReference("contact", PrimaryContactIdStr);
                    site["new_username"] = objSiteInformation[i].UserID;
                    site["new_password"] = objSiteInformation[i].Password;
                
                    if (objSiteInformation[i].dataClass == "LBI")
                    {
                        site["new_dataclassification"] = new OptionSetValue(100000000);
                    }
                    else
                        if (objSiteInformation[i].dataClass == "MBI")
                        {
                            site["new_dataclassification"] = new OptionSetValue(100000001);
                        }
                        else
                        {
                            site["new_dataclassification"] = new OptionSetValue(100000002);
                        }
                   //  Create New request For ExecuteMutlipleRequest                  
                    CreateRequest createReq = new CreateRequest { Target = site };
                    SiteCreation.Requests.Add(createReq);
                }
                // Execute all the requests in the request collection using a single web method call.
                ExecuteMultipleResponse siteResults = (ExecuteMultipleResponse)_xrm.Execute(SiteCreation);
                // Display the results returned in the responses.
                foreach (var responseItem in siteResults.Responses)
                {
                    // A valid response.
                    if (responseItem.Response != null)
                    {
                        _createdSiteGuids.Add(new Guid(responseItem.Response.Results["id"].ToString()));
                    }
                }
               }


}
}


Hope this helps you in your scenario.....
 

No comments:

Post a Comment