コード例 #1
0
        public static string FecharThread(string idFunc, string url, string aleatorio, string duracaoSegundos)
        {
            int contador = 0, duracao = Glass.Conversoes.StrParaInt(duracaoSegundos) * 10;

            ChaveDicionario chave = new ChaveDicionario(Glass.Conversoes.StrParaUint(idFunc), url, Glass.Conversoes.StrParaInt(aleatorio));

            if (!_threads.ContainsKey(chave))
            {
                return("false");
            }

            while (contador++ < duracao)
            {
                try
                {
                    if (_threads.ContainsKey(chave))
                    {
                        FecharThread(chave);
                        break;
                    }
                }
                catch { }

                Thread.Sleep(100);
            }

            return((!_threads.ContainsKey(chave)).ToString().ToLower());
        }
コード例 #2
0
        public static string Carregou(string idFunc, string url, string aleatorio, string statusAtual, string duracaoSegundos)
        {
            int contador = 0, duracao = Glass.Conversoes.StrParaInt(duracaoSegundos) * 10;

            ChaveDicionario chave = new ChaveDicionario(Glass.Conversoes.StrParaUint(idFunc), url, Glass.Conversoes.StrParaInt(aleatorio));

            if (!_threads.ContainsKey(chave))
            {
                return("2|Erro");
            }

            while (contador++ < duracao)
            {
                try
                {
                    if (!_threads[chave].Executando)
                    {
                        return("1|" + _threads[chave].Status);
                    }
                    else if (!String.Equals(_threads[chave].Status, statusAtual, StringComparison.InvariantCultureIgnoreCase))
                    {
                        return("2|" + _threads[chave].Status);
                    }
                }
                catch (Exception ex)
                {
                    return(ex.ToString());
                }

                Thread.Sleep(100);
            }

            return("2|" + _threads[chave].Status);
        }
コード例 #3
0
 private static void FecharThread(ChaveDicionario chave)
 {
     if (_threads.ContainsKey(chave))
     {
         _threads[chave].Thread.Abort();
         _threads[chave].Thread = null;
         _threads[chave].ViewState.Remove("aleatorio");
         _threads.Remove(chave);
     }
 }
