簡體   English   中英

如何使用Telerik REST API從C#控制台應用程序請求報告

[英]How to request report from c# console application using Telerik REST API

我有Telerik REST API,在客戶端,我正在使用html5 report-viewer 報表在html報表中成功生成。 現在,我想通過c#控制台應用程序從相同的API請求報告。 我有搜索,但沒有任何解決方案。 請給我建議一種如何使用C#控制台應用程序請求報告的方法。

html5報告查看器庫

注意:我是telerik報告的初學者。

更新1:

我已經設法使用此API文檔將請求發送到服務器。 Telerik獲取報告的文檔

在服務器端,我編寫了CustomReportResolver 但是現在它現在將InstanceId發送到控制台客戶端。

CustomReportResolver

public class CustomReportResolver : IReportResolver
    {
        public ReportSource Resolve(string reportJsonString)
        {
            var reportDto = JsonConvert.DeserializeObject<ReportDTO>(reportJsonString);

            var connectionStringHandler = new CustomConnectionStringManager(reportDto.CompanyId);


            var reportsPath = HttpContext.Current.Server.MapPath($"~/Reports/{reportDto.ReportPath}");


            var sourceReportSource = new UriReportSource { Uri = reportsPath  + reportDto.ReportName };

         //   sourceReportSource.Parameters.Add(new Telerik.Reporting.Parameter("companyId", reportDto.CompanyId));
            var reportSource = connectionStringHandler.UpdateReportSource(sourceReportSource);
            return reportSource;
        }
    }

請注意,如果我使用默認的ReportResolver自托管的telerik服務成功將pdf報告發送到控制台,但是如果我使用CustomReportResolver則不會生成instanceId

可能是什么問題呢 ?

浪費大量時間后,找到了一種解決方案,該解決方案如何從Telerik Self托管Web服務獲取PDF (或其他報告格式)文檔。 以下是要遵循的一般步驟。

  1. 獲取客戶ID
  2. 獲取實例ID
  3. 取得文件編號
  4. 下載文件

下面是一個逐步的代碼:

static HttpClient client = new HttpClient();
        static string reportServerAddress = "http://localhost:60031/";
        static string serverREStAPI = reportServerAddress + "api/";

        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Demo started");

                RunAsync().Wait();

                Console.WriteLine("Demo ended");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.ReadKey();
            }
        }

        static async Task RunAsync()
        {
           // readFile();
           // return;
            client.BaseAddress = new Uri(serverREStAPI);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));



            /*
             * Steps To get PDF documents from Telerik Self hosted Web Service
             * Step 1) Get Client Id,
             * Step 2) Get Instance Id
             * Step 3) Get Document Id
             * Step 4) Download Document
             * 
             * */

            var clientId = await GetClientIdAsync(serverREStAPI + "reports/clients", "clientId");

            var instanceId =
                await GetInstanceAsync(serverREStAPI + $"reports/clients/{clientId}/instances", "instanceId");
            var documentId =
                await GetDocumentAsync(serverREStAPI + $"reports/clients/{clientId}/instances/{instanceId}/documents",
                    "documentId");

              await DownloadPDF(serverREStAPI + $"reports/clients/{clientId}/instances/{instanceId}/documents/{documentId}", true);


        }





        static async Task<string> GetClientIdAsync(string path, string paramName)
        {

            HttpResponseMessage response = await client.PostAsJsonAsync(path, "");
            response.EnsureSuccessStatusCode();

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            dynamic result = serializer.DeserializeObject(response.Content.ReadAsStringAsync().Result);
            return result[paramName];
        }

        static async Task<string> GetInstanceAsync(string path, string paramName)
        {

            /*
             * For Default resolver in Service
             * */
            var paramterValues = new {CompanyId = 1};
            // var data = new { report = "{ \"ReportName\":\"test.trdx\",\"CompanyId\":\"1\"}", parameterValues = "{\"CompanyId\": \"1\"}" };    
            var data = new
            {
                report = "{\"ReportName\":\"test.trdx\",\"CompanyId\":\"1\"}",
                parameterValues = paramterValues
            };





            HttpResponseMessage response = await client.PostAsJsonAsync(path, data);
            response.EnsureSuccessStatusCode();

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            dynamic result = serializer.DeserializeObject(response.Content.ReadAsStringAsync().Result);
            return result[paramName];
        }

        static async Task<string> GetDocumentAsync(string path, string paramName)
        {



            var data = new {format = "PDF"}; //PDF,XLS,MHTML
            HttpResponseMessage response = await client.PostAsJsonAsync(path, data);
            response.EnsureSuccessStatusCode();

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            dynamic result = serializer.DeserializeObject(response.Content.ReadAsStringAsync().Result);
            return result[paramName];
        }



        static async Task DownloadPDF(string path, bool asAttachment)
        {
            var queryString = "";

            // if (asAttachment)
            //  {
            //  queryString += "?content-disposition=attachment";
            //  }



            var filePathAndName = @"D:\testing\tet.html";
            //   File.Create(filePathAndName);

            //  string filePath = System.IO.Path.Combine(folderName, fileName);

            //System.IO.File.WriteAllText(filePathAndName, result);


            using (System.Net.WebClient myWebClient = new System.Net.WebClient())
            {
                await myWebClient.DownloadFileTaskAsync(new Uri(path + queryString), filePathAndName);
            }



            System.Diagnostics.Process.Start(filePathAndName);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM