Text Scroll

You must welcome, Thank you for visiting my blog.

Search This Blog

Sunday, June 28, 2020

Run SSRS report on selected record using java script and attached report in Note section

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:
/* Guid: Report GUID
Report Name: Report Name
Name: ReportName.rdl
format: Excel */
//Replace Entity Name / ID and SSRS parameter name CRM_"Paramentername"

function generateReport() {
    debugger;
    try{
    //if (Xrm.Page.getAttribute("new_createattachment").getValue() == false) {
        //var reportName = Xrm.Page.getAttribute("new_name").getValue();
        var reportName = "Contract Risk Assessment Report.rdl";
        //var reportGuid = Xrm.Page.getAttribute("new_reportid").getValue();
        var reportGuid = "ccbd5594-4be3-e911-a812-000d3af0205e";
        
        var selectedIds = Xrm.Page.data.entity.getId();
        //selectedIds=selectedIds.replace('{', '').replace('}', '');

        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_riskassessment'  enableprefiltering='1' prefilterparametername='CRM_riskassessment'> <all-attributes /> <filter type='and'> <condition attribute='new_riskassessmentid' operator='eq' value='" + selectedIds + "' /></filter></entity></fetch>";      

        var query = "id=%7B" + reportGuid 
                    + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName()
                    + "&iscustomreport=true&reportnameonsrs=&reportName=" + reportName
+ "&isScheduledReport=false&p:CRM_Parameter=" + encodeURI(reportPrefilter);
            var retrieveEntityReq = new XMLHttpRequest();
            retrieveEntityReq.open("POST", pth, false);
            retrieveEntityReq.setRequestHeader("Accept", "*/*");
            retrieveEntityReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieveEntityReq.send(query);

//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(rptPathString);
        //retrieveEntityReq.send("id=%7B" + reportGuid + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName() + "&iscustomreport=true&reportnameonsrs=&reportName=" + reportName + "&isScheduledReport=false&p:tmeic_riskassessmentid=" + selectedIds + "");
        //retrieveEntityReq.send("id=%7B" + reportGuid + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName() + "&iscustomreport=true&reportnameonsrs=&reportName=" + reportName + "&isScheduledReport=false");
    }
    catch(err)
    {
        alert(err.message);
    }
}

function convertToDocument(responseSession) {    
    //var format = Xrm.Page.getAttribute("tmeic_reportformat").getValue();
    var format="Excel";
    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);
            createNote(bdy, format);
        };
    };
    retrieveEntityReq.send();
}

function createNote(data, format) {
    var note = {};
    var recordId = Xrm.Page.data.entity.getId();
    recordId = recordId.replace('{', '').replace('}', '');
    //var RecordNumber = Xrm.Page.getAttribute("new_reportname").getValue()
    var RecordNumber = "Contract Risk Assessment Report";
    var refScheduleReports = new Object();
    //refScheduleReports.LogicalName = "new_schedulereports";
    refScheduleReports.LogicalName = "new_riskassessment";
    refScheduleReports.Id = recordId;
    note.ObjectId = refScheduleReports;
    note.ObjectTypeCode = refScheduleReports.LogicalName;
    //note.Subject = "Report: " + RecordNumber;
    //note.NoteText = "Report";
    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