ReportStorageWebExtension.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using DevExpress.XtraReports.UI;
  2. using Microsoft.AspNetCore.Hosting;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Web;
  10. namespace MTWorkHR.Infrastructure.Reports
  11. {
  12. public class CustomReportStorageWebExtension : DevExpress.XtraReports.Web.Extensions.ReportStorageWebExtension
  13. {
  14. // private readonly GlobalInfo globalInfo;
  15. // private readonly AppSettingsConfiguration settings;
  16. public CustomReportStorageWebExtension()
  17. {
  18. }
  19. public override byte[] GetData(string url)
  20. {
  21. try
  22. {
  23. string[] parts = url.Split('?');
  24. string reportName = parts[0];
  25. string parametersQueryString = parts.Length > 1 ? parts[1] : string.Empty;
  26. XtraReport report = getReport(reportName);
  27. if (report == null)
  28. {
  29. throw new DevExpress.XtraReports.Web.ClientControls.FaultException($"Could not find report '{url}'.");
  30. }
  31. // Apply report parameters
  32. var parameters = HttpUtility.ParseQueryString(parametersQueryString);
  33. foreach (string parameterName in parameters.AllKeys)
  34. {
  35. if (!string.IsNullOrEmpty(parameters.Get(parameterName)) && parameters.Get(parameterName) != "null")
  36. {
  37. report.Parameters[parameterName].Value = Convert.ChangeType(parameters.Get(parameterName), report.Parameters[parameterName].Type);
  38. }
  39. }
  40. report.CreateDocument(); // Ensure the report document is created
  41. using (MemoryStream ms = new MemoryStream())
  42. {
  43. report.ExportToPdf(ms); // Export to PDF
  44. return ms.ToArray();
  45. }
  46. }
  47. catch (Exception ex)
  48. {
  49. throw new DevExpress.XtraReports.Web.ClientControls.FaultException($"Error generating report '{url}': {ex.Message}", ex);
  50. }
  51. }
  52. private XtraReport getReport(string reportName)
  53. {
  54. switch (reportName)
  55. {
  56. case "ContractReport":
  57. case "contractreport":
  58. case "contractReport":
  59. return new ContractReport();
  60. case "ContractAllowance":
  61. return new ContractAllowances();
  62. default: return null;
  63. }
  64. }
  65. }
  66. }