本教程教你如何從 Telerik Reporting REST 服務獲取報告,并將它們顯示在 ASP.NET Core 應用程序中。
這篇博文演示了如何在 ASP.NET Core 3+ Web 應用程序中嵌入 Telerik HTML5 報告查看器(或簡稱查看器)并托管 Telerik 報告 REST 服務(或簡稱服務)。以下是我將要討論的主題:
什么是 HTML5 報告查看器?
什么是報告 REST 服務?
如何在 ASP.NET Core Web 應用程序中托管報告 REST 服務?
如何請求報告文檔并將其顯示在 HTML5 報告查看器中?
什么是 HTML5 報告查看器?
查看器的目的是在網(wǎng)頁上顯示報表文檔。在幕后,查看器是一個基于 jQuery 的自定義小部件。小部件是功能豐富的有狀態(tài)插件,具有完整的生命周期以及方法和事件。查看器的布局存儲在支持移動和桌面瀏覽器并且完全可定制的 HTML 模板中。與Kendo UI 小部件類似,查看器的默認 HTML 模板支持預定義主題和自定義主題。
什么是報告 REST 服務?
我提到查看器顯示報告文檔。但是,報表文檔是報表引擎的輸出。
?
?
?
查看器不能自己完成處理和呈現(xiàn)工作,這就是報告 REST 服務的用武之地。該服務包裝報告引擎并通過 HTTP 公開其功能,因此查看器可以訪問它。在高級抽象中描述的查看器-服務交互的常見場景是:
- 查看器通過提供報告定義的唯一標識符(例如,文件名MyReport.trdx)來請求報告文檔
- 該服務搜索請求的報告定義并指示報告引擎處理并將其呈現(xiàn)為 HTML5 報告文檔
- 服務將生成的結(jié)果返回給查看器
- 查看器向用戶顯示報表文檔
為方便起見,該服務還可以提供所有必需的 HTML5 報告查看器小部件資源 - JavaScript、CSS 和 HTML 模板文件。
如何在 ASP.NET Core Web 應用程序中托管報告 REST 服務?
由于查看器在沒有服務的情況下無法運行,讓我們先回顧一下托管服務的步驟。對于這篇文章,我假設顯示報告的項目也是服務項目。這樣我就不必配置跨域資源共享 (CORS)。但是,如果您需要在解決方案中使用單獨的項目,這里有一篇很好的文章,解釋了如何在 ASP.NET Core 中啟用 CORS。
如果您沒有現(xiàn)有的 ASP.NET Core Web 應用程序,請按照以下步驟創(chuàng)建一個:
- 啟動 Visual Studio 2019
- 打開文件>新建>項目...
- 選擇ASP.NET Core Web 應用程序,然后單擊下一步
- 輸入您的項目名稱,然后單擊創(chuàng)建
- 框架版本選擇.NET Core和ASP.NET Core 3.1
- 選擇Web 應用程序模板并單擊創(chuàng)建
要在此項目或其他現(xiàn)有項目中托管報告 REST 服務,請從位于https://nuget.telerik.com/nuget的 Telerik NuGet 提要添加 NuGet 包Telerik.Reporting.Services.AspNetCore。
服務包會將自己的依賴項添加到項目中,例如Microsoft.AspNet.Core.Mvc.NewtonsoftJson。要激活NewtonsoftJson包依賴項,請打開Startup.cs并將ConfigureServices方法中的services.AddRazorPages行更改為:
services.AddRazorPages().AddNewtonsoftJson();
在此行的正下方添加用于最小報告 REST 服務實現(xiàn)的配置代碼(也添加適當?shù)氖褂茫?/p>
services.TryAddSingleton<IReportServiceConfiguration>( sp => new ReportServiceConfiguration { Storage = new FileStorage(), ReportSourceResolver = new UriReportSourceResolver( System.IO.Path.Combine( sp.GetService<IWebHostEnvironment>().ContentRootPath, "Reports")) });
上面的存儲配置指定服務將其內(nèi)部狀態(tài)對象和臨時文件保存在文件系統(tǒng)上。還提供其他存儲選項。
該ReportSourceResolver選項指示服務來搜索內(nèi)部報告定義文件報告應用程序文件夾。有關(guān)將報告標識符解析為特定報告定義的更多方法,請查看完整的 REST 服務報告源解析器參考。
該報告文件夾不存在,但你會在某一時刻創(chuàng)建,因為你需要添加報表定義文件存在。我從 Telerik Reporting 安裝文件夾 - C:Program Files (x86)ProgressTelerik Reporting R2 2020Report DesignerExamples 中獲取了我的報告定義(Report Catalog.trdp),但您可以使用獨立報告創(chuàng)建一個新的設計師。有了報告定義后,您需要將其添加到您的項目中:
- 在項目的根目錄中創(chuàng)建一個名為Reports的文件夾
- 將您的報告定義文件復制到其中
同樣在ConfigureServices方法中,通過添加以下內(nèi)容確保為 API 控制器配置了應用程序:
services.AddControllers();
并通過將以下行 (?endpoints.MapControllers();
)添加到Configure方法來映射這些控制器端點:
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
});
下一步是創(chuàng)建實際的ReportsController類,它是服務的本質(zhì):
- 將新的Controllers文件夾添加到項目的根目錄
- 右鍵單擊Controllers文件夾并選擇添加>控制器...
- 選擇API Controller - Empty模板,然后單擊添加
- 將新控制器命名為 ReportsController.cs并單擊添加
將新控制器的內(nèi)容更改為:
using Microsoft.AspNetCore.Mvc; using Telerik.Reporting.Services; using Telerik.Reporting.Services.AspNetCore; namespace AspNetCoreReportViewerSample.Controllers { [Route("api/reports")] public class ReportsController : ReportsControllerBase { public ReportsController(IReportServiceConfiguration reportServiceConfiguration) : base(reportServiceConfiguration) { } } }
字符串API /報告內(nèi)部路由屬性映射將被用于訪問該控制器的URL。該服務現(xiàn)已準備就緒,正在等待為您的報告提供服務。
還有多種其他配置選項,包括如何使用帶有連接字符串的配置文件等等。要深入研究該主題,請訪問設置報告 REST 服務的完整參考。
如何請求報告文檔并將其顯示在 HTML5 報告查看器中?
使用我之前選擇的Web 應用程序項目模板,我的應用程序的登錄頁面是Pages/Index.cshtml。此頁面使用存儲在Pages/Shared/_Layout.cshtml 中的通用布局。默認情況下,公共布局引用了 jQuery。如果您的應用程序尚未引用 jQuery,您可以從jQuery CDN鏈接它。
要對公共布局頁面進行整潔的組織,請將自定義部分添加到_Layout.cshtml的head元素,稍后您將使用它來添加查看器的 Kendo UI 主題:
<head> ... @RenderSection("Head", required: false) </head>
在Pages/Index.cshtml 中,您需要一個div元素來容納查看器。此元素應具有唯一的id屬性值,稍后將在查看器的 JavaScript 中使用該值。還需要通過 CSS 文件或內(nèi)聯(lián)樣式設置div元素的尺寸,否則查看器在頁面上將不可見:
<div id="reportViewer1" style="width:940px; height:1300px"> </div>
在之前準備的自定義Head部分中添加指向所需 Kendo UI 主題的鏈接
@section Head { <link href="https://kendo.cdn.telerik.com/2020.1.114/styles/kendo.common.min.css" rel="stylesheet" /> <link href="https://kendo.cdn.telerik.com/2020.1.114/styles/kendo.default.min.css" rel="stylesheet" /> }
最后,在Scripts部分添加到查看器小部件的 JavaScript 文件的鏈接,并調(diào)用telerik_ReportViewer方法。
該腳本節(jié)將幫助插入觀眾腳本公共布局文件中提及的jQuery后。然后,查看器將能夠找到其 jQuery 依賴項并使用telerik_ReportViewer方法擴展全局 jQuery 對象實例。
Telerik_ReportViewer是一個 jQuery 擴展方法,用于創(chuàng)建和配置查看器對象。在此示例中,查看器對象是在#reportViewer1?div元素內(nèi)創(chuàng)建的。該的serviceUrl匹配的URL?ReportsController路線和報告期權(quán)價值是報告定義的文件名:
@section Scripts { <script src="/api/reports/resources/js/telerikReportViewer"></script> <script type="text/javascript"> $(document).ready(function () { $("#reportViewer1") .telerik_ReportViewer({ serviceUrl: "api/reports", reportSource: { report: "Report Catalog.trdp" }, scaleMode: telerikReportViewer.ScaleModes.SPECIFIC, scale: 1.0 }); }); </script> }
以上是查看器對象的最低要求配置。有關(guān)配置選項、方法和事件的完整列表,請前往HTML5 報告查看器文檔。
這是最終的Index.cshtml 的樣子:
@page @model IndexModel @{ ViewData["Title"] = "Home page"; } @section Head { <link href="https://kendo.cdn.telerik.com/2020.1.114/styles/kendo.common.min.css" rel="stylesheet" /> <link href="https://kendo.cdn.telerik.com/2020.1.114/styles/kendo.default.min.css" rel="stylesheet" /> } <div class="text-center"> <div id="reportViewer1" style="width:940px; height:1300px"> </div> </div> @section Scripts { <script src="/api/reports/resources/js/telerikReportViewer"></script> <script type="text/javascript"> $(document).ready(function () { $("#reportViewer1") .telerik_ReportViewer({ serviceUrl: "api/reports", reportSource: { report: "Report Catalog.trdp" }, scaleMode: telerikReportViewer.ScaleModes.SPECIFIC, scale: 1.0 }); }); </script> }
剩下的就是F5在 Visual Studio 中按下并觀察 HTML5 報告查看器將如何從服務請求Report Catalog.trdp報告。該服務將指示報表引擎以 HTML5 格式呈現(xiàn)報表定義并將其作為報表文檔返回給查看器。如果一切按預期進行,您會發(fā)現(xiàn)自己正在查看類似的屏幕:
?
?
如果遇到任何問題,請按F12以檢查瀏覽器控制臺中的錯誤并使用Fiddler記錄網(wǎng)絡流量。如果您決定聯(lián)系我們傳奇的支持團隊,所有這些信息都將非常有價值。
您可以從telerik/reporting-samples GitHub 存儲庫下載示例應用程序。
嘗試過 Telerik DevCraft?
您可以選擇Telerik Reporting 和Telerik Report Server 作為單獨的產(chǎn)品,也可以將它們作為出色的 Telerik DevCraft 捆綁包的一部分來使用。
?
來自:https://www.telerik.com/blogs/embedding-beautiful-reporting-aspnet-core-web-applications
?
本文摘自 :https://www.cnblogs.com/