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:
//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