Search results
Suggest a FeaturePDF

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

  1. 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.

  2. Access the Report Viewer model and create a JSON array for sending requests to the Web API Server.

  3. 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 custom email action

  1. Create a new action method SendEmail in the Web API service.

  2. Export the report to the required type using the ReportHelper.GetReport method to send a report stream as an attachment.

  3. 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.