Gestion améliorée des erreurs dans le code 4D

Traduit automatiquement de Deepl

Lancer des erreurs dans votre code 4D est désormais possible à partir de la version 20R2.

Ces erreurs se comportent comme n’importe quelle erreur 4D : elles déclenchent un dialogue d’erreur ou peuvent être traitées dans une méthode ON ERR CALL.

Cette fonctionnalité vous facilitera la vie car vous serez en mesure d’améliorer la qualité de votre code en détectant les erreurs de manière proactive dès qu’elles se produisent. Vous pourrez également améliorer la journalisation des erreurs.

Avant d’entrer dans les détails, il est important de noter que cette fonctionnalité est la première étape vers une gestion robuste des erreurs.

Maintenant, entrons dans les détails !

Cette fonctionnalité repose sur une nouvelle commande throw. Cette commande peut être utilisée de différentes manières, détaillées ci-dessous et dans le HDI.

HDI_THROW_ERRORS

Comment lancer et gérer les erreurs

Les erreurs déclenchées par la commande throw se comportent comme n’importe quelle autre erreur 4D. Aucune méthode ON ERR CALL n’a été mise en place dans l’exemple ci-dessous.

Une erreur est générée avec un code et une description, ce qui déclenche une boîte de dialogue d’erreur.

throw(1 ; "This is an error")

Dans cet autre exemple, une méthode ON ERR CALL a été mise en place, et l’erreur générée peut être obtenue à l’aide de la commande Last errors.

ON ERR CALL("handleErrors")
throw (1 ; "This is an error")

 

blank

 

La commande throw en détail

Cette nouvelle commande peut être appelée de différentes manières en fonction de vos besoins.

Lancer des erreurs prédéfinies.

Vous pouvez lever des erreurs prédéfinies dans les fichiers XLF de votre projet. Pour cela, passez un objet en paramètre de la commande throw. Cet objet doit contenir les propriétés suivantes

  • componentSignature: le code du composant qui lève l’erreur
  • errCode: le code de l’erreur

 

Un message d’erreur correspondant au nom ERR_componentSignature_errCode est recherché dans les fichiers XLF de votre projet, et l’erreur est levée.

Le message d’erreur peut utiliser des valeurs de remplacement dynamiques. Dans votre fichier XLF, spécifiez le nom de l’espace réservé entre accolades {}. Ensuite, dans l’objet d’erreur, ajoutez une propriété dont le nom est le nom de l’espace réservé et fournissez sa valeur.

Exemple :

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 

Voici un exemple du fichier Errors.xlf traduit en français :

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

La méthode ON ERR CALL peut traiter l’erreur :

blank

 

Utiliser le mode différé

L’utilisation de la propriété booléenne deferred dans le paramètre de l’objet permet d’empiler les erreurs lancées et de les traiter globalement plus tard. Dans la méthode ci-dessous, la méthode ON ERR CALL est appelée à la fin de l’exécution de la méthode en cours. Elle traite les erreurs empilées renvoyées par la commande 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 

Voici un exemple du fichier Errors.xlf traduit en français :

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

La méthode handleErrors est appelée une fois et peut obtenir les erreurs empilées grâce à la commande Last errors:

blank

Une variante du mode différé consiste à appeler la commande throw sans paramètres. Ceci est utile dans une méthode ON ERR CALL.

Elle empile les erreurs actuelles jusqu’à la fin de la méthode en cours. Ensuite, la méthode ON ERR CALLL est appelée pour traiter les erreurs empilées.

Vous trouverez cette méthode dans l’exemple concret du HDI.

Téléchargez le HDI pour en savoir plus sur la manière dont les erreurs peuvent être gérées afin de fournir un retour d’information approprié à l’utilisateur.

 

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.