Arquivo para a categoria 'Dicas.NET'

Sistema c/ fontes migrados do .NET 2.0 para .NET 3.5

Quando iniciei na plataforma .NET utilizei a versão 1.1 do framerwork no VS2003. Com o lançamento da versão 2.0 juntamente com o VS2005 migrei as aplicações para esta versão.

Hoje com o anúncio do VS2010 e do .NET 4.0 decidi migrar as minhas aplicações para a versão 3.5 e VS 2008. Preliminarmente tive dois problemas na migração:Editar posts ‹ Reginaldo Jr. Weblog — WordPress

  1. O Service Pack 1 do Visual Studio 2008 tinha uns bugs. Mas isso não foi problema por que no site da microsoft já havia a solução. Páginas com MasterPage, AJAX e componentes do AjaxControlToolkit geravam um erro durante a utilização do modo Design no VS 2008. O problema e a correção podem ser baixados aqui.
  2. O tratamento de excessão dentro do UpdatePanel do AJAX foi alterado em sua forma de utilização. Para utilizar a forma de tratar a excessão dentro de um UpdatePanel como era utilizada no .NET Framework 2.0 e VS 2005 tive que implementar um pequeno script em Javascript. Uma excessão dentro de um UpdatePanel na versão 2.0 do framework fazia surgir um ‘alert’ no browser. Na versao 3.5 surge um erro Javascript que precisa ser tratado em Javascript. Dá uma certa flexibilidade no tratamento de erros no lado do cliente. Mas com um pequeno script isso pode ser corrigido e o ‘alert’ pode ser exibido. Quem desejar ver este scrpit pode pedir por email que eu envio. Leia mais aqui.

No geral não tive problemas de adaptação ao novo ambiente já que é bem próximo da versão anterior. Porém achei pesado, ou seja, precisa de mais memória para uma boa performance. Mas indico a migração. Quem usa NHibernate como camada de persistência não vai ter maiores problemas, principalmente se utilizar o pacote NHibernate 2.0.1 GA. Tive um erro com uma query utilizando Criterion que, escrevendo em HQL, resolveu o problema.

Estou utilizando o VS2008 Pro SP1 desde o dia 28/06/2009 e “tudo bem também”; nada de mais. Espero não ter outros problemas. Se tiver possivelmente eu atualiza este post com o novo problema (não garanto). Quem conhecer outros incovenientes queram por gentileza deixar um comentário nesta página.

É isso. Ah, os sistemas com fontes que disponibilizo, agora, vai nessa nova versão da plataforma.

Importar Tabela Unificada SUS

Quem desenvolve sistema de informações em saúde voltado para atendimento SUS certamente conhece a TABELA UNIFICADA SUS. Afinal os procedimentos hospitalares e ambulatoriais, CID´s, ocupações dos profissionais envolvidos, relacionamentos entre tabelas, valores dos procedimentos, prazos, tempos de premanência, entre outros são encontrados nessas tabelas que dão suporte a vários outros sistemas fornecidos pelo Ministério da Saúde. Quem não conhece a estrutura da Tabela Unificada SUS pode conhecer no site http://sigtap.datasus.gov.br. Esta é a forma on-line de consultar essas informações.

Recentemente eu desenvolvi um sistema de gestão em saúde que utilizava esta tabela. O Datasus disponibiliza os dados desta tabela mensalmente em arquivos textos compactados. Tivemos que criar uma maneira de importar facilmente estes dados baixando do FTP e importando para o nosso banco de dados. O próprio usuário pode disparar este processo quando tiver conhecimento da disponibilidade das informações atualizadas da tabela.

Resolvi, então, disponibilizar a solução completa e com fontes para os interessados. Este projeto é bastante rico em recursos: criação de tabelas, descompactação de arquivos, download de FTP, conexão com banco de dados, execução de scripts DDL, etc. O projeto foi desenvolvido para utilização com banco de dados Firebird mas pode ser facilmente convertido para qualquer outro banco.

