Text Scroll

You must welcome, Thank you for visiting my blog.

Search This Blog

Monday, July 6, 2020

Attached SSRS Report in Note by Custom Button Click Automatically in MS CRM

Pre-requisites:

  • Download the CRM SDK for your CRM version from here : Download SDK Here (Imp: Choose your correct version of SDK)

download page.png

  • Once you downloaded the SDK extract the package and you will see the below directory structure after extraction.

Folder.png

Now navigate the below path and you will get 3 java script files as per below screenshot.

Path

C:\Users\Sanjaya\Desktop\Dynamics CRM SDK 2011\SDK\SampleCode\JS\RESTEndpoint\JavaScriptRESTDataOperations\JavaScriptRESTDataOperations\Scripts

path.png

We only require two scripts json2.js & SDK.REST from this folder.

  • Now create two JScript web resources in Dynamics CRM and upload these above two javascript in the web resources.
The Libraries order should be.
  • json2.js
  • SDK.REST.js
  • FormScript_Report_REST.js
Add events required and point to the function written in FormScript_Report_REST.js script.

Javascript Code:

//Function to run the report in required format (PDF)
function generateReport() {
    //debugger;
    try{    
        var reportName = "ReportName.rdl"; //Replace
        var reportGuid = "491d292c-1211-ea11-a811-000d3af025d7"; //Replace
        
        var selectedIds = Xrm.Page.data.entity.getId();
        var pth = Xrm.Page.context.getClientUrl() + "/CRMReports/rsviewer/reportviewer.aspx";
        var reportPrefilter = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='new_entityName'  enableprefiltering='1' prefilterparametername='CRM_Paramenter'> <all-attributes /> <filter type='and'> <condition attribute='new_entityid' operator='eq' value='" + selectedIds + "' /></filter></entity></fetch>";  

//Replace Entity Name / ID and SSRS parameter name CRM_"Paramentername"

        var query = "id=%7B" + reportGuid 
                    + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName()
                    + "&iscustomreport=true&reportnameonsrs=&reportName=" + reportName
                    + "&isScheduledReport=false&p:CRM_Paramenter=" + encodeURI(reportPrefilter);                                        
        var retrieveEntityReq = new XMLHttpRequest();
            retrieveEntityReq.open("POST", pth, false);
            retrieveEntityReq.setRequestHeader("Accept", "*/*");
            retrieveEntityReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
            retrieveEntityReq.onreadystatechange = function() {
            if (retrieveEntityReq.readyState == 4 && retrieveEntityReq.status == 200) {
                var x = retrieveEntityReq.responseText.lastIndexOf("ReportSession=");
                var y = retrieveEntityReq.responseText.lastIndexOf("ControlID=");
                var ret = new Array();
                ret[0] = retrieveEntityReq.responseText.substr(x + 14, 24);
                ret[1] = retrieveEntityReq.responseText.substr(y + 10, 32);
                convertToDocument(ret);
            };
        };
        retrieveEntityReq.send(query);
        }
    catch(err)
    {
        alert(err.message);
    }
}

function convertToDocument(responseSession) {
    var format="PDF";
    var pth = Xrm.Page.context.getClientUrl() + "/Reserved.ReportViewerWebControl.axd?ReportSession=" + responseSession[0] + "&Culture=1033&CultureOverrides=True&UICulture=1033&UICultureOverrides=True&ReportStack=1&ControlID=" + responseSession[1] + "&OpType=Export&FileName=Public&ContentDisposition=OnlyHtmlInline&Format=" + reportAttributes(format).urlAttribute;
    
    var retrieveEntityReq = new XMLHttpRequest();
    retrieveEntityReq.open("GET", pth, true);
    retrieveEntityReq.setRequestHeader("Accept", "*/*");
    retrieveEntityReq.responseType = "arraybuffer";
    retrieveEntityReq.onreadystatechange = function() {
        if (retrieveEntityReq.readyState == 4 && retrieveEntityReq.status == 200) {
            var binary = "";
            var bytes = new Uint8Array(this.response);
            for (var i = 0; i < bytes.byteLength; i++) {
                binary += String.fromCharCode(bytes[i]);
            }
            var bdy = btoa(binary);
debugger;            
                createNote(bdy, format);            
        };
    };
    retrieveEntityReq.send();
}

function createNote(data, format) {
    var note = {};
    var recordId = Xrm.Page.data.entity.getId();
    recordId = recordId.replace('{', '').replace('}', '');
    var RecordNumber = "Report Name"; //Replace
    var refScheduleReports = new Object();
    refScheduleReports.LogicalName = "new_entityName"; // For which entity u want to create Note
    refScheduleReports.Id = recordId;
    note.ObjectId = refScheduleReports;
    note.ObjectTypeCode = refScheduleReports.LogicalName;
    note.MimeType = reportAttributes(format).mimeTypeAttribute;
    note.DocumentBody = data;
    note.FileName = RecordNumber + reportAttributes(format).fileNameAttribute;

    SDK.REST.createRecord(
        note,
        "Annotation",
        function(result) {            
            Xrm.Page.data.entity.save();
        },
        function(error) {
            alert(error.message);
        },
        true
    );
}

function reportAttributes(format) {
    var reportObject = {};
    reportObject["urlAttribute"] = "";
    reportObject["mimeTypeAttribute"] = "";
    reportObject["fileNameAttribute"] = "";
    if (format == "Excel") {
        reportObject.urlAttribute = "EXCELOPENXML";
        reportObject.mimeTypeAttribute = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        reportObject.fileNameAttribute = ".xlsx";
    } else if (format == "PDF") {
        reportObject.urlAttribute = "PDF";
        reportObject.mimeTypeAttribute = "application/pdf";
        reportObject.fileNameAttribute = ".pdf";
    }
    return reportObject;
}

No comments:

Post a Comment