Pre-requisites:
- Download the CRM SDK for your CRM version from here : Download SDK Here (Imp: Choose your correct version of SDK)
- Once you downloaded the SDK extract the package and you will see the below directory structure after extraction.

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

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.
- json2.js
- SDK.REST.js
- FormScript_Report_REST.js
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