Add user-defined buttons to the toolbar and invoke custom actions using the Report Viewer
property. You can create a custom email button with the rendered report to users.
Create an email button in the toolbar using the CustomItems
property with values such as GroupIndex
, Index
, Type
, CssClass
, and Tooltip
. The tool-bar-item-click
event triggers when you click the email button.
Access the Report Viewer model and create a JSON array for sending requests to the Web API Server.
You can use the following codes in the boldreports-interop.js
file to add an email button in a Blazor application.
// Interop file to render the Bold Report Viewer component with properties.
window.BoldReports = {
RenderViewer: function (elementID, reportViewerOptions) {
$("#" + elementID).boldReportViewer({
reportPath: reportViewerOptions.reportName,
reportServiceUrl: reportViewerOptions.serviceURL,
toolbarSettings: {
showToolbar: true,
customItems: [{
groupIndex: 1,
index: 1,
type: 'Default',
cssClass: "e-icon e-mail e-reportviewer-icon",
id: 'E-Mail',
tooltip: {
header: 'E-Mail',
content: 'Send rendered report as mail attachment'
}
}]
},
toolBarItemClick: 'ontoolBarItemClick'
});
}
}
function ontoolBarItemClick(args) {
if (args.value == "E-Mail") {
var proxy = $('#report-viewer').data('boldReportViewer');
var Report = proxy.model.reportPath;
var lastsIndex = Report.lastIndexOf("/");
var reportName = Report.substring(lastsIndex + 1);
var requrl = proxy.model.reportServiceUrl + '/SendEmail';
var _json = {
exportType: "PDF", reportViewerToken: proxy._reportViewerToken, ReportName: reportName
};
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: requrl,
data: JSON.stringify(_json),
dataType: "json",
crossDomain: true
})
}
}
Create a new action method SendEmail
in the Web API service.
Export the report to the required type using the ReportHelper.GetReport
method to send a report stream as an attachment.
The following code sample exports the report to a stream and sends it as an attachment to a specified email address. In the code, the SmtpClient
method is used to send the report as an email attachment.
public object SendEmail([FromBody] Dictionary<string, object> jsonResult)
{
string _token = jsonResult["reportViewerToken"].ToString();
var stream = ReportHelper.GetReport(_token, jsonResult["exportType"].ToString(), this, _cache);
stream.Position = 0;
if (!ComposeEmail(stream, jsonResult["ReportName"].ToString()))
{
return "Mail not sent !!!";
}
return "Mail Sent !!!";
}
public bool ComposeEmail(Stream stream, string reportName)
{
try
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.IsBodyHtml = true;
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "Report Name : " + reportName;
stream.Position = 0;
if (stream != null)
{
ContentType ct = new ContentType();
ct.Name = reportName + DateTime.Now.ToString() + ".pdf";
System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(stream, ct);
mail.Attachments.Add(attachment);
}
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("[email protected]", "xx");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
return true;
}
catch (Exception ex)
{
throw ex;
}
return false;
}
In the above code sample, the report is exported to PDF format and sent to users using the
SmptClient
method.