O projeto está disponível para download no CodePlex: http://tabelaunificadasus.codeplex.com/. Lá voce irá encontrar maiores informações sobre o nosso projeto.

É isso.

Validar Campos no Cliente com .NET e Javascript

Uma ponto importante para quem desenvolve sistemas é o tráfego de rede. Espera-se que os sistemas de informações utilizem o mínimo possível os recursos da rede. Evitar acessos desnecessários ao servidor de aplicação e banco de dados é uma das providências que os desenvolvedores devem tomar pra diminuir esse tráfego.

Em sistemas web não seria diferente. Afinal o acesso a páginas web pode ocorrer via intranet, ou seja, na rede local, ou pela internet passando por vários servidores, bandas, nós, comutadores, etc. É importante evitar submissões de páginas desnecessárias. Isso pode fazer com que a navegação seja bem mais rápida e produtiva. Por exemplo, se for definido na aplicação uma regra que somentes CPF´s válidos podem ser gravados no banco de dados, a aplicação deve validar o CPF antes de gravar no banco. Mas onde essa validação deve acontecer? Algumas sugestões:

  1. Triggers na tabela – Antes do INSERT a trigger pode validar o CPF. O uso de trigger é desaconselhável, principalmente para validações de campo;
  2. Procedures -  Se o sistema utilizar as procedures para implementar as regras de negócio, um ótimo lugar para validar o CPF é durante a execução da procedure;

Essa duas formas tem um problema em relação ao tráfego: os dados trafegaram a rede inteira apartir da tela do cliente até o banco de dados apenas para retornar “CPF inválido.”

Se utilizar um servidor de aplicação em uma arquitetura de n-camadas pode-se implementar a validação nos objetos de négocio. Isso já diminui um pouco o tráfego. Afinal o servidor de aplicação deve estar em uma camada acima, em relação a camada onde é feito o acesso ao banco de dados. O servidor de aplicação pode validar os dados e quando forem enviados à camada infeiror, os dados já foram validados na camada de regra de négocios.

Mas podemos subir camada ainda mais nessa validação. Podemos colocar a validação do CPF na camada de apresentação, exatamente no servidor web. Plataformas como PHP, ASP, ASP.NET, JSP podem utilizar essa forma. A página é submetida ao servidor web que faria a validação dos dados. Note que o servidor web deve ficar numa camada acima do servidor de aplicação.  Agora o tráfego é apenas entre o cliente e o servidor web que já é muito bom.

Mas tem certas validações que podem ser feitas diretamente no cliente; lá no navegador. Vejamos alguns exemplos:

  • campos que não podem ser nulos;
  • data, cpf, cns, cnpj, etc. inválidos;
  • comparação de dados entre dos campos.

Ou seja, se determinadas validações, também chamadas de pré-validações, forem checadas antes de submeter a página ao servidor web podemos evitar ao máximo tráfegos desnecessários em situações elementares. O campo CPF pode ser validado antes de o usuário enviar os dados ao servidor, ou seja, a página só seria enviada ou submetida ao servidor se o CPF fosse digitado corretamente, com os dois dígitos verificadores válidos. O mesmo podemos pensar com datas, horas e outros valores. Assim a diminuição do tráfego seria total. A gravação do CPF, ao ser validado no navegador do cliente, quando fosse enviado ao servidor certamente seria gravado já que o CPF sempre estaria correto ao chegar no servidor. Isso vale para vários outros tipos de campos: data, hora, data e hora, cnpj, cns, números, campos com dígitos verificadores, entre outros.

Essa validação no cliente pode ser feita com Javascript. Uma problema: “E se o navegador não suportar Javascript?” Realmente. Aí a validação deverá também ser feita em alguma das camadas inferiores citadas acima. Foi dito que essas validações seriam um tipo de pré-validações. Nenhuma aplicação deve ser feita apenas com validações no navegador do cliente. Algum outro local deve fazer a validação principal. Os objetos de negócio devem implementar as validações dos campos. Em programação orientada a objetos isso passa a ser um requisito técnico. Se a validação no navegador do cliente não funcionar, a verificação em outra camada inferior deverá ser feita.

