-
Notifications
You must be signed in to change notification settings - Fork 16
/
ReportViewerController.cs
126 lines (112 loc) · 4.79 KB
/
ReportViewerController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.AspNetCore.Mvc;
using BoldReports.Web.ReportViewer;
using Microsoft.AspNetCore.Hosting;
using System.Net.Mail;
using System.Net.Mime;
using Microsoft.AspNetCore.Cors;
namespace ReportServices.Controllers.docs
{
[EnableCors("AllowAllOrigins")]
[Route("api/[controller]/[action]")]
public class ReportViewerController : Controller, IReportController
{
private Microsoft.Extensions.Caching.Memory.IMemoryCache _cache;
private IWebHostEnvironment _hostingEnvironment;
string basePath;
public ReportViewerController(Microsoft.Extensions.Caching.Memory.IMemoryCache memoryCache,
IWebHostEnvironment hostingEnvironment)
{
_cache = memoryCache;
_hostingEnvironment = hostingEnvironment;
basePath = _hostingEnvironment.WebRootPath;
}
//Post action for processing the rdl/rdlc report
public object PostReportAction([FromBody] Dictionary<string, object> jsonResult)
{
return ReportHelper.ProcessReport(jsonResult, this, this._cache);
}
//Get action for getting resources from the report
[ActionName("GetResource")]
[AcceptVerbs("GET")]
public object GetResource(ReportResource resource)
{
return ReportHelper.GetResource(resource, this, this._cache);
}
[HttpPost]
public object PostFormReportAction()
{
return ReportHelper.ProcessReport(null, this, _cache);
}
//Method will be called when initialize the report options before start processing the report
public void OnInitReportOptions(ReportViewerOptions reportOption)
{
reportOption.ReportModel.EmbedImageData = true;
string reportName = reportOption.ReportModel.ReportPath;
string basePath = _hostingEnvironment.WebRootPath;
string reportPath = reportName.Replace("~/Resource", "resource").Replace("~/", "");
if ((dynamic)reportOption.ReportModel.ReportPath.Split('.').Length <= 1 && reportOption.ReportModel.ProcessingMode.ToString() == "Remote")
{
reportPath += ".rdl";
}
else if ((dynamic)reportOption.ReportModel.ReportPath.Split('.').Length <= 1 && reportOption.ReportModel.ProcessingMode.ToString() == "Local")
{
reportPath += ".rdlc";
}
FileStream reportStream = new FileStream(Path.Combine(basePath, reportPath), FileMode.Open, FileAccess.Read);
reportOption.ReportModel.Stream = reportStream;
if (reportOption.ReportModel.FontSettings == null)
{
reportOption.ReportModel.FontSettings = new BoldReports.RDL.Data.FontSettings();
}
reportOption.ReportModel.FontSettings.BasePath = Path.Combine(_hostingEnvironment.WebRootPath, "fonts");
}
public object SendEmail(Dictionary<string, object> jsonResult)
{
string _token = jsonResult["reportViewerToken"].ToString();
var stream = ReportHelper.GetReport(_token, jsonResult["exportType"].ToString(), this, 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("xx@gmail.com");
mail.To.Add("xx@gmail.com");
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("xx@gmail.com", "xx");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
return true;
}
catch
{
return false;
}
}
//Method will be called when reported is loaded
public void OnReportLoaded(ReportViewerOptions reportOption)
{
//You can update report options here
}
}
}