ENG recebe homenagem da Macromedia Inc.

Busca em nosso site:
ENG: Inovação e Tradição.

    :: Escolha sua Tecnologia ::

COLDFUSION
:: Tratamento de exceções no ColdFusion ::
Uma feature muito interessante do ColFusion MX é a capacidade de tratar suas próprias exceções. Uma exceção, nada mais é do que um erro que acontece em tempo de execução; estes por sua vez podem ser alheios à aplicação ou não: time-out no processamento, falha na conexão do CFFTP ou CFPOP, falha em alguma instrução dinâmica de SQL, entre outros, são alguns exemplos de exceções que podem acontecer.


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

Sobre o autor : Rafael Silva é analista de sistemas, atuando há mais de 5 anos no desenvolvimetno de soluções com o Macromedia ColdFusion, é um Macromedia Certified Professional em ColdFusion MX e escreve periódicamente um blog sobre ColdFusion e assuntos co-relatos em www.clickrafa.com.br. Desde 2004 ministra treinametos na ENG.