コード例 #4
0
        /// <summary>
        /// Faz o processamento do relatório.
        /// </summary>
        protected void ProcessaReport(Control aguardar)
        {
            if (TemPostData(true))
            {
                return;
            }

            DadosDicionario dados = new DadosDicionario();

            dados.ExportarExcel = Request["ExportarExcel"] == "true";
            dados.Parametros    = Parametros;
            dados.BasePath      = Server.MapPath("~/");
            dados.Report        = new LocalReport();
            dados.ViewState     = this.ViewState;
            dados.Url           = Request.Url.ToString();

            dados.Report.ShowDetailedSubreportMessages = true;

            dados.Report.SetBasePermissionsForSandboxAppDomain
                (new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));

            AddAssembly(dados.Report, typeof(Glass.Data.Helper.Config).Assembly);

            dados.ParametrosRelatorio         = new List <ReportParameter>();
            dados.Report.EnableExternalImages = true;
            dados.Report.SubreportProcessing += new SubreportProcessingEventHandler(report_SubreportProcessing);

            Warning[] Warnings  = null;
            string[]  StreamIds = null;
            string    Encoding  = null;
            string    Extension = null;

            byte[] bytes = null;

            var  login              = UserInfo.GetUserInfo;
            bool naoUtilizarThread  = Request["semThread"] == "true" || !UsarThread;
            var  diretorioLogotipos = Server.MapPath("~/images");
            var  nomeFuncionario    = login != null ? login.Nome : string.Empty;

            if (Request.Browser.IsMobileDevice)
            {
                LoadReport(null, ref dados.Report, ref dados.ParametrosRelatorio, HttpContext.Current.Request, dados.Parametros, login, diretorioLogotipos);

                VerificarParametros(dados.Report, ref dados.ParametrosRelatorio);
                dados.Report.SetParameters(dados.ParametrosRelatorio);
                byte[] dadosMobile = null;

                if (!dados.ExportarExcel)
                {
                    dadosMobile = dados.Report.Render("PDF", null, out dados.MimeType, out dados.Encoding, out dados.Extension, out dados.StreamIds, out dados.Warnings);
                }
                else
                {
                    dadosMobile = dados.Report.Render("Excel", null, out dados.MimeType, out dados.Encoding, out dados.Extension, out dados.StreamIds, out dados.Warnings);
                }

                //Utilizado para baixar arquivo
                Response.ContentType = _mimeType;
                Response.AddHeader("Content-Length", dadosMobile.Length.ToString());
                Response.OutputStream.Write(dadosMobile, 0, dadosMobile.Length);

                Page.ClientScript.RegisterClientScriptBlock(GetType(), "callbackPronto",
                                                            string.Format("window.opener.{0}", Request["callbackPronto"]), true);

                var nomeRelatorio = string.Empty;

                if (Request.Path.ToLower().Contains("relpedido.aspx"))
                {
                    nomeRelatorio = string.Format("; filename=PD{0}{1}", Request["idPedido"],
                                                  (Request["ExportarExcel"] == "true" ? ".xls" : ".pdf"));
                }
                else if (Request["rel"] != null && Request["rel"].ToLower() == "imagemprojeto" && Request["idItemProjeto"] != null)
                {
                    uint idItemProjeto = Request["idItemProjeto"].Split(',')[0].StrParaUint();
                    if (idItemProjeto > 0)
                    {
                        uint?idPedido        = Glass.Data.DAL.ItemProjetoDAO.Instance.ObtemIdPedido(idItemProjeto);
                        uint?idPedidoEspelho = Glass.Data.DAL.ItemProjetoDAO.Instance.ObtemIdPedidoEspelho(idItemProjeto);

                        if (idPedido > 0)
                        {
                            nomeRelatorio = string.Format("; filename=PJ{0}{1}",
                                                          idPedido, (Request["ExportarExcel"] == "true" ? ".xls" : ".pdf"));
                        }
                        else if (idPedidoEspelho > 0)
                        {
                            nomeRelatorio = string.Format("; filename=PJ{0}{1}",
                                                          idPedidoEspelho, (Request["ExportarExcel"] == "true" ? ".xls" : ".pdf"));
                        }
                    }
                }
                else if (Request["rel"] != null)
                {
                    nomeRelatorio = string.Format("; filename={0}.{1}", Request["rel"], dados.Extension);
                }
                else
                {
                    nomeRelatorio = string.Format("; filename=Relatorio.{0}", dados.Extension);
                }

                Response.AddHeader("Content-Disposition", string.Format("attachment{0}", nomeRelatorio));
                Response.End();
            }

            if (naoUtilizarThread)
            {
                try
                {
                    var reportDocument = LoadReport(null, ref dados.Report, ref dados.ParametrosRelatorio, HttpContext.Current.Request, dados.Parametros, login, diretorioLogotipos);

                    if (reportDocument != null)
                    {
                        var viewer = new GlassReportViewer(diretorioLogotipos, nomeFuncionario, null);
                        viewer.Document = reportDocument;
                        Colosoft.Reports.Warning[] warnings2 = null;

                        viewer.Export(
                            Request["ExportarExcel"] != "true" ?
                            Colosoft.Reports.Web.ExportType.Pdf :
                            Colosoft.Reports.Web.ExportType.Excel, CreateStream, out warnings2);
                    }
                    else
                    {
                        VerificarParametros(dados.Report, ref dados.ParametrosRelatorio);
                        dados.Report.SetParameters(dados.ParametrosRelatorio);

                        if (Request["ExportarExcel"] != "true")
                        {
                            dados.Report.Render("PDF", null, new CreateStreamCallback(CreateStream), out Warnings);
                        }
                        else
                        {
                            dados.Report.Render("Excel", null, new CreateStreamCallback(CreateStream), out Warnings);
                        }
                    }

                    _stream.Position = 0;
                    bytes            = new byte[_stream.Length];
                    _stream.Read(bytes, 0, bytes.Length);

                    if (dados.Report != null)
                    {
                        dados.Report.Dispose();
                        dados.Report = null;
                    }
                }
                catch (Exception ex)
                {
                    throw new ReportException(ex,
                                              this.DadosJavaScript.JavaScriptError == null ? null :
                                              this.DadosJavaScript.JavaScriptError(ex));
                }
            }
            else
            {
                #region Thread do relatório

                var request    = Request;
                var exportType = Request["ExportarExcel"] != "true" ?
                                 Colosoft.Reports.Web.ExportType.Pdf :
                                 Colosoft.Reports.Web.ExportType.Excel;

                Thread t = new Thread(new System.Threading.ParameterizedThreadStart(
                                          delegate(object dadosThread)
                {
                    DadosDicionario d = (DadosDicionario)dadosThread;

                    d.Executando = true;

                    try
                    {
                        //Chamado 10263, salvar logs da abertura do relatorio.
                        var sw  = new Stopwatch();
                        var log = Environment.NewLine;

                        sw.Start();

                        log += "Funcionário: " + login.CodUser + " - " + DateTime.Now + Environment.NewLine;

                        d.Status           = "Buscando dados";
                        var reportDocument = LoadReport(d.BasePath, ref d.Report, ref d.ParametrosRelatorio, request, d.Parametros, login, diretorioLogotipos);
                        log += d.Url + Environment.NewLine + "Buscando dados - " + sw.Elapsed.ToString() + Environment.NewLine;

                        if (reportDocument != null)
                        {
                            var viewer      = new GlassReportViewer(diretorioLogotipos, nomeFuncionario, x => d.Status = x);
                            viewer.Document = reportDocument;
                            Colosoft.Reports.Warning[] warnings2 = null;

                            using (var stream = viewer.Export(exportType, out d.MimeType, out d.Encoding, out d.Extension, out warnings2))
                            {
                                if (stream is System.IO.MemoryStream)
                                {
                                    d.Dados = ((System.IO.MemoryStream)stream).ToArray();
                                }
                            }
                        }
                        else
                        {
                            VerificarParametros(d.Report, ref d.ParametrosRelatorio);
                            d.Status = "Definindo parâmetros";
                            d.Report.SetParameters(d.ParametrosRelatorio);
                            d.Report.EnableExternalImages = true;
                            log += "Definindo parâmetros - " + sw.Elapsed.ToString() + Environment.NewLine;

                            d.Status = "Criando relatório";
                            if (!dados.ExportarExcel)
                            {
                                d.Dados = d.Report.Render("PDF", null, out d.MimeType, out d.Encoding, out d.Extension, out d.StreamIds, out d.Warnings);
                            }
                            else
                            {
                                d.Dados = d.Report.Render("Excel", null, out d.MimeType, out d.Encoding, out d.Extension, out d.StreamIds, out d.Warnings);
                            }
                            log += "Criando relatório - " + sw.Elapsed.ToString() + Environment.NewLine;
                        }

                        d.Status = "Carregando";

                        sw.Stop();
                        log += "Carregado - " + sw.Elapsed.ToString();

                        if (Glass.Configuracoes.Geral.GravarLogAberturaRelatorio)
                        {
                            Glass.Data.Helper.LogArquivo.InsereLogAberturaRelatorio(log);
                        }

                        d.Executando = false;
                    }
                    catch (System.Threading.ThreadAbortException)
                    {
                        d.Executando = false;
                    }
                    catch (Exception ex)
                    {
                        d.Erro       = ex;
                        d.Executando = false;
                    }

                    if (dados.Report != null)
                    {
                        d.Report.Dispose();
                        d.Report = null;
                    }
                }
                                          ));

                #endregion

                ChaveDicionario chave = new ChaveDicionario(UserInfo.GetUserInfo.CodUser,
                                                            _aleatorio.GetUrlSemAleatorio(), _aleatorio.Get());

                #region Controle do Thread

                if (_threads.ContainsKey(chave) && !_threads[chave].Executando)
                {
                    if (_threads[chave].Erro != null)
                    {
                        Exception ex = _threads[chave].Erro;
                        FecharThread(chave);

                        throw new ReportException(ex,
                                                  this.DadosJavaScript.JavaScriptError == null ? null :
                                                  this.DadosJavaScript.JavaScriptError(ex));
                    }
                    else
                    {
                        bytes     = _threads[chave].Dados;
                        Warnings  = _threads[chave].Warnings;
                        StreamIds = _threads[chave].StreamIds;
                        _mimeType = _threads[chave].MimeType;
                        Encoding  = _threads[chave].Encoding;
                        Extension = _threads[chave].Extension;

                        FecharThread(chave);
                    }
                }
                else
                {
                    if (_threads.ContainsKey(chave))
                    {
                        FecharThread(chave);
                        chave.Aleatorio = _aleatorio.Get();
                    }
                    else if (Request["aleatorio"] != null)
                    {
                        Response.Redirect(chave.Url);
                        return;
                    }

                    dados.Thread = t;

                    _threads.Add(chave, dados);
                    dados.Thread.Start(_threads[chave]);
                }

                if (_threads.ContainsKey(chave) && bytes == null && aguardar != null)
                {
                    var item = new System.Web.UI.HtmlControls.HtmlGenericControl();
                    item.InnerHtml = @"
                        <table align='center' style='margin-top: 200px'>
                            <tr>
                                <td align='center'>
                                    <img src='" + this.ResolveClientUrl("~/Images/Load.gif") + @"' />
                                </td>
                            </tr>
                            <tr>
                                <td align='center' style='font-size: xx-large'>
                                    Aguarde
                                </td>
                            </tr>
                            <tr>
                                <td align='center' style='font-size: small; font-style: italic'>
                                    <span id='status'>Iniciando</span>
                                </td>
                            </tr>
                        </table>";

                    if (!PermitirFecharTelaDuranteAguarde)
                    {
                        item.InnerHtml += @"
                        <script type='text/javascript'>
                            window.onbeforeunload = function()
                            {
                                return 'As alterações feitas por você ainda estão sendo processadas.\n' +
                                    'Se você sair agora elas podem não ser feitas corretamente.\n' +
                                    'Tem certeza que deseja sair?';
                            }
                        </script>";
                    }

                    aguardar.Controls.Add(item);
                    return;
                }

                #endregion
            }

            dados = null;

            try
            {
                #region Monta o nome do arquivo

                var nomeRelatorio = string.Empty;

                if (!string.IsNullOrEmpty(Request["rel"]))
                {
                    nomeRelatorio = string.Format("; filename={0}.{1}", Request["rel"], Extension);

                    if (Request["rel"] != null && Request["rel"].ToLower() == "imagemprojeto" && Request["idItemProjeto"] != null)
                    {
                        uint idItemProjeto = Conversoes.StrParaUint(Request["idItemProjeto"].Split(',')[0]);

                        if (idItemProjeto > 0)
                        {
                            uint?idPedido = Glass.Data.DAL.ItemProjetoDAO.Instance.ObtemIdPedido(idItemProjeto);

                            uint?idPedidoEspelho = Glass.Data.DAL.ItemProjetoDAO.Instance.ObtemIdPedidoEspelho(idItemProjeto);

                            if (idPedido > 0)
                            {
                                nomeRelatorio = "; filename=PJ" + idPedido + (Request["ExportarExcel"] == "true" ? ".xls" : ".pdf");
                            }

                            else if (idPedidoEspelho > 0)
                            {
                                nomeRelatorio = "; filename=PJ" + idPedidoEspelho + (Request["ExportarExcel"] == "true" ? ".xls" : ".pdf");
                            }
                        }
                    }
                }

                else if (Request.Path.ToLower().Contains("relpedido.aspx") && !Request["idPedido"].Contains(","))
                {
                    nomeRelatorio = "; filename=PD" + Request["idPedido"] + (Request["ExportarExcel"] == "true" ? ".xls" : ".pdf");
                }
                else if (Request.Path.ToLower().Contains("relorcamento.aspx"))
                {
                    nomeRelatorio = "; filename=OR" + Request["idOrca"] + (Request["ExportarExcel"] == "true" ? ".xls" : ".pdf");
                }
                else
                {
                    nomeRelatorio = string.Format("; filename=Relatorio.{0}", Extension);
                }

                #endregion

                Response.ContentType = _mimeType;
                Response.AddHeader("Content-Length", bytes.Length.ToString());
                Response.AddHeader("Content-disposition", "inline" + nomeRelatorio);

                // Utilizado para exibir na tela
                if (bytes != null && bytes.Length > 0)
                {
                    Response.Clear();
                    Response.BinaryWrite(bytes);
                    Response.Flush();
                }
                else if (naoUtilizarThread && Request["callbackPronto"] != null)
                {
                    Page.ClientScript.RegisterClientScriptBlock(GetType(), "callbackPronto", "window.opener." + Request["callbackPronto"], true);
                }

                try
                {
                    Response.End();
                }
                catch (System.Threading.ThreadAbortException)
                {
                    // Ignora
                }
            }
            catch (Exception ex)
            {
                ex.Data["warnings"]  = Warnings;
                ex.Data["streamids"] = StreamIds;
                ex.Data["mimetype"]  = _mimeType;
                ex.Data["encoding"]  = Encoding;
                ex.Data["extension"] = Extension;
                throw ex;
            }
        }