O fato é que validar no navegador do cliente utilizando Javascript é um boa prática para qualquer sistema web. Em ASP.NET existe alguns componentes que realizam essa tafera com muita qualidade.

  • RequiredFieldValidator: usado quando um campo não pode ser vazio;
  • RangeValidator: usado para verificar se o conteúdo do campo está dentro de uma determinada faixa;
  • RegularExpressionValidator: usado para validar campos utilizando expressões regulares;
  • CompareValidator: usado para comparar dois campos;
  • CustomValidator: usado para preparar uma verificação personalizada;

Todos esses validadores fazem verificações diretamente no navegador do cliente e só deixa os dados serem enviados ao servidor se os dados estiverem de acordo com as condições definidas nos validadores. Existe mais um componente chamado ValidatorSummary que é capaz de exibir mensagens de erro durante a validação. Leia mais sobre esses validadores neste link.

Gostaria de destacar a utilidade do CustomValidator. Ele permite utilizar validações personalizadas em Javascript. O desenvolvedor pode criar alguma validação de acordo com sua necessidade.  Para utilizar este validador genérico a função em Javascript segue uma padronização na sua definição. O script para validação pode vir entre tags <scripts></scripts> na própria página ou em arquivos .js e vinculados a página. A função de validação pode ter qualquer nome sendo que os parâmetros de entrada devem ser source e arguments.  Veja o exemplo:

<script language=”Javascript”>

function valida_vazio(source, arguments)

