Olançamento de erros no seu código 4D é agora possível a partir da v20R2.
Esses erros se comportam como qualquer erro 4D: acionam um diálogo de erro ou podem ser tratados num método ON ERR CALL.
Esta caraterística facilitará sua vida porque será capaz de melhorar a qualidade de seu código detectando proativamente erros assim que ocorrerem. Também pode gerir melhor o registo de erros.
Antes de entrar em detalhes, é importante observar que esse recurso é o primeiro passo para obter um gerenciamento de erros robusto.
Agora, vamos aos pormenores!
Esse recurso depende de um novo comando throw. Esse comando pode ser usado de diferentes maneiras, detalhadas abaixo e no HDI.
Como lançar e tratar erros
Os erros lançados com o comando throw comportam-se como qualquer outro erro 4D. Nenhum método ON ERR CALL foi configurado no exemplo abaixo.
Um erro é lançado com um código e uma descrição, desencadeando um diálogo de erro.
throw(1; "Isto é um erro")
Neste outro exemplo, foi configurado um método ON ERR CALL e o erro lançado pode ser obtido com o comando Last errors.
ON ERR CALL("handleErrors")
throw (1; "Isto é um erro")
O comando throw em pormenor
Este novo comando pode ser chamado de diferentes formas, de acordo com as suas necessidades.
Lançar erros predefinidos.
Pode levantar erros predefinidos configurados nos ficheiros XLF do seu projeto. Para isso, passe um objeto como parâmetro para o comando throw. Este objeto deve conter as propriedades:
- componentSignature: o código do componente que gera o erro
- errCode: o código do erro
Uma mensagem de erro que corresponda ao nome de recurso ERR_componentSignature_errCode é procurada nos ficheiros XLF do seu projeto e o erro é lançado.
A mensagem de erro pode utilizar valores dinâmicos de marcadores de posição. No seu ficheiro XLF, especifique o nome do marcador de posição entre parênteses {}. Depois, no objeto de erro, adicione uma propriedade cujo nome é o nome do marcador de posição e forneça o seu valor.
Exemplo:
var $file : 4D.File
ON ERR CALL("handleError")
$file:=File("/PROJECT/HDI file")
If (Not($file.exists))
throw({componentSignature: "HDI1"; errCode: 1; name: "HDI file"; path: "/Project"})
End if
Aqui está uma amostra do ficheiro Errors.xlf traduzido para francês:
<trans-unit id="1" resname="ERR_HDI1_1">
<source>The file "{name}" is not found in {path}.</source>
<target>Le fichier "{name}" est introuvable dans {path}.</target>
</trans-unit>
O método ON ERR CALL pode prosseguir com o erro:
Utilizar o modo diferido
A utilização da propriedade booleana deferred no parâmetro do objeto permite-lhe empilhar os erros lançados e proceder globalmente com eles mais tarde. No método abaixo, o método ON ERR CALL é chamado no final da execução do método atual. Prossegue com os erros empilhados devolvidos pelo comando Last errors.
var $file : 4D.File
ON ERR CALL("handleError")
$file:=File("/PROJECT/HDI file")
If (Not($file.exists))
throw({componentSignature: "HDI1"; errCode: 1; name: "HDI file"; path: "/Project"; deferred: True})
throw({componentSignature: "HDI1"; errCode: 2; name: "HDI file"; path: "/Project"; deferred: True})
End if
Aqui está uma amostra do ficheiro Errors.xlf traduzido para francês:
<trans-unit id="1" resname="ERR_HDI1_1">
<source>The file "{name}" is not found in {path}.</source>
<target>Le fichier "{name}" est introuvable dans {path}.</target>
</trans-unit>
<trans-unit id="2" resname="ERR_HDI1_2">
<source>Try another file name</source>
<target>Essayez avec un autre fichier</target>
</trans-unit>
O método handleErrors é chamado uma vez e pode obter os erros empilhados graças ao comando Last errors:
Uma variação do modo diferido é chamar o comando throw sem parâmetros. Isto é útil num método ON ERR CALL.
Empilha os erros actuais até o método atual terminar. Em seguida, o método ON ERR CALL é chamado para prosseguir com os erros empilhados.
Encontrará isto no exemplo concreto HDI.
Descarregue o HDI para saber mais sobre como os erros podem ser tratados para fornecer feedback adequado ao utilizador.