public static void GerarArquivoRelatorio(enumTipoSaidaRelatorio pTipoSaidaRelatorio, byte[] resultado, string nomeArquivo = "relatorio.") { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ClearHeaders(); var extensao = string.Empty; switch (pTipoSaidaRelatorio) { case enumTipoSaidaRelatorio.PDF: HttpContext.Current.Response.ContentType = "application/pdf"; extensao = "pdf"; break; case enumTipoSaidaRelatorio.WORD: HttpContext.Current.Response.ContentType = "application/msword"; extensao = "doc"; break; case enumTipoSaidaRelatorio.EXCEL: HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; extensao = "xls"; break; } HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + nomeArquivo + "." + extensao + "\""); HttpContext.Current.Response.AddHeader("Content-Length", resultado.Length.ToString()); HttpContext.Current.Response.OutputStream.Write(resultado, 0, resultado.Length); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); }
/// <summary> /// Executar uma consulta de relatório em threading e enviar para a tela de Solicitações de relatórios via FileServer. /// Este método é um wrap do método de datatable com menos parâmetros. /// </summary> /// <param name="dt">Objeto de dados do relatório</param> /// <param name="saida">Tipo de saída do relatório</param> /// <param name="items">Itens a serem exibidos pelo ReportViewer</param> /// <param name="nomeRelatorio">Nome do namespace do arquivo rpt do relatório</param> /// <param name="nomeAmigavel">Nome amigável do relatório</param> /// <param name="quantidadeRegistro">Quantidade de registros do relatório</param> /// <param name="totalizador">Objeto com totalizador</param> public static void ExecutarThreadSolicitacaoRelatorio(object dt, enumTipoSaidaRelatorio saida, ListItemCollection items, string nomeRelatorio, string nomeAmigavel, int quantidadeRegistro, object totalizador = null) { // Obter o caminho do arquivo com um nome aleatório. var caminhoDiretorioUpload = ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.RepositorioUpload).Registro; var nomeAleatorioDoArquivoParaUploadCriptografado = WebFormHelper.ObterStringAleatoria(); var diretorioDeUploadComArquivo = string.Concat(caminhoDiretorioUpload, @"\", nomeAleatorioDoArquivoParaUploadCriptografado); ExecutarThreadSolicitacaoRelatorio( dt, saida, items, nomeRelatorio, nomeAmigavel, diretorioDeUploadComArquivo, nomeAleatorioDoArquivoParaUploadCriptografado, new ManterUsuario().ObterUsuarioLogado(), new ManterSolicitacaoRelatorio(), new ManterFileServer(), quantidadeRegistro, totalizador); WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Seu relatório está sendo gerado e deve aparecer no menu de solicitações de relatórios em breve. O menu fica em \"SOLICITAÇÕES DE RELATÓRIOS > Histórico de solicitações\"."); }
public static ReportViewer GerarRelatorio(MemoryStream relatorio, IList <ReportDataSource> dataSets, enumTipoSaidaRelatorio pTipoSaidaRelatorio, ListItemCollection pCamposVisiveis, IList <string> ignorarCampos = null) { var rv = new ReportViewer(); rv.LocalReport.LoadReportDefinition(relatorio); rv.LocalReport.DataSources.Clear(); var i = 1; foreach (var item in dataSets) { rv.LocalReport.DataSources.Add(item); i++; } try { if (pCamposVisiveis != null) { ValidarVisibilidadeCampos(rv, pCamposVisiveis); } } catch { } rv.LocalReport.Refresh(); var resultado = rv.LocalReport.Render(pTipoSaidaRelatorio.ToString()); GerarArquivoRelatorio(pTipoSaidaRelatorio, resultado); return(rv); }
private static void ExecutarThreadSolicitacaoRelatorio(object dt, enumTipoSaidaRelatorio saida, ListItemCollection items, string nomeRelatorio, string nomeAmigavel, string diretorioDeUploadComArquivo, string nomeAleatorioDoArquivoParaUploadCriptografado, Usuario usuario, ManterSolicitacaoRelatorio manterSolicitacao, ManterFileServer manterFileServer, int quantidadeRegistro, object totalizador = null) { _thread = new Thread(() => { var solicitacao = new SolicitacaoRelatorio { DataSolicitacao = DateTime.Now, Nome = nomeRelatorio, NomeAmigavel = nomeAmigavel, Saida = saida.ToString(), Usuario = usuario, QuantidadeRegistros = quantidadeRegistro }; // Salvar pedido inicial, para consulta do status da solicitação do relatório. manterSolicitacao.Salvar(solicitacao); try { dynamic list = dt; dt = DataUtil.ToDataTable(list); var rv = WebFormHelper.GerarRelatorio(nomeRelatorio, dt, items, totalizador); // Obtém o arquivo. Super lento em relatórios grandes. Por isso está em uma Thread dããã, senhor óbvio var arquivoBytes = rv.LocalReport.Render(saida.ToString()); // Escrever o arquivo na pasta. File.WriteAllBytes(diretorioDeUploadComArquivo, arquivoBytes); FinalizarSolicitacaoRelatorio(nomeAmigavel, nomeAleatorioDoArquivoParaUploadCriptografado, manterSolicitacao, manterFileServer, solicitacao); Thread.CurrentThread.Abort(); } catch (ThreadAbortException) { // ignored } catch (Exception ex) { // Informa que houve falha na geração do relatório. solicitacao.Falha = true; solicitacao.Descricao = ex.ToString(); manterSolicitacao.Salvar(solicitacao); _thread.Abort(); } }) { IsBackground = true }; // Let the chaos COMMENCE! _thread.Start(); }
public static void GerarRelatorio(string caminhoReport, object pListaDados, enumTipoSaidaRelatorio pTipoSaidaRelatorio, ListItemCollection pCamposVisiveis, object totalizador = null) { var rv = GerarRelatorio(caminhoReport, pListaDados, pCamposVisiveis, totalizador); // Renderiza o relatório. Super pesado em relatórios grandes. Utilize o sistema de solicitação de relatórios para esses relatórios grandes. //if (rv.LocalReport.IsReadyForRendering) { var resultado = rv.LocalReport.Render(pTipoSaidaRelatorio.ToString()); GerarArquivoRelatorio(pTipoSaidaRelatorio, resultado); //} }
public static ReportViewer GerarRelatorioTable(IList <string> titulosHeader, DataTable pListaDados, enumTipoSaidaRelatorio pTipoSaidaRelatorio, ListItemCollection pCamposVisiveis, IList <string> ignorarCampos = null, IDictionary <string, string> lsGroup = null) { var allFields = MergeFielsCamposVisiveis(pListaDados, pCamposVisiveis, lsGroup); var mRdl = GenerateRdl(titulosHeader, allFields); var dataSets = new List <ReportDataSource> { new ReportDataSource("DataSet1", pListaDados.Copy()) }; return(GerarRelatorio(mRdl, dataSets, pTipoSaidaRelatorio, pCamposVisiveis, ignorarCampos)); }
public static void GerarRelatorioDoIndice(string caminhoReport, object pListaDados, enumTipoSaidaRelatorio pTipoSaidaRelatorio, ListItemCollection pCamposVisiveis, int indice, int quantidadePorPaginas) { var binPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"); var assembly = Assembly.LoadFrom(binPath + "\\Sebrae.Academico.Reports.dll"); var stream = assembly.GetManifestResourceStream("Sebrae.Academico.Reports." + caminhoReport); IList objetos = null; if (pListaDados != null) { objetos = pListaDados as IList; if (objetos.Count > 0) { objetos = objetos.Cast <object>().ToList().Skip(indice * quantidadePorPaginas).Take(100).ToList(); } } var rv = new ReportViewer(); rv.LocalReport.LoadReportDefinition(stream); rv.LocalReport.DataSources.Clear(); rv.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", objetos)); //SetImagensRelatório(rv); try { if (pCamposVisiveis != null) { ValidarVisibilidadeCampos(rv, pCamposVisiveis); } } catch { } rv.LocalReport.Refresh(); var resultado = rv.LocalReport.Render(pTipoSaidaRelatorio.ToString()); GerarArquivoRelatorio(pTipoSaidaRelatorio, resultado); }
public static void GerarArquivoRelatorio(enumTipoSaidaRelatorio pTipoSaidaRelatorio, GridView grid, string nomeArquivo = "relatorio") { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ClearHeaders(); var extensao = string.Empty; switch (pTipoSaidaRelatorio) { case enumTipoSaidaRelatorio.PDF: HttpContext.Current.Response.ContentType = "application/pdf"; extensao = "pdf"; break; case enumTipoSaidaRelatorio.WORD: HttpContext.Current.Response.ContentType = "application/msword"; extensao = "doc"; break; case enumTipoSaidaRelatorio.EXCEL: HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; extensao = "xls"; break; } System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); grid.RenderControl(htmlWrite); HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + nomeArquivo + "." + extensao + "\""); HttpContext.Current.Response.Write(stringWrite.ToString()); HttpContext.Current.Response.End(); }
public static void GerarRelatorioComGrafico(string caminhoReport, List <string> caminhoSubReports, object pListaDados, object pListaDadosAgrupados, enumTipoSaidaRelatorio pTipoSaidaRelatorio, ListItemCollection pCamposVisiveis) { string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin"); Assembly assembly = Assembly.LoadFrom(binPath + "\\Sebrae.Academico.Reports.dll"); Stream stream = assembly.GetManifestResourceStream("Sebrae.Academico.Reports." + caminhoReport); ReportViewer rv = new ReportViewer(); rv.LocalReport.LoadReportDefinition(stream); foreach (var item in caminhoSubReports) { stream = assembly.GetManifestResourceStream("Sebrae.Academico.Reports." + item); rv.LocalReport.LoadSubreportDefinition(item, stream); } rv.LocalReport.DataSources.Clear(); rv.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", pListaDados)); informacoesAgrupadasPorDataDeAcesso = pListaDadosAgrupados; rv.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); if (pCamposVisiveis != null) { ValidarVisibilidadeCampos(rv, pCamposVisiveis); } rv.LocalReport.Refresh(); var resultado = rv.LocalReport.Render(pTipoSaidaRelatorio.ToString()); GerarArquivoRelatorio(pTipoSaidaRelatorio, resultado); }
/// <summary> /// Executar uma consulta de relatório em threading e enviar para a tela de Solicitações de relatórios via FileServer. /// Este método é um wrap do método para requisição em URL com menos parâmetros. /// </summary> /// <param name="requestUrl">URl da requisição</param> /// <param name="saida">Tipo de saída do relatório</param> /// <param name="nomeRelatorio">Nome técnico do relatório</param> /// <param name="nomeAmigavel">Nome amigável do relatório</param> /// <param name="quantidadeRegistro">Quantidade de registros do relatório</param> public static void ExecutarThreadSolicitacaoRelatorioRequisicao(string requestUrl, enumTipoSaidaRelatorio saida, string nomeRelatorio, string nomeAmigavel, int quantidadeRegistro) { // Obter o caminho do arquivo com um nome aleatório. var caminhoDiretorioUpload = ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.RepositorioUpload).Registro; var nomeAleatorioDoArquivoParaUploadCriptografado = WebFormHelper.ObterStringAleatoria(); var diretorioDeUploadComArquivo = string.Concat(caminhoDiretorioUpload, @"\", nomeAleatorioDoArquivoParaUploadCriptografado); // Ler requisição a partir de uma URL informada. var webRequest = (HttpWebRequest)WebRequest.Create(requestUrl); ExecutarThreadSolicitacaoRelatorioRequisicao( webRequest, saida, nomeRelatorio, nomeAmigavel, diretorioDeUploadComArquivo, nomeAleatorioDoArquivoParaUploadCriptografado, new ManterUsuario().ObterUsuarioLogado(), new ManterSolicitacaoRelatorio(), new ManterFileServer(), quantidadeRegistro); WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Seu relatório está sendo gerado e deve aparecer no menu de solicitações de relatórios em breve. O menu fica em \"SOLICITAÇÕES DE RELATÓRIOS > Histórico de solicitações\"."); }
private static void ExecutarThreadSolicitacaoRelatorioRequisicao(HttpWebRequest webRequest, enumTipoSaidaRelatorio saida, string nomeRelatorio, string nomeAmigavel, string diretorioDeUploadComArquivo, string nomeAleatorioDoArquivoParaUploadCriptografado, Usuario usuario, ManterSolicitacaoRelatorio manterSolicitacao, ManterFileServer manterFileServer, int quantidadeRegistro) { _thread = new Thread(() => { var solicitacao = new SolicitacaoRelatorio { DataSolicitacao = DateTime.Now, Nome = nomeRelatorio, NomeAmigavel = nomeAmigavel, Saida = saida.ToString(), Usuario = usuario, QuantidadeRegistros = quantidadeRegistro }; // Salvar pedido inicial, para consulta do status da solicitação do relatório. manterSolicitacao.Salvar(solicitacao); try { var myReq = webRequest; var myResp = myReq.GetResponse(); using (var stream = myResp.GetResponseStream()) { if (stream == null) { throw new Exception( "Stream nulo não pode ser utilizado para ler o relatório. Tente novamente."); } using (var ms = new MemoryStream()) { int count; do { var buf = new byte[1024]; count = stream.Read(buf, 0, 1024); ms.Write(buf, 0, count); } while (stream.CanRead && count > 0); // Escrever o arquivo na pasta. É aqui que a mágica acontece. File.WriteAllBytes(diretorioDeUploadComArquivo, ms.ToArray()); } } FinalizarSolicitacaoRelatorio(nomeAmigavel, nomeAleatorioDoArquivoParaUploadCriptografado, manterSolicitacao, manterFileServer, solicitacao); Thread.CurrentThread.Abort(); } catch (ThreadAbortException) { // ignored } catch (Exception ex) { // Informa que houve falha na geração do relatório. solicitacao.Descricao = "Erro ao escrever " + diretorioDeUploadComArquivo + " - Mensagem de erro: " + ex; solicitacao.Falha = true; manterSolicitacao.Salvar(solicitacao); _thread.Abort(); } }) { IsBackground = true, Name = nomeRelatorio + Guid.NewGuid() }; // Let the chaos COMMENCE! _thread.Start(); }