{

// O campo não pode ser vazio

if (arguments.Value!=”")

{

arguments.IsValid = true;

return true;

}

else

{

arguments.IsValid = false;

return false;

}

</script>
O exemplo acima faz a mesma coisa que o RequiredFieldValidator: valida campos que não podem ser vazio. O CustomValidator faz referência a esta função na propriedade ClientValidationFunction. Voce pode também combinar validators. Por exempo: O RequiredFieldValidator pode ser usado para verificar que um campo não pode ser vazio e o CustomValidator para verificar se o campo foi preenchido com um CPF válido por exemplo.

Note que essas validações no cliente apenas verificam a qualidade dos dados digitados. Elas não verificam, por exemplo, se o CPF está ou não cadastrado no banco. Esse tipo de validação tem que ser feita do lado do servidor.

Diversos tratamentos e validações pode ser feitos utilizando Javascript e o CustomValidator. Veja alguns exemplos:

  • CEP
  • CNPJ
  • CNS
  • CPF
  • Data
  • Data/Hora
  • Números decimal
  • Dígito verificador
  • Email
  • Hora
  • Números
  • PIS/PASEP

Essas validações são comumente utilizadas na maioria das aplicações. Eu implementei cada uma delas em Javascript e construi uma página em ASP.NET que demonstra a utilização de cada uma delas com o CustomValidator.  Se desejar ver ou ter todas ou alguma dessas validações clique aqui.

Então é isso.

Conversão de documentos para PDF em .NET

Um cliente me solicitou um sistema que permitisse receber documentos via web. O sistema deveria ter uma página que permitisse fazer upload de documentos (.doc, .ppt, .xls, .txt, .pps, .rtf). Até aí, tudo bem. O Visual Studio possui componente para realizar esta operação facilmente. Em consulta no Google é possível encontrar inúmeras sugestões de código e em diversas linguagens.

Acontecesse que o cliente não queria armazenar no banco de dados os arquivos recebidos em seu formato original. Ele gostaria que os arquivos, ao chegarem, fossem convertidos em PDF e, então, fossem armazenados num campo BLOB de uma tabela do banco de dados. Aí começou o problema!

Fiz algumas pesquisas na internet e descobri vários componentes pagos para realizar esta conversão. O cliente não estava disposto a contratar licensas do produto. E agora? Fiz, então, inúmeras pesquisas afim de encontrar algum componente de código aberto que pudesse fazer conversão de documentos do office. Não encontrei nenhum. Aproveito para solicitar a quem encontrar algum componente gratuito que realize esta operação não deixe de registrar aqui.

Mas nem tudo foi perdido. Um componente .NET eu (ainda) não encontrei (me ajudem). Fui obrigado a apelar para outras soluções e encontrei uma bastante interessante. Vou descrevê-la aqui.

Achei um programa muito interessante que permite converter qualquer documento imprimível no Windows para PDF utilizando uma impressora virtual: PDF Creator. Conheça mais detalhes da ferramenta no site da comunidade. Clique aqui e conheça mais sobre o formato PDF.

Execute o programa de instalação, instalando também os exemplos (samples) quando for solicitado. Após instalado, na pasta de instalação do produto possui uma chamada COM (Isso mesmo. A solução foi usar COM/DCOM.) e nessa pasta possui exemplos de utilização do PDF Creator com várias linguagens, inclusive em .NET. Eu me inspirei no exemplo da pasta “C:\Arquivos de programas\PDFCreator\COM\Dot Net\VS2005\C#”. Voce pode abrir esse projeto no Visual Studio, compilar e tirar sua próprias conclusões.Tudo está muito bem explicado. Este exemplo faz uso do ActiveX para permitir a conversão de documentos.

Quanto ao sistema do cliente devo informar que essa solução teve alguns inconvenientes: :(
1) Deve ter instalado no servidor WEB o PDFCreator bem como o programa padrão para o arquivo que deseja converter.
2) Nem todos os arquivos podem ser utilizados para impressão/conversão pelo processo. Pelo menos com os arquivos do Office 2003 (.doc, .ppt, .xls, .txt, .pps, .rtf) que eu testei, foram convertidos sem nenhum problema em um site.
3) Arquivos com macros, links dinâmicos, etc. e arquivos que, quando aberto necessitem de alguma confirmação para continuar abertura no programa também são problemas. Por exemplo, a princípio não há como converter .html por causa da necessidade de escolha da impressora de saída. O esquema só é útil para arquivos que permitam impressão direta pela impressora padrão sem intervenção do usuário.
4) O COM do PDF creator não permite abrir várias instâncias do programa. Isso pode ser um problema em sistema WEB onde vários usuários podem estar efetuando a conversão ao mesmo tempo. Caberá ao programador cuidar disso.
5) As vezes pode ser necessário encerrar (kill) algum processo pendente do PDF Creator na memória. Sem isso outras conversões não poderão ser feitas por causa do motivo do item 4. Também caberá ao programador cuidar disso.
6) Quando tentar executar um módulo web com acesso ao componente COM possivelmente dê esse erro: Retrieving the COM class factory for component with CLSID {3A619AE4-50EC-46C8-B19E-BE8F50DD2F22} failed due to the following error: 80070005. Pra isso também há solução. Clique aqui e veja como resolver o problema.
7) Por último, não consegui converter arquivos pelo PDFCreator rodando diretamente em uma página hospedada no IIS. Tentei de tudo e nada. O programador deverá buscar formas de contornar essa situação. Eu consegui dar um jeito nisso também.

Esses foram alguns dos problemas que enfrentei e acho que utilizei uma boa solução para alguns desses problemas. Claro que tem situações que, a princípio, não há o que ser feito. Aproveito para indicar um pequeno sistema web que construi baseado no PDF Creator. Ele permite o upload de arquivos e faz a conversão. Tratei alguns os problemas que comento acima (só os passíveis de solução). Quem desejar conhecer, o projeto se chama Convert2PDF e faz conversão via web de arquivos do Microsoft Office 2003. Cliqui aqui e veja mais detalhes.

Quem tiver novidades sobre esse assunto não deixe de registrar aqui.

É isso.

Google Maps para ASP.NET

Achei um control para ASP.NET que permite inserir facilmente o Google Maps na página. Inclusive, pode-se também inclui-lo no Toolbox do Visual Studio. Tudo muito simples (quem tiver dúvida sobre essa inclusão no VS deixe um comentário que eu respondo).

