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 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); }
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); }
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 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); }
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(); }