O ColdFusion consegue gerenciar de forma inteligente, possíveis falhas de uma determinada aplicação, através da tag CFTRY e CFCATCH. São elas, as responsáveis pelo monitoramento e tratamento de erros que acontecem num template. Em geral, a sintaxe dessas duas tags é a seguinte:
<CFTRY>
Códigos CF...
<CFCATCH TYPE=”Tipo de erros”>
Código que deve ser executado quando o erro ocorrer...
</CFCATCH>
</CFTRY>
É importante observar porém, que essas mesmas tags não rastreiam erros de sintaxe de código; neste caso, o mais indicado para tratar esse tipo de exceção é o uso da tag CFERROR. Imagine por exemplo, utilizar uma tag chamada <CFDEPARTAMENTO>, sendo que ela não faz parte da especificação da CFML; isso ocasionaria um erro, não passível de tratamento de CFTRY/CFCATCH.
Através do atributo TYPE da tag CFCATCH é possível especificar em que circunstância - exceção - o CF deve agir caso um erro ocorra. Este atributo aceita os seguintes tipos de erros:
- Any – Qualquer exceção que for lançada pelo compilador
- Application – Exceções gerais da aplicação
- ErroQualquer – Qualquer exceção criada através da tag CFTHROW e que foi nomeada
- Database – Exceções específicas de base de dados
- Expression – Exceções de avaliação de expressões
- Lock – Erros de processamento simultâneos em casos que foi especificado um processamento unitário.
- MissingInclude – Falha na inclusão de arquivos
- Object – Falhas da tag CFOBJECT
- Template – Erros gerais que são retornados pelo template
- SearchEngine – Erros específicos na utilização da ferramenta Verity
- Security – Exceções de segurança como restrições de tags, diretórios, etc.
Você ainda pode consultar o liveDocs para verificar outros tipos, mais específicos e avançados de erros. Além disso, quando uma exceção que é tratada num contexto do CFCATCH ocorre, o ColdFusion gera uma estrutura chamada CFCATCH, contendo variáveis com informações detalhadas do erro que aconteceu. Para acessar essas variáveis, basta dar o output da estrutura CFCATCH, seguido de um ponto e o nome da variável, por exemplo: #cfcatch.detail#, para analisar a informação. As variáveis geradas nesta caso, dependem do tipo de erro que ocorreu, mas em geral, as seguintes variáveis são disponibilizadas:
- Detail – A mensagem nativa retornada pelo compilador ou pela tag CFTHROW
- Message – Diagnóstico da exceção
- Type - O Tipo de exceção que ocorreu.
Logo abaixo segue o exemplo de uma aplicação que ao falhar, no processamento da tag CFHTTP por exemplo, além de mostrar uma mensagem amigável de erro, notifica os administradores da aplicação sobre os detalhes da exceção, enviando um e-mail:
<cftry>
<cfhttp url="http://www.url.com.br/arquivoXML.xml" method="GET" resolveurl="false" />
<cfset parse = xmlparse(cfhttp.filecontent) />
<cfcatch type="Any">
Desculpe, mas sua solicitação não pôde ser atendida, tente novamente mais tarde.
<cfmail to="suporte@email.com.br"
from="helpdesk@empresa.com.br"
subject="Falha na aplicação XML"
type="html">
<font face="Verdana" size="2">
Ocorreu um erro na aplicação XML <br> Detalhes:
</font>
<cfdump var="#cfcatch#" />
</cfmail>
</cfcatch>
</cftry>
Tendo dúvidas ou sugestões, entre em contato: rafa@clickrafa.com.br