Mas, para utiliza-lo, é preciso ir em Google Maps API para obter uma chave. O control possui uma propriedade (Key) onde a chave obtida deve ser inserida.

Clique aqui para baixar o componente diretamente da página do seu criador.

Pronto. Incluio na Toolbox, arrastou o control, colou no webform e inseriu a chave? Tem um pequeno código que voce deve inserir na sua página para que o Google Maps possa localizar as coordenadas desejadas.

Adicione esta linha as Using’s:
using Subgurim.Controles;

O código é este:
protected void Page_Load(object sender, EventArgs e)
{

double latitude=10, longitude=10; // indica as coordenadas para o ponto do mapa


GMap1.addControl(new GControl(GControl.preBuilt.GOverviewMapControl));
GMap1.addControl(new GControl(GControl.preBuilt.LargeMapControl));
GMarker marker = new GMarker(new GLatLng(latitude,longitude));
GInfoWindow window = new GInfoWindow(marker, “<strong>Nome do Local</strong>”, true);
GMap1.addInfoWindow(window);
}

Encontrei, também, um outro blog que indica um outro componente similar: http://angelobestetti.blogspot.com. Baixei e instalei. É bem parecido com o outro. Não testei mas acho que ambos são úteis.

Blz!!!!

Editor de texto na web

Estava a procura de um componente para edição de textos na web. Achei o FCKEditor. Muito bom mesmo. Permite uma infinidade de configurações. Posso destacar algumas:

  1. É possível adaptar a barra de ferramentas adicionando ou excluindo botões de acordo com a necessidade.
  2. Área compartilhada para armazenamento das imagens utilizadas pelos usuários.
  3. Impressão do documento diretamente do editor.
  4. Vários recursos para edição de texto.

Utilizei o componente para confecção de laudos médicos de exames. Dessa forma posso armazenar formatação padrão para os laudos no banco de dados e os profissionais de saúde pode editar o laudo do paciente como se tivesse em um programa desktop para edição de texto.

Visite FCKEditor.net.

A instalação é bem simples. Primeiro, o editor propriamente dito deve ser baixado e descompactado, por exemplo, no site onde será utilizado. Depois o componente .net deve ser baixado, descompactado em algum lugar e depois o assembly (.dll) pode ser incluído no ToolBox do Visual Studio. Possui versão para VS 2003, VS 2005 ou superior.

Alguns arquivos JavaScript podem ser modificados para configuração do editor. O arquivo principal é o fckconfig.js. Neste arquivo voce pode configurar, entre outras, barra de ferramenta do editor, ambiente de implantação do sistema, linguagem do editor, etc.

Não posso deixar de sugerir uma aplicação que desenvolvi que utiliza o FCK Editor. A aplicação é EDWS – Sistema de Gerenciamento de Conteúdo. Esta aplicação permite incluir, alterar e excluir páginas de um site. Tudo dinamicamente. Através do FCK Editor o proprietário do site pode incluir imagens, textos, links, etc. em tempo de execução, como se estivesse em um editor de páginas HTML. As páginas são armazenadas em arquivos XML dispensando o uso de banco de dados. Saiba mais em EDWS Blog.

Muito bom!!!

Contador de usuários on-line com a classe Application

Em alguns sistemas web pode ser interessante saber quantos usuários estão on-line, ou seja, quantos usuários estão acessando o sistema em um dado momento. A idéia é ter um contador que seja incrementado cada vez que alguém acessa o sistema e, também, seja decrementado quando um usuário sair do sistema. Para isso precisamos ter um local onde este contador possa ser armazendo e incrementado sempre que um usuário acessar nosso sistema. O problema começa na hora de decrementar quando usuário sai.

