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