示例#1
0
        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();
        }
示例#2
0
        /// <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\".");
        }
示例#3
0
        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);
        }
示例#4
0
        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();
        }
示例#5
0
        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);
            //}
        }
示例#6
0
        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));
        }
示例#7
0
        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);
        }
示例#8
0
        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();
        }
示例#9
0
        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);
        }
示例#10
0
        /// <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\".");
        }
示例#11
0
        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();
        }