Ejemplo n.º 1
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();
        }
Ejemplo n.º 2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var solicitacoes = new ManterSolicitacaoRelatorio().ObterDoUsuarioLogado().OrderByDescending(x => x.DataSolicitacao).ToList();

                Session["dsRelatorioSolicitacoes"] = solicitacoes;

                dgRelatorio.DataSource = solicitacoes;
                dgRelatorio.DataBind();
            }
        }
Ejemplo n.º 3
0
        protected void btnBaixarRelatorio_OnServerClick(object sender, EventArgs e)
        {
            var button = (System.Web.UI.HtmlControls.HtmlButton)sender;

            var solicitacaoId = int.Parse(button.Attributes["data-id"]);

            var relatorio = new ManterSolicitacaoRelatorio().ObterPorID(solicitacaoId);

            if (relatorio != null && relatorio.DataGeracao != null)
            {
                //WebFormHelper.GerarArquivoRelatorio(relatorio.ObterSaidaEnum(), relatorio.Arquivo);
            }

            WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Houve um erro na tentativa de baixar o arquivo. Tente novamente.");
        }
Ejemplo n.º 4
0
        private static void FinalizarSolicitacaoRelatorio(string nomeAmigavel,
                                                          string nomeAleatorioDoArquivoParaUploadCriptografado, ManterSolicitacaoRelatorio manterSolicitacao,
                                                          ManterFileServer manterFileServer, SolicitacaoRelatorio solicitacao)
        {
            // Obtém o MIME da Request.
            var mime     = "";
            var extensao = "";

            switch (solicitacao.ObterSaidaEnum())
            {
            case enumTipoSaidaRelatorio.PDF:
                mime     = "application/pdf";
                extensao = "pdf";
                break;

            case enumTipoSaidaRelatorio.WORD:
                mime     = "application/msword";
                extensao = "doc";
                break;

            case enumTipoSaidaRelatorio.EXCEL:
                mime     = "application/vnd.ms-excel";
                extensao = "xls";
                break;
            }

            var nomeOriginalArquivo =
                nomeAmigavel
                + "_"
                + solicitacao.DataSolicitacao.ToShortDateString()
                + "_"
                + solicitacao.DataSolicitacao.Hour.ToString().PadLeft(2, '0')
                + solicitacao.DataSolicitacao.Minute.ToString().PadLeft(2, '0')
                + "."
                + extensao;

            nomeOriginalArquivo = nomeOriginalArquivo.Replace(" ", "_");

            // Prepara o cadastro do arquivo na tabela do Media Server.
            var fileServer = new FileServer
            {
                NomeDoArquivoNoServidor = nomeAleatorioDoArquivoParaUploadCriptografado,
                NomeDoArquivoOriginal   = nomeOriginalArquivo,
                TipoArquivo             = mime,
                MediaServer             = true
            };

            // Salva no FileServer.
            manterFileServer.IncluirFileServer(fileServer);
            solicitacao.Arquivo     = fileServer;
            solicitacao.DataGeracao = DateTime.Now;

            // Salvar novamente, com o arquivo.
            manterSolicitacao.Salvar(solicitacao);
        }
Ejemplo n.º 5
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();
        }