web
You’re offline. This is a read only version of the page.
close
Skip to main content
Community site session details

Community site session details

Session Id :
Microsoft Dynamics CRM (Archived)

How to send SSRS report as a PDF in Email in Dynamics CRM Online

(0) ShareShare
ReportReport
Posted on by 15

With this js code you can send a ssrs report as PDF attachment in an email! 

I tested it and it works.

var reportName = "Ticket report"; //Please specify your report name.
var reportId = null;
var fileName = Xrm.Page.getAttribute("ticketnumber").getValue(); //Please specify a file which you want to save.
var fromFieldId = null;
var fromFieldEntityName = null;
var toFieldId = null;
var toFieldEntityName = null;
var emailId = null;
var reportGuid = "13AF3881-9670-E911-80F3-00155D1F9339"; // your report guid

//This function is need to be called from action side e.g. Ribbon button click.
function emailreportPDF() {
//This function does not work in add mode of form.
var type = Xrm.Page.ui.getFormType();
if (type != 1) {
GetIds(); // Set ids in global variables.
CreateEmail(); //Create Email
}
}

//Gets the fromFieldId and toFieldEntityName used to set Email To & From fields
function GetIds() {
fromFieldId = "81098448-A265-E911-80ED-00155D1F9332";//The Guid which needs to be set in form field.
fromFieldEntityName = "systemuser";//Please specify entity name for which you have specified above Guid. Most probably it's systemuser.
toFieldId = "44144DFB-2B81-E911-80F4-00155D1F9332"; //The Guid which needs to be set in to field.
toFieldEntityName = "contact";//Please specify entity name for which you have specified above Guid.
}
//Create Email and link it with Order as Reagrding field
function CreateEmail() {
var id = Xrm.Page.data.entity.getId();
id = id.replace('{', "");
id = id.replace('}', "");
var entityLogicalName = Xrm.Page.data.entity.getEntityName();
var regardingObjectId = new Sdk.EntityReference(entityLogicalName, id);
var title = Xrm.Page.getAttribute("title").getValue();
var email = new Sdk.Entity("email");
email.addAttribute(new Sdk.String("subject", title));
email.addAttribute(new Sdk.String("description", title));
email.addAttribute(new Sdk.Lookup("regardingobjectid", regardingObjectId));
var fromParties = PrepareActivityParty(fromFieldId, fromFieldEntityName);
email.addAttribute(new Sdk.PartyList("from", fromParties));
var toParties = PrepareActivityParty(toFieldId, toFieldEntityName);
email.addAttribute(new Sdk.PartyList("to", toParties));
Sdk.Async.create(email, EmailCallBack, function (error) { alert(error.message); });
}

//This method get entity's id and logical name and return entitycollection of it.
function PrepareActivityParty(partyId, partyEntityName) {
var activityParty = new Sdk.Entity("activityparty");
activityParty.addAttribute(new Sdk.Lookup("partyid", new Sdk.EntityReference(partyEntityName, partyId)));
var activityParties = new Sdk.EntityCollection();
activityParties.addEntity(activityParty);
return activityParties;
}

// Email Call Back function
function EmailCallBack(result) {
emailId = result;
GetReportId();
}

function GetReportId() {
var columns = "reportid";
var fetchQuery = new Sdk.Query.QueryByAttribute("report");
fetchQuery.setColumnSet(columns);
fetchQuery.addAttributeValue(new Sdk.String("name", reportName));
Sdk.Async.retrieveMultiple(fetchQuery, RetrieveMultiple);
}

function RetrieveMultiple(entityCollection) {
if (entityCollection.getEntities().getCount() > 0) {
var entities = entityCollection.getEntities();
var getAttribute = entities.getByIndex(0).getAttributes("reportid");
if (getAttribute != null) {
reportId = getAttribute.getValue();
}
}

//get reporting session and use the params to convert a report in PDF
var params = GetReportingSession();
EncodePdf(params);
}

