Refactor report handling and improve async operations
Refactored the `Report` property to `_report` with nullable support and updated `EnvelopeKey` to use `init` for immutability. Made `CreateReport` asynchronous, returning `Task<XtraReport>`, and removed redundant `BasePdfBytes` property. Simplified predefined report fetching by removing `ReportStorage.TryGetReport`. Improved error handling for missing or invalid `pdfBytes` in `CreateReport`. Made minor formatting and structural improvements for clarity.
This commit is contained in:
@@ -12,47 +12,37 @@
|
||||
<link href="_content/DevExpress.Blazor.Reporting.Viewer/css/dx-blazor-reporting-components.bs5.css" rel="stylesheet" />
|
||||
|
||||
|
||||
@if (Report is not null) {
|
||||
<DxReportViewer Report="Report" RootCssClasses="w-100 h-100" Zoom="1.3" />
|
||||
@if (_report is not null) {
|
||||
<DxReportViewer Report="_report" RootCssClasses="w-100 h-100" Zoom="1.3" />
|
||||
}
|
||||
|
||||
@code {
|
||||
[Parameter] public string EnvelopeKey { get; set; } = string.Empty;
|
||||
[Parameter] public string EnvelopeKey { get; init; } = null!;
|
||||
|
||||
XtraReport Report { get; set; } = null!;
|
||||
XtraReport? _report = null;
|
||||
|
||||
byte[] BasePdfBytes { get; set; } = null!;
|
||||
|
||||
protected override async Task OnInitializedAsync() {
|
||||
if (!AppOptions.Value.UsePredefinedReports) {
|
||||
try {
|
||||
var pdfBytes = await DocumentService.GetDocumentAsync(EnvelopeKey);
|
||||
if (pdfBytes is { Length: > 0 })
|
||||
BasePdfBytes = pdfBytes;
|
||||
else
|
||||
throw new InvalidOperationException($"No PDF bytes found for EnvelopeKey: {EnvelopeKey}");
|
||||
} catch (HttpRequestException ex) {
|
||||
throw new InvalidOperationException($"Failed to load document for EnvelopeKey: {EnvelopeKey}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
Report = CreateReport();
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_report = await CreateReport();
|
||||
}
|
||||
|
||||
XtraReport CreateReport()
|
||||
async Task<XtraReport> CreateReport()
|
||||
{
|
||||
if (AppOptions.Value.UsePredefinedReports)
|
||||
{
|
||||
return ReportStorage.TryGetReport("LargeDatasetReport", out var savedReport)
|
||||
? savedReport
|
||||
: PredefinedReports.ReportsFactory.GetReport("LargeDatasetReport");
|
||||
return PredefinedReports.ReportsFactory.GetReport("LargeDatasetReport");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var pdfBytes = await DocumentService.GetDocumentAsync(EnvelopeKey);
|
||||
if (pdfBytes is null || pdfBytes.Length == 0)
|
||||
throw new InvalidOperationException($"No PDF bytes found for EnvelopeKey: {EnvelopeKey}");
|
||||
|
||||
var report = new XtraReport();
|
||||
var detail = new DevExpress.XtraReports.UI.DetailBand();
|
||||
report.Bands.Add(detail);
|
||||
detail.Controls.Add(new DevExpress.XtraReports.UI.XRPdfContent { Source = BasePdfBytes, GenerateOwnPages = true });
|
||||
detail.Controls.Add(new DevExpress.XtraReports.UI.XRPdfContent { Source = pdfBytes, GenerateOwnPages = true });
|
||||
return report;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user