Custom Actions
To add custom actions to the Bold Reports® ASP.NET Core Report Viewer, add user-defined buttons to the toolbar and invoke custom actions using the Report Viewer property. For example, you can create a custom email button that sends the rendered report to users.
How do I add an email button to the Report Viewer toolbar?
To add an email button to the ASP.NET Core Report Viewer toolbar, define a custom toolbar item in the controller and handle the toolbar item click event in the view.
-
Create an email button in the toolbar using the
CustomItemsproperty with the 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.
-
Use the following code to add the email button in the controller and pass the data to the view using
ViewBag.public ActionResult Index() { ToolbarSettings toolbarSettings = new ToolbarSettings(); toolbarSettings.CustomItems = new List<CustomItem>(); var customItem = new CustomItem() { GroupIndex = 1, Index = 1, CssClass = "e-icon e-mail e-reportviewer-icon", Type = BoldReports.ReportViewerEnums.ToolBarItemType.Default, Id = "E-Mail", Tooltip = new ToolTip() { Header = "E-Mail", Content = "Send rendered report as mail attachment" } }; toolbarSettings.CustomItems.Add(customItem); ViewBag.toolbarSettings = toolbarSettings; return View(); } -
Use the following code to set the
toolbar-settingsproperty on the client side.<bold-report-viewer id="viewer" report-service-url="/api/ReportViewer" processing-mode="Remote" toolbar-settings="ViewBag.toolbarSettings"> </bold-report-viewer> -
Use the following code to create the
tool-bar-item-clickevent on the client side.<bold-report-viewer id="viewer" report-service-url="/api/ReportViewer" processing-mode="Remote" tool-bar-item-click="onToolBarItemClick"> </bold-report-viewer> <script type="text/javascript"> function onToolBarItemClick(args) { alert('Action Triggered'); } </script> -
Use the following code to get
toolbar-settingsproperties on a dynamic object usingViewBag.toolbarSettingsand invoke custom actions.<bold-report-viewer id="viewer" report-service-url="/api/ReportViewer" processing-mode="Remote" toolbar-settings="ViewBag.toolbarSettings" tool-bar-item-click="onToolBarItemClick"> </bold-report-viewer> <script type="text/javascript"> function onToolBarItemClick(args) { if (args.value == "E-Mail") { alert('Action Triggered'); } } </script>
How do I send the report as an email attachment?
To send a report from the ASP.NET Core Report Viewer as an email attachment, add a custom email action to the Web API service that exports the report to a stream and attaches it to a mail message.
-
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 mail 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 preceding code sample, the report is exported to PDF format and sent to users using the
SmptClientmethod.