Gestão de erros melhorada em código 4D

Tradução automática de Deepl

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.

HDI_THROW_ERRORS

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")

blank

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 &quot;{name}&quot; is not found in {path}.</source>
<target>Le fichier &quot;{name}&quot; est introuvable dans {path}.</target>
</trans-unit>

O método ON ERR CALL pode prosseguir com o erro:

blank

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 &quot;{name}&quot; is not found in {path}.</source>
<target>Le fichier &quot;{name}&quot; 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:

blank

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.

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.