2016-03-07 8 views
8

Reporting-Services 2016 (derzeit nur als technische Vorschau verfügbar) wird mit großen Upgrades einschließlich HTML5-Rendering und Compliance ausgeliefert. Siehe: https://msdn.microsoft.com/en-us/library/ms170438.aspxSSRS 2016-Berichte in eine andere Webseite ohne iFrame einbetten?

Ich möchte SSRS 2016 Berichte in eine andere Webseite im nativen Modus einbetten (kein Sharepoint oder aspx, nur reines HTML5). Die traditionelle Art, dies zu tun, ist ein iFrame zu verwenden. Dies ist eine halbwegs gute Methode, da es möglich ist, die Werkzeugleiste zu entfernen, Parameter zu verstecken etc., aber trotzdem verlieren Sie viel Kontrolle über das Dokument. Dies ist eine Cross-Site-Implementierung aus einer anderen Domäne, so dass ich das enthaltene iFrame-Dokument nicht beliebig manipulieren kann.

Gibt es eine offizielle Möglichkeit, das Berichtselement 'nativ' einzubetten? Ich könnte eine URL-Parameter-Option wie rs:Format=REPORTDIV vorstellen, die mir ein HTML-Element dient.

Ich habe auch versucht, den Bericht als Bild zu holen (rs:Format=IMAGE&rc:OutputFormat=PNG), aber das resultierende PNG hat einen riesigen weißen Rahmen (auch wenn Hintergrund im Berichts-Generator transparent gesetzt) ​​um das Berichtselement, das ein No-Go ist.

+0

Bisher ist die einzige praktikable Methode zu holen scheint holen, um den Bericht als Bild und Sprite-Schneiden es Passen Sie Ihren eigenen Web-Content an: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/007396c2-3d51-465c-8ab8-157cd48ed373/embedding-ssrs-2016-reports-into-another-webpage -ohne-iframe? forum = SQLServer2016Preview – Wollan

+0

Siehe https://blogs.msdn.microsoft.com/sqlrsteamblog/2016/03/18/sql-server-2016-rc1-whats-new-in-reporting-services/. Das Anhängen von 'rs: Embed = true' an die IFrame URL scheint der" Weg zu gehen "zu sein. –

+0

Könnten Sie es lösen, wenn ja, pls posten Sie Ihre Antwort, damit wir alle davon lernen, danke. –

Antwort

2

Dies sollte funktionieren. Es soll auch außerhalb der Umwelt arbeiten, wie es die Bilder aus dem Speicher einbettet, anstatt sie aus der Datenbank

// 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); 
      } 
Verwandte Themen