É comum que coloquemos no sistema um botão de sair para que o usuário clique e assim o sistema seja informado quando algum usuário fechar o sistema. Mas nem sempre o usuário clica neste botão. Muitas vezes o browser é fechado antes do contador ser decrementado. A insersão de um código em javascript chamando outra página que, por sua vez, faz o decremento do contador pode ser utilizada.

Minha dica é uma solução bem simples, usando o arquivo Global.asax e a classe Application. No arquivo Global.asax contém vários eventos que são disparados em momentos especias durante a execução do site. Veja alguns:

  • Application_Error: Disparado sempre que ocorre uma exceção não tratada.
  • Application_Start: Disparado quando a aplicação é iniciada. Normalmente no primeiro Request do site, ou seja na primeira vez que o sistema é chamado, após o Start ou Re-Start do servidor Web (IIS).
  • Application_End: Disparado quando o sistema web está sendo encerrado. Normalmente isso ocorre quando o servidor web está sendo interrompido por qualquer motivo.
  • Session_Start: Disparado quando uma nova sessão de usuário é iniciada.
  • Session_End: Disparado quando a sessão de usuário é encerrada.

Esses e outros eventos podem ser utilizados para vários fins.

Falando um pouco sobre a classe Application… Existe algumas maneiras de fazer com que variáveis sejam passadas de uma página pra outra. As duas abaixos são bem interessantes:

  • Variáveis de Sessão: Uma sessão é criada sempre que um navegador faz uma chamada para um servidor web, ou seja, sempre que o navegador abre um site. Váriaveis de sessão podem ser criadas e ficam disponíveis em todas as chamadas a páginas do site. A sessão só é encerrada após um tempo de inatividade entre o navegador e o servidor web. Este tempo é configurável. Essas váriaves só são vista na sessão do usuário, ou seja, uma sessão não pode ver o conteúdo de outras sessões. Sessões são criadas no lado do servidor. Essas variáveis são gerenciadas através da classe Session.
  • Variáveis de Aplicação: Uma variável de aplicação é vista pela aplicação. Isso significa que enquanto a aplicação tiver ativa a variável está dispníviel. Somente quando o servidor for reiniciado essas variáveis deixam de exisitir. E mais: variáveis de aplicação são vistas por todos usuários da aplicação. No momento que o browser chamar alguma página do site, as variáveis de aplicação estarão disponívies. A classe que gerencia essas variáveis é a classe Application.

Na nossa dica vamos usar uma variável de aplicação para ser nosso contador de usuários on-line, bem como alguns eventos do arquivo Global.asax.

No evento Application_Start do Global.asax vamos criar uma variável de aplicação. Esta variável será inicializada sempre que o servidor der algum re-start.

protected void Application_Start(object sender, EventArgs e)
{
Application.Add(“UsuariosOnLine”, Convert.ToInt32(0));
}

No Evento Session_Start vamos colocar o incrementador do contador. Todas vez que uma nova sessão for criada o contador será incrementado. Poderia deixar pra fazer este incremento após a confirmação do login/senha do usuário. Estamos facilitando as coisas. Note também que estamos colocando o timeout da sessão em 20 minutos. Sem atividade por 20 minutos a sessão expira.

protected void Session_Start(Object sender, EventArgs e)
{
lock (typeof(HttpApplication))
{
int usuariosOnline = Convert.ToInt32(Application.Get(“UsuariosOnLine”));
usuariosOnline++;
Application.Set(“UsuariosOnLine”, usuariosOnline);
}
Session.Timeout = 20;//A sessão expira em 20 minutos
}

Quando a sessão expirar o contador deverá ser decrementado.

protected void Session_End(Object sender, EventArgs e)
{
lock (typeof(HttpApplication))
{
int usuariosOnline = Convert.ToInt32(Application.Get(“UsuariosOnLine”));
usuariosOnline–;
Application.Set(“UsuariosOnLine”, usuariosOnline);
}
}

Adicionei um lock ao processo pra evitar que esse processo seja disparado ao mesmo tempo por dois ou mais usuários diferentes.

