2016-03-07 17 views
8

Reporting-Services 2016 (attualmente disponibile solo come anteprima tecnica) include grandi aggiornamenti tra cui il rendering e la conformità HTML5. Vedi: https://msdn.microsoft.com/en-us/library/ms170438.aspxIncorporare report SSRS 2016 in un'altra pagina Web senza iFrame?

Il mio desiderio è di incorporare report SSRS 2016 in un'altra pagina Web utilizzando la modalità nativa (senza SharePoint o aspx, solo HTML5). La moda tradizionale per farlo è usare un iFrame. Questo è un metodo a metà strada, in quanto è possibile rimuovere la barra degli strumenti, nascondere i parametri, ecc., Ma si finisce per perdere molto controllo sul documento. Questa è un'implementazione cross-site da un dominio diverso, quindi non posso manipolare il documento iFrame contenuto come mi pare.

Esiste un modo ufficiale di incorporare l'elemento del report "in modo nativo"? Potrei immaginare un'opzione del parametro URL come rs:Format=REPORTDIV che mi fornisce un elemento html.

Ho anche provato a recuperare il rapporto come immagine (rs:Format=IMAGE&rc:OutputFormat=PNG) ma il PNG risultante ha un'enorme cornice bianca (anche quando si imposta lo sfondo trasparente in Generatore di report) attorno all'elemento del report che è un no-go.

+0

Finora l'unico metodo praticabile sembra essere il recupero della relazione come immagine e sprite-tagliandolo a Adatta il tuo contenuto web: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/007396c2-3d51-465c-8ab8-157cd48ed373/embedding-ssrs-2016-reports-into-another-webpage -senza-iframe? forum = SQLServer2016Preview – Wollan

+0

Vedere https://blogs.msdn.microsoft.com/sqlrsteamblog/2016/03/18/sql-server-2016-rc1-whats-new-in-reporting-services/. L'aggiunta di 'rs: Embed = true' all'URL IFrame sembra essere la" strada da percorrere ". –

+0

Potresti risolverlo, se sì, scrivi la tua risposta così ne impariamo tutti, grazie. –

risposta

2

Questo dovrebbe funzionare. Dovrebbe funzionare al di fuori dell'ambiente così come incorpora le immagini dalla memoria, invece di andare a prendere dal database

// 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); 
      } 
Problemi correlati