2017-03-10 18 views
8

角度2でレポートを表示する方法については、インターネットをいくつか手掛かりにしています。これまで私が信頼できるものは何も見つかりませんでした。 誰かが私を助けてくれたら大変感謝します。角度2のアプリケーションでSSRSレポートを表示する方法

+0

http://blog.chrisbriggsy.com/the-first-step-towards-integration/ http://www.dotnetspeak.com/angular/using-ssrs-in-angular-asp-net-mvc-application/ – rook

答えて

2

確信はできませんが、私の答えはアンサンブル2のSSRSレポートを表示できないことです。 しかし、webapiを使用してSSRSレポートをPDFに変換してレンダリングし、 Iframe、popwindow、およびng2-pdf-viewerを使用します。

私が好むpopwindowとNG2-PDFが-ビューア

には現在、PDF

 

    [HttpGet] 
    [Route("ShowReport/PDF")] 
    [AllowAnonymous] 
    [ResponseType(typeof(ServerResponse))] 

    public HttpResponseMessage ShowReport(string ReponseType) 
    { 
     using (blBaseCore bl = new blBaseCore(AppConfig.DefaultConnectionString, 1, 1)) 
     { 
      List prms = new List(); 
      prms.Add(new ReportParameter("PARAM1_NAME", "PARAM1_VALUE")); 
      prms.Add(new ReportParameter("PARAM2_NAME", "PARAM2_VALUE")); 
      return this.GenrateReport("SSRS_REPORT_NAME", "PDF_FILE_NAME", ReponseType, prms); 
     } 

    } 
    /// 
    /// Genrates the report. 
    /// 
    /// Name of the report. 
    /// Name of the export file. 
    /// Type of the export file. 
    /// The PRMS. 
    /// HttpResponseMessage. 
    public HttpResponseMessage GenrateReport(string reportName, string ExportFileName, string ExportFileType, List prms) 
    { 

     var result = new HttpResponseMessage(HttpStatusCode.OK); 
     try 
     { 
      if (!(new string[] { "pdf", "excel" }).Contains(ExportFileType.ToLower())) 
       throw new Exception("Invalid file format"); 
      string ServerPath = AppConfig.AppSettings("Systemic.ReportServer.BaseUrl"); 
      string ReportFolder = AppConfig.AppSettings("Systemic.ReportServer.FolderPath"); 
      byte[] bytes = null; 
      using (var reportViewer = new ReportViewer()) 
      { 
       //reportViewer.ServerReport.ReportServerCredentials = new ReportServerCredentials("Prabakaran", "LooserNo1", "SERVER"); 
       reportViewer.ShowPrintButton = false; 
       reportViewer.ShowZoomControl = false; 
       reportViewer.PageCountMode = PageCountMode.Actual; 
       reportViewer.ProcessingMode = ProcessingMode.Remote; 
       reportViewer.ServerReport.ReportServerUrl = new System.Uri(ServerPath); 
       reportViewer.ServerReport.ReportPath = "/" + ReportFolder + "/" + reportName; 

       if (prms.Count > 0) 
       { 
        reportViewer.ServerReport.SetParameters(prms); 
       } 
       reportViewer.ServerReport.Refresh(); 


       if (reportViewer.ServerReport.IsReadyForRendering && ExportFileType.ToLower() == "pdf") 
       { 
        bytes = reportViewer.ServerReport.Render("PDF", DeviceInfo(reportViewer)); 
        //bytes = reportViewer.ServerReport.Render("PDF"); 


        if (bytes != null) 
        { 
         Stream stream = new MemoryStream(bytes); 
         result.Content = new StreamContent(stream); 
         result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 
        } 
       } 
       else if (reportViewer.ServerReport.IsReadyForRendering && ExportFileType.ToLower() == "excel") 
       { 
        bytes = reportViewer.ServerReport.Render("excel"); 
        if (bytes != null) 
        { 
         Stream stream = new MemoryStream(bytes); 
         result.Content = new StreamContent(stream); 
         result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel"); 
         result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
         result.Content.Headers.ContentDisposition.FileName = $"{ExportFileName}.xls"; 
        } 
       } 
      } 
      return result; 
     } 
     catch (Exception ex) 
     { 
      var res = Request.CreateResponse(HttpStatusCode.OK, ServerResponse.Error(ex, 501)); 
      res.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
      AppLog.Write(ex.Message, LogName.Report, LogType.Error); 
      return res; 
     } 
    } 


    protected string DeviceInfo(ReportViewer rv) 
    { 
     ReportPageSettings rps = rv.ServerReport.GetDefaultPageSettings(); 
     //PageSettings ps = rv.GetPageSettings(); 
     PaperSize paperSize = rps.PaperSize; 
     Margins margins = rps.Margins; 

     // The device info string defines the page range to print as well as the size of the page. 
     // A start and end page of 0 means generate all pages. 
     if (!rps.IsLandscape) 
     { 
      return string.Format(
       CultureInfo.InvariantCulture, 
       "emf00{0}{1}{2}{3}{4}{5}", 
       ToInches(margins.Top), 
       ToInches(margins.Left), 
       ToInches(margins.Right), 
       ToInches(margins.Bottom), 
       ToInches(paperSize.Height), 
       ToInches(paperSize.Width)); 
     } 
     else 
     { 
      return string.Format(
       CultureInfo.InvariantCulture, 
       "emf00{0}{1}{2}{3}{4}{5}", 
       ToInches(margins.Top), 
       ToInches(margins.Left), 
       ToInches(margins.Right), 
       ToInches(margins.Bottom), 
       ToInches(paperSize.Width), 
       ToInches(paperSize.Height)); 
     } 
    } 

    protected string ToInches(int hundrethsOfInch) 
    { 
     double inches = hundrethsOfInch/100.0; 
     return inches.ToString(CultureInfo.InvariantCulture) + "in"; 
    } 

+0

これが有効な解決策であれば誰でもお勧めできます。はいの場合は、以下の質問を説明してください: –

+0

Can誰でもこれが有効な解決策であれば誰でもお勧めします。もしそうなら、以下の質問を説明してください:1)この変数がどこから来ているのか、そしてこれのタイプは何ですか。 2)ShowReport関数のReponseTypeとは何か3)AppConfig.AppSettings( "Systemic.ReportServer.BaseUrl"); AppConfig.AppSettingsの目的は何ですか? –

1

としてSSRSレポートを変換するために、私のサンプルAPI bczインラインフレームがサファリなどのように、IOSとMacのブラウザ上で動作していないですこのnpmパッケージは助けになるはずです。サンプルあたりとして

https://github.com/tycomo/ngx-ssrs-reportviewer 

、それだけのページにカスタムコンポーネントを追加するようなものです

<div class="container"> 
     <ssrs-reportviewer 
      [reportserver]="reportServer" 
      [reporturl]="reportUrl" 
      [showparameters]="showParameters" 
      [parameters]="parameters" 
      [language]="language" 
      [width] ="width" 
      [height]="height" 
      [toolbar]="toolbar" > 
     </ssrs-reportviewer> 
    </div> 
+0

ありがとう、試してみる –

関連する問題