AkiStar Ответов: 0

Лучший способ передать данные из приложения angular для создания отчета telerik с помощью веб-сервисов telerik ?


Я пытаюсь отправить данные из приложения angular для отображения отчета telerik с помощью веб-сервисов telerik. Я смог сделать это с помощью пользовательского резольвера, но я ищу лучшее решение для достижения этой цели.

Что я уже пробовал:

Я создал сервис telerik rest для создания отчета на стороне сервера и последующего отображения его с помощью angular.

Ниже приведен код, который я использовал для создания контроллера отчетов и пользовательского преобразователя.


namespace TelerikReportingAngular.Controllers
{
    using Newtonsoft.Json;
    using System;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Web;
    using System.Web.Http;
    using System.Web.Http.Cors;
    using Telerik.Reporting;
    using Telerik.Reporting.Cache.File;
    using Telerik.Reporting.Services;
    using Telerik.Reporting.Services.WebApi;
    using TelerikReportingAngular.Reports;

    //The class name determines the service URL. 
    //ReportsController class name defines /api/report/ service URL.
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    [Authorize]
    public class ReportsController : ReportsControllerBase
    {
        static ReportServiceConfiguration configurationInstance;

        static ReportsController()
        {

            //This is the folder that contains the report definitions
            //In this case this is the Reports folder
            var appPath = HttpContext.Current.Server.MapPath("~/");
            var reportsPath = Path.Combine(appPath, "Reports");

            //Add resolver for trdx/trdp report definitions, 
            //then add resolver for class report definitions as fallback resolver; 
            //finally create the resolver and use it in the ReportServiceConfiguration instance.
            var resolver = new ReportFileResolver(reportsPath)
                .AddFallbackResolver(new CustomReportResolver());

            //Setup the ReportServiceConfiguration
            configurationInstance = new ReportServiceConfiguration
            {
                HostAppId = "Html5App",
                Storage = new FileStorage(),
                ReportResolver = resolver,
                // ReportSharingTimeout = 0,
                // ClientSessionTimeout = 15,
            };
        }

        public ReportsController()
        {
            //Initialize the service configuration
            this.ReportServiceConfiguration = configurationInstance;
        }

        class CustomReportResolver : Telerik.Reporting.Services.Engine.IReportResolver
        {
            public Telerik.Reporting.ReportSource Resolve(string abc)
            {
                DataTable dt = (DataTable)JsonConvert.DeserializeObject(abc, (typeof(DataTable)));
                InstanceReportSource s = new InstanceReportSource();
                s.ReportDocument = new Report1(dt);

                return s;
            }
        }
    }


}


В угловых приложение для обмена мгновенными сообщениями с использованием HTML5 Viewer для передачи данных антивируса Avast, как показано ниже:
здесь gdata-это массив json, который будет отображаться в отчете Telerik на сервере.
<tr-viewer 

  [containerStyle]="viewerContainerStyle"

  [serviceUrl]="'http://localhost:57441/api/Reports'"

  [authenticationToken]="token"

  

  [reportSource]="{
      report: gdata,
      parameters:{user:'Amit'}
  
  }"

  

  [viewMode]="'Interactive'"

  [scaleMode]="'SPECIFIC'"

  [scale]="1.0">
  </tr-viewer>


Все идет нормально. Но мое замешательство связано с подходом, который я использую для создания динамического отчета. Пожалуйста, предложите, является ли мой подход правильным или нет ?

0 Ответов