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.
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")
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 "{name}" is not found in {path}.</source>
<target>Le fichier "{name}" est introuvable dans {path}.</target>
</trans-unit>
La méthode ON ERR CALL peut traiter l’erreur :
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 "{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>
La méthode handleErrors est appelée une fois et peut obtenir les erreurs empilées grâce à la commande Last errors:
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.