2016-03-07 12 views
8

Dịch vụ báo cáo 2016 (hiện chỉ có sẵn dưới dạng bản xem trước kỹ thuật) đi kèm với các bản nâng cấp lớn bao gồm việc hiển thị và tuân thủ HTML5. Xem: https://msdn.microsoft.com/en-us/library/ms170438.aspxNhúng báo cáo SSRS 2016 vào trang web khác không có iFrame?

Mong muốn của tôi là nhúng báo cáo SSRS 2016 vào trang web khác bằng chế độ gốc (không có Sharepoint hoặc aspx, chỉ thuần HTML5). Thời trang truyền thống để thực hiện việc này là sử dụng iFrame. Đây là một phương pháp được chấp nhận một nửa vì có thể xóa thanh công cụ, ẩn các thông số vv nhưng bạn vẫn sẽ mất rất nhiều quyền kiểm soát đối với tài liệu. Đây là một triển khai thực hiện trên nhiều trang từ một miền khác vì vậy tôi không thể thao tác với tài liệu iFrame đã chứa như tôi muốn.

Có tồn tại cách chính thức để nhúng phần tử báo cáo 'nguyên bản' không? Tôi có thể hình dung tùy chọn tham số URL như rs:Format=REPORTDIV phục vụ cho tôi một phần tử html.

Tôi cũng đã cố gắng tìm nạp báo cáo dưới dạng hình ảnh (rs:Format=IMAGE&rc:OutputFormat=PNG) nhưng PNG kết quả có khung màu trắng khổng lồ (ngay cả khi đặt nền thành trong suốt trong Trình tạo báo cáo) xung quanh phần tử báo cáo.

+0

Cho đến nay phương pháp khả thi duy nhất dường như được lấy các báo cáo dưới dạng hình ảnh và sprite cắt nó để phù hợp với nội dung web của riêng bạn: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/007396c2-3d51-465c-8ab8-157cd48ed373/embedding-ssrs-2016-reports-into-another-webpage -without-iframe? forum = SQLServer2016Xem trước – Wollan

+0

Xem https://blogs.msdn.microsoft.com/sqlrsteamblog/2016/03/18/sql-server-2016-rc1-whats-new-in-reporting-services/. Việc thêm 'rs: Embed = true' vào Url IFrame có vẻ là" cách để đi ". –

+0

Bạn có thể giải quyết nó, nếu có, xin vui lòng gửi câu trả lời của bạn để tất cả chúng ta học hỏi từ nó, cảm ơn. –

Trả lời

2

Điều này sẽ hiệu quả. Nó sẽ làm việc bên ngoài của môi trường cũng như nó nhúng các hình ảnh từ bộ nhớ thay vì lấy chúng ra khỏi cơ sở dữ liệu

// Create service instance 
      ReportExecutionServiceSoapClient rsExec = new ReportExecutionServiceSoapClient(binding, endpoint); 
      rsExec.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 
      rsExec.ChannelFactory.Credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; 

      ReportingServices.Extension[] extentions = null; 
      ReportingServices.TrustedUserHeader trustedUserHeader = new ReportingServices.TrustedUserHeader(); 
      rsExec.ListRenderingExtensions(trustedUserHeader, out extentions); 
      string reportPath = "/Untitled"; 
      ExecutionInfo execInfo = new ExecutionInfo(); 
      ExecutionHeader execHeader = new ExecutionHeader(); 
      ReportingServices.ServerInfoHeader serverInfo = new ReportingServices.ServerInfoHeader(); 
      string historyID = null; 

      rsExec.LoadReport(trustedUserHeader, reportPath, historyID, out serverInfo, out execInfo); 

      //Get execution ID 
      execHeader.ExecutionID = execInfo.ExecutionID; 
      string deviceInfo = null; 
      string extension; 
      string encoding; 
      string mimeType; 
      ReportingServices.Warning[] warnings = new ReportingServices.Warning[1]; 
      warnings[0] = new ReportingServices.Warning(); 
      string[] streamIDs = null; 

      string format = "HTML5"; 
      Byte[] result; 
      rsExec.Render(execHeader, trustedUserHeader, format, deviceInfo, out result, out extension, out mimeType, out encoding, out warnings, out streamIDs); 

      var report = Encoding.UTF8.GetString(result); 
      int streamIdCount = streamIDs.Length; 
      Byte[][] imageArray = new Byte[streamIdCount][]; 
      String[] base64Images = new String[streamIdCount]; 
      for (int i = 0; i <= streamIdCount - 1; i++) 
      { 
       Byte[] result2; 
       string streamId = streamIDs[i]; 
       rsExec.RenderStream(execHeader, trustedUserHeader, format, streamId, deviceInfo, out result2, out encoding, out mimeType); 
       imageArray[i] = result2; 
       base64Images[i] = Convert.ToBase64String(result2); 
       string replace = string.Format("https://<reportserver>/ReportServer?%2FUntitled&rs%3ASessionID={0}&rs%3AFormat={1}&rs%3AImageID={2}", execInfo.ExecutionID, format, streamId); 
       string src = string.Format("data:{0};charset=utf-8;base64, {1}", mimeType, base64Images[i]); 
       report = report.Replace(replace, src); 
      } 
Các vấn đề liên quan