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