Custom Actions
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.
Add an email button
-
Create an email button in the toolbar using the
CustomItemsproperty with values such asGroupIndex,Index,Type,CssClass, andTooltip. Thetool-bar-item-clickevent 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.jsfile 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 custom email action
-
Create a new action method
SendEmailin the Web API service. -
Export the report to the required type using the
ReportHelper.GetReportmethod 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
SmtpClientmethod 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
SmptClientmethod.