示例#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();
        }
示例#2
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);
        }
示例#3
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);
        }
示例#4
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);
            //}
        }
示例#5
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);
        }
示例#6
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();
        }