Pronto. Muito simples, não acha? Inclusive voce pode acessar a sua variável de aplicação (o contador) de qualquer lugar da sua aplicação para mosta-la em alguma página, informando quantos usuários estão on-line naquele momento. O que está mostrando na realidade são quantas sessões estão abertas.

Se quiser, baixe o arquivo abaixo e veja a implementação que fiz para um sistema que desenvolvi. ATENÇÃO: O arquivo não é um .doc e sim um .zip. Renomei após o download.

globalzip.doc

É isso aí. Qualquer dúvida é só falar. Se tiver uma proposta melhorada sobre o assunto comente aqui.

Tratamento de exceções não previstas na aplicação

Num sistema (web particularmente) agente enche a página de validators, try-catch, alerts, mensagens, máscaras de entrada, etc. tudo visando cercar as possibilidades de erro nas operações dos usuários. Mas ninguém é perfeito!!!!! Alguma coisa sempre passa e quando o usuário fizer aquilo que agente não previu vai gerar aquela página amarela de erro não tratado. Voce pode configurar uma página de erro padrão no web.config. Eu, pessoalmente, não me adaptei bem a esta solução.

Eu costumo fazer o seguinte:

  • Crio um página de erro bem amígável, tipo Erro.aspx ou Erro.htm. Inclusive a mensagem que eu coloco é esta: “Infelizmente o sistema comportou-se de maneira inesperada. A equipe de desenvolvimento foi notificada automaticamente. Esperamos solucionar o problema o mais rápido possível. Tente realizar a mesma operação mais tarde pra verificar se o problema foi corrigido. Pedimos desculpas pelos transtornos causados e contamos com a compreensão de todos.” Claro! Voce pode mudar a mensagem e arrumar bem legal na página.
  • Depois, insiro um item no website chamado Global.asax se já não tiver inserido. Este arquivo dispara vários eventos automaticamente durante a execução da aplicação. Pesquise no help do SDK sobre esse eventos mais comuns: Application_Start, Application_End, Session_Start, Session_End, Application_BeginRequest e o que nós vamos usar, Application_Error. Este evento é disparado sempre que um erro não tratado ocorrer. Se no seu Global.asax este método/evento não estiver declarado voce pode incluir como mostrado abaixo e neste evento nós iremos inserir o nosso tratamento do erro não tratado.

protected void Application_Error(Object sender, EventArgs e)
{
}

  • O código que eu insiro fará duas coisas: primeiro, gravar em um arquivo texto, tipo erros.txt, a exceção que ocorreu e de maneira cumulativa; um abaixo do outro no arquivo. Dessa forma é possível resgatar as exceções que ocorreram ao longo do uso do sistema. Os programadores podem acessar esse arquivo e corrigir os erros do sistema e depois apagá-lo, aguardando novos erros. ;) A segunda coisa é, caso este erro não tenha dado localmente, ou seja, tenha sido um erro gerado pelo usuário final, o sistema irá desviar o browser para a página de erro personalizada que criamos acima. Inclusive essa página pode ter um link para reiniciar o sistema. Se for um erro local, ou seja, na máquina do desenvolvedor, a página amarela com detalhes da exceção pode ser vista normalmente.

Esse arquivo erros.txt pode ser acessado até do url tipo http://www.meusistema.com/erros.txt. Assim o programador pode saber como o sistema anda se comportando de qualquer lugar na rede ou na internet e é dessa forma que ele fica sendo “notificado automaticamente“, como informamos na mensagem que eu coloquei na página de erro personalizado. Claro que depende do programador olhar esse aquivo sempre. Alguns podem querer que o sistema notifique por email. Questão de implementação. Eu prefiro no arquivo mesmo.

Clique aqui e baixe a implementação que fiz pra um sistema. IMPORTANTE: O arquivo não é um DOC. É um ZIP. Renomei…


Categorias

Arquivos

Calendário

Novembro 2009
D S T Q Q S S
« Jul    
1234567
891011121314
15161718192021
22232425262728
2930  

Desde (04/11/07)

  • 44,832 visitas