Text Scroll

You must welcome, Thank you for visiting my blog.

Search This Blog

Sunday, June 28, 2020

Run Report in required format and attached in Note Section


function generateReport() {
    if (Xrm.Page.getAttribute("createattachment").getValue() == false) {
        var reportName = Xrm.Page.getAttribute("Report_name").getValue();
        var reportGuid = Xrm.Page.getAttribute("Reportid").getValue();
        var pth = Xrm.Page.context.getClientUrl() + "/CRMReports/rsviewer/reportviewer.aspx";
        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("id=%7B" + reportGuid + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName() + "&iscustomreport=true&reportnameonsrs=&reportName=" + reportName + "&isScheduledReport=false");
    }
}

function convertToDocument(responseSession) {
    var retrieveEntityReq = new XMLHttpRequest();
    var format = Xrm.Page.getAttribute("reportformat").getValue();
    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;
    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("reportname").getValue()

    var refScheduleReports = new Object();
    refScheduleReports.LogicalName = "schedulereports";
    refScheduleReports.Id = recordId;

    note.ObjectId = refScheduleReports;
    note.ObjectTypeCode = refScheduleReports.LogicalName;
    note.Subject = "Report: " + RecordNumber;
    note.NoteText = "Report Attachment";
    note.MimeType = reportAttributes(format).mimeTypeAttribute;
    note.DocumentBody = data;
    note.FileName = RecordNumber + reportAttributes(format).fileNameAttribute;

    SDK.REST.createRecord(
        note,
        "Annotation",
        function(result) {
            Xrm.Page.getAttribute("createattachment").setValue(true);
            Xrm.Page.getAttribute("sendemail").setValue(true);
            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