//Gets the report contents
function GetReportingSession() {

var recordId = Xrm.Page.data.entity.getId();
recordId = recordId.replace('{', '').replace('}', '');

var strParameterXML = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='incident' enableprefiltering='1'><all-attributes /><filter type='and'><condition attribute='incidentid' operator='eq' value='" + recordId + "' /> </filter></entity></fetch>";
var pth = Xrm.Page.context.getClientUrl() + "/CRMReports/rsviewer/QuirksReportViewer.aspx";
var retrieveEntityReq = new XMLHttpRequest();

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

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(x + 10, 32);
return ret;
}

function EncodePdf(params) {
var retrieveEntityReq = new XMLHttpRequest();
var pth = Xrm.Page.context.getClientUrl() + "/Reserved.ReportViewerWebControl.axd?ReportSession=" + params[0] + "&Culture=1033&CultureOverrides=True&UICulture=1033&UICultureOverrides=True&ReportStack=1&ControlID=" + params[1] + "&OpType=Export&FileName=Public&ContentDisposition=OnlyHtmlInline&Format=PDF";
retrieveEntityReq.open('GET', pth, true);
retrieveEntityReq.setRequestHeader("Accept", "*/*");
retrieveEntityReq.responseType = "arraybuffer";
retrieveEntityReq.onload = function (e) {
if (this.status == 200) {
var uInt8Array = new Uint8Array(this.response);
var base64 = Encode64(uInt8Array);
CreateEmailAttachment(base64);
}
};
retrieveEntityReq.send();
}

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function Encode64(input) {
var output = new StringMaker();
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;

while (i < input.length) {
chr1 = input[i++];
chr2 = input[i++];
chr3 = input[i++];

enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;

if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output.append(keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4));
}
return output.toString();
}

var StringMaker = function () {
this.parts = [];
this.length = 0;
this.append = function (s) {
this.parts.push(s);
this.length += s.length;
}
this.prepend = function (s) {
this.parts.unshift(s);
this.length += s.length;
}
this.toString = function () {
return this.parts.join('');
}
}

//Create attachment for the created email
function CreateEmailAttachment(encodedPdf) {
//Get order number to name a newly created PDF report
var orderNumber = Xrm.Page.getAttribute("ordernumber");
var emailEntityReference = new Sdk.EntityReference("email", emailId);
var newFileName = fileName + ".pdf";
if (orderNumber != null)
newFileName = fileName + orderNumber.getValue() + ".pdf";
var activitymimeattachment = new Sdk.Entity("activitymimeattachment");
activitymimeattachment.addAttribute(new Sdk.String("body", encodedPdf));
activitymimeattachment.addAttribute(new Sdk.String("subject", "File Attachment"));
activitymimeattachment.addAttribute(new Sdk.String("objecttypecode", "email"));
activitymimeattachment.addAttribute(new Sdk.String("filename", newFileName));
activitymimeattachment.addAttribute(new Sdk.Lookup("objectid", emailEntityReference));
activitymimeattachment.addAttribute(new Sdk.String("mimetype", "application/pdf"));
Sdk.Async.create(activitymimeattachment, ActivityMimeAttachmentCallBack, function (error) { alert(error.message); });
}

//ActivityMimeAttachment CallBack function
function ActivityMimeAttachmentCallBack(result) {
Xrm.Utility.openEntityForm("email", emailId);
}

*This post is locked for comments

I have the same question (0)
  • DSK Profile Picture
    5 on at
    RE: How to send SSRS report as a PDF in Email in Dynamics CRM Online

    I am getting the following error. How can I solve this?

    pastedimage1592663979806v1.png

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Mansi Soni – Community Spotlight

We are honored to recognize Mansi Soni as our August 2025 Community…

Congratulations to the July Top 10 Community Leaders!

These are the community rock stars!

Leaderboard > 🔒一 Microsoft Dynamics CRM (Archived)

#1
Guido Preite Profile Picture

Guido Preite 5 Moderator

#2
sandeepc Profile Picture

sandeepc 2

#2
Community Member Profile Picture

Community Member 2

Featured topics

Product updates

Dynamics 365 release plans