【问题标题】:Telerik reports without trdx filesTelerik 报告没有 trdx 文件
【发布时间】:2014-11-17 07:54:26
【问题描述】:

我正在用我的头撞砖来让它工作。我有使用报表设计器生成的报表,它们工作正常,因为我使用 iframe 加载它们现在我想使用 Html5 报表查看器。但在大多数教程中,他们使用的是 trdx 报告,而不是使用报告设计器生成的报告。

我有一个名为 XYZ.TelerikReports 的类库,所有 reportname.cs (reports) 文件都驻留在其中,并且我的主项目位于我想要显示报告的同一解决方案中。

$("#reportViewer1")
        .telerik_ReportViewer({
            serviceUrl: "/api/reports/",
            templateUrl: '/ReportViewer/templates/telerikReportViewerTemplate.html',
            reportSource: {
               report: "XYZ.TelerikReports.IncomeStatementReport,XYZ.TelerikReports" 
                parameters: { ReportDataID: parseInt('@state.CurrentReportDataID') } 
            },

            scale: "1.0"
        });

现在我想知道我的 serviceUrl 应该是什么?

【问题讨论】:

    标签: asp.net-mvc telerik telerik-reporting


    【解决方案1】:

    serviceUrl 期望被路由到 Telerik Reporting Web API 控制器。您使用的当前值/api/reports/ 是 Telerik 对该控制器的默认名称。该文档详细介绍了如何很好地实现 Web API 控制器。您会在此处找到 http://www.telerik.com/help/reporting/telerik-reporting-rest-host-http-service-using-web-hosting.html 和此处 http://www.telerik.com/help/reporting/telerik-reporting-rest-implementing-http-service.html

    如果报告名称是报告类或 .trdx 的名称,此控制器将成功解析请求的报告。或者,您可以实施客户报告解析器。这可以按照http://www.telerik.com/help/reporting/telerik-reporting-rest-custom-report-resolver.html 此处文档中的说明来完成。

    所以你的 serviceUrl 很好。你只需要确保你有它调用 setup 的服务。

    【讨论】:

      【解决方案2】:

      一种可能的方法是修改您的报告 API 控制器以使用报告类型解析器并更改 CreateReportResolver,例如

      protected override IReportResolver CreateReportResolver()
              {
                  var reportsPath = HttpContext.Current.Server.MapPath("~/Reports");
      
                  return new ReportTypeResolver()
                                  .AddFallbackResolver(new ReportFileResolver(reportsPath));
              }
      

      然后在 HTML5 查看器配置中指定每个报告的完全限定程序集名称或类名(正如您已经在做的那样)。 关于服务 url 的路径,你可以使用上面的 api/reports 路由,但是你必须在你的 WebApiConfig.Register 函数中调用 Telerik 报告路由注册函数,即:

      ReportsControllerConfiguration.RegisterRoutes(GlobalConfiguration.Configuration);
      

      这意味着您的报告 api 位于名为 ReportsController 的控制器中。

      或者,您可以通过实现自己的报告路由注册函数并调用它而不是上面的 sn-p 来自定义 /Controllers/MyCustomReports 之类的路径。例如,您可以:

      private static void RegisterReportingRoutes(HttpConfiguration config)
          {
              config.Routes.MapHttpRoute(name: "Clients",
               routeTemplate: "Controllers/{controller}/clients/{clientID}",
               defaults: new { controller = "MyCustomReports", action = "Clients", clientID = RouteParameter.Optional });
      
              config.Routes.MapHttpRoute(
                  name: "Instances",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/instances/{instanceID}",
                  defaults: new { controller = "MyCustomReports", action = "Instances", instanceID = RouteParameter.Optional });
      
              config.Routes.MapHttpRoute(
                  name: "DocumentResources",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/instances/{instanceID}/documents/{documentID}/resources/{resourceID}",
                  defaults: new { controller = "MyCustomReports", action = "DocumentResources" });
      
              config.Routes.MapHttpRoute(
                  name: "DocumentActions",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/instances/{instanceID}/documents/{documentID}/actions/{actionID}",
                  defaults: new { controller = "MyCustomReports", action = "DocumentActions" });
      
              config.Routes.MapHttpRoute(
                  name: "DocumentPages",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/instances/{instanceID}/documents/{documentID}/pages/{pageNumber}",
                  defaults: new { controller = "MyCustomReports", action = "DocumentPages" });
      
              config.Routes.MapHttpRoute(
                  name: "DocumentInfo",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/instances/{instanceID}/documents/{documentID}/info",
                  defaults: new { controller = "MyCustomReports", action = "DocumentInfo" });
      
              config.Routes.MapHttpRoute(
                  name: "Documents",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/instances/{instanceID}/documents/{documentID}",
                  defaults: new { controller = "MyCustomReports", action = "Documents", documentID = RouteParameter.Optional });
      
              config.Routes.MapHttpRoute(
                  name: "Parameters",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/parameters",
                  defaults: new { controller = "MyCustomReports", action = "Parameters" });
      
              config.Routes.MapHttpRoute(
                  name: "Formats",
                  routeTemplate: "Controllers/{controller}/clients/{clientID}/formats",
                  defaults: new { controller = "MyCustomReports", action = "Formats" }); 
          }
      

      请注意,您应该从包含 REST 服务的解决方案中引用报告库。

      【讨论】:

        猜你喜欢
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多