terça-feira, 27 de março de 2012

Como configurar logon e utilizar o Crystal Reports com ASP.net e C#

Como configurar logon e utilizar o Crystal Reports com ASP.net e C#

Geralmente os desenvolvedores fazem os relatórios direcionados para um banco de dados, mas ao publicar no servidor ou quando o IP do servidor é modificado percebe-se que o relatório necessita de logon para poder ser aberto, o que é bastante desagradável para o usuário, criando uma vulnerabilidade para a aplicação. Para resolver este problema podemos configurar o relatório e a conexão em tempo de execução, para isto basta utilizar os métodos de configuração do crystal reports. 
Ao me deparar com estes problemas relacionados e realizar consultas na web e no msdn, utilizei o código abaixo faz a conexão de logon do relatório.

Obs.: O relatório pode ser desenvolvido apontado para qualquer servidor, mas na hora de execução as configurações serão feitas antes da abertura do mesmo.
Como utilizar :
1)
Crie um relatório no crystal reports (Add - New Item - Crystal report).
Informe o nome que no exemplo é "relatorio.rpt" e salve.
Configure os campos que serão exibidos no relatório e salve.
2)
Crie uma página aspx (Add - New Item - web form).
Informe o nome que no exemplo é "RelRelatorio.aspx" e salve.
Insira o componente CrystalReportViewer no design da página.
informe a propriedade ID, que no exemplo é "csRelatorio".
-- código do reportviewer com a exibição de conexão falsa.
Obs.: não esqueça de por no início "<" e no final o ">"
//CR:CrystalReportViewer ID="csRelatorio" runat="server" AutoDataBind="true" //EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False"


3)
No código fonte C# da página RelRelatorio.aspx utilize os dois métodos informados no exemplo abaixo(ConfiguraCrystalReports e SetDBLogonForReport), depois no método page load chame o método ConfiguraCrystalReports.
Pronto o relatório já esta configurado.
//  ====  Codigo fonte da pagina "Aspx" que chama o relatorio "RPT"  ====
// configuração do Crystal reports 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;




namespace AplicativoWeb.Relatorios
{
public partial class RelRelatorio : System.Web.UI.Page
{
// Load da pagina 
protected void Page_Load(object sender, EventArgs e)
{
   ConfiguraCrystalReports();
}
// configuração do Crystal reports 
private void ConfiguraCrystalReports()
{
 ReportDocument rpt = new ReportDocument();
 string reportPath = Server.MapPath("relatorio.rpt");
 rpt.Load(reportPath);
 ConnectionInfo myConnectionInfo = new ConnectionInfo(); 
 myConnectionInfo.ServerName = "servidor"; // Utilize o nome do servidor ou IP
 myConnectionInfo.DatabaseName = "Nome_Banco_de_Dados";
 myConnectionInfo.UserID = "usuario";
 myConnectionInfo.Password = "senha";
 SetDBLogonForReport(myConnectionInfo, rpt);
 csRelatorio.ReportSource = rpt;
}
// Conexao de logon do relatorio 
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument ArquivoReport)
{
Tables tables = ArquivoReport.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
  TableLogOnInfo tableLogonInfo = table.LogOnInfo;
  tableLogonInfo.ConnectionInfo = connectionInfo;
  table.ApplyLogOnInfo(tableLogonInfo);
}
}
}
}
Espero ter auxiliado aos demais usuários Asp.NET e C# na utilização de relatórios com o Crystal Reports.

5 comentários:

  1. Ta dando esse erro:

    Falha ao abrir a conexão. Detalhes: [Código do Fornecedor de Banco de Dados: 17 ] Falha ao abrir a conexão. relatorio {D987E58D-A9E0-4267-8938-3B4B86328CE7}.rpt Detalhes: [Código do Fornecedor de Banco de Dados: 17 ]

    ResponderExcluir
    Respostas
    1. Qual o banco de dados que você esta utilizando ?
      O relatório no crystal reports esta carregando o preview?

      Excluir