|
|
|
|
|
- Présentation
- Déclaration de plusieurs traitements d'exceptions générales
- Déclaration des traitements d'exceptions générales dans un même traitement
- Déclaration de traitements d'exception dans des traitements différents
- Imbrication de traitements d'exception dans des traitements différents : gérer l'exception par un niveau supérieur
- Remarques générales
- Un traitement d'exception ne peut être utilisé qu'une seule fois
- Qualité du code WLangage du traitement de l'exception
- Qualité du code suivant un traitement d'exception
- Cas particulier
- Traitement d'exception et composant
- Traitement d'exception et threads
- Fonctions de gestion des exceptions générales
Mécanisme des exceptions générales
Un traitement d'exception général est disponible pour l'ensemble des composants de l'objet auquel il est associé. Ce traitement d'exception sera utilisable tant que l'objet est disponible. Un traitement d'exception général peut être déclaré dans n'importe quel traitement. Après l'exécution d'un traitement d'exception, le code WLangage suivant le traitement est exécuté. Quelques exemples : - Si le traitement d'exception est déclaré dans le code d'initialisation du projet, il est valide pour toute erreur se produisant dans le projet.
- Si le traitement d'exception est déclaré dans le code de déclaration des globales d'une fenêtre, d'une page (ou d'un état), il est valide pour toute erreur survenant dans la fenêtre, la page, un champ de la fenêtre, de la page ou une procédure locale à la fenêtre, ou à la page. Ce traitement d'exception n'est plus valide à la fermeture de la fenêtre ou de la page.
- Si le traitement d'exception est déclaré dans un traitement quelconque, il est valide pour toute erreur se produisant dans ce traitement. Ce traitement d'exception ne sera plus valide une fois le traitement terminé. Ainsi, un traitement d'exception déclaré dans un code de clic d'un bouton ne sera valide que dans ce traitement et dans toutes les procédures appelées à partir de ce traitement.
Déclaration de plusieurs traitements d'exceptions générales Déclaration des traitements d'exceptions générales dans un même traitement Le second traitement d'exception remplacera le premier traitement d'exception à partir de la déclaration du second traitement d'exception. Exemple : Dans la procédure Exemple, si une erreur survient : - Dans le <Code1> : aucune gestion des exceptions n'est active sauf si une procédure d'exception a été définie dans le code appelant (dans la fenêtre en cours ou dans la page en cours ou dans le projet).
- Dans le <Code 2> : le traitement des exceptions actif est <Traitement Exception 1>.
- Dans le <Code 3> : le traitement des exceptions actif est <Traitement Exception 2>.
PROCEDURE Exemple() <"Code 1"> QUAND EXCEPTION <Traitement exception 1> FIN <"Code 2"> QUAND EXCEPTION <Traitement exception 2> FIN <"Code 3"> Déclaration de traitements d'exception dans des traitements différents Si des traitements d'exception sont déclarés dans des objets imbriqués (par exemple projet et fenêtre, projet et page, fenêtre et champ ou page et champ), le traitement d'exception du plus petit objet masque le traitement d'exception principal pendant la durée de vie de cet objet. Exemple : Si les deux traitements d'exception suivants sont déclarés : - traitement d'exception A déclaré dans le code d'initialisation d'un projet,
- traitement d'exception B déclaré dans le code de déclaration des globales d'une fenêtre ou d'une page.
Pour toutes les erreurs rencontrées dans la fenêtre ou dans la page, le traitement d'exception B sera utilisé et masquera le traitement d'exception A. Imbrication de traitements d'exception dans des traitements différents : gérer l'exception par un niveau supérieur Si des traitements d'exception sont déclarés dans des objets imbriqués (par exemple projet et fenêtre, projet et page, fenêtre et champ ou page et champ), il est possible de gérer l'erreur dans le traitement d'exception du niveau supérieur. Il suffit d'utiliser le mot-clé EXCEPTION dans le traitement d'exception. Exemple :
QUAND EXCEPTION
FinProgramme()
FIN
PROCÉDURE ValeurChamp(NomChamp)
QUAND EXCEPTION
SI ExceptionInfo(errCode) = ChampInconnu ALORS RENVOYER ""
EXCEPTION
FIN
Un traitement d'exception ne peut être utilisé qu'une seule fois Un traitement d'exception ne peut être utilisé qu'une seule fois. Si une seconde exception survient, le traitement d'exception ne sera pas exécuté. Si un traitement d'exception d'un niveau supérieur existe, ce traitement d'exception sera exécuté. Pour réactiver un traitement d'exception après utilisation, utilisez la fonction ExceptionActive. Attention : cette fonction doit être manipulée avec précaution. Qualité du code WLangage du traitement de l'exception Il n'est pas possible de déclarer un traitement d'exception à l'intérieur d'un traitement WLangage d'exception. Il est recommandé de veiller à la qualité du code dans les traitements d'exception car toute erreur provoquera l'affichage de la fenêtre / page standard du mécanisme de sécurité du WLangage. Qualité du code suivant un traitement d'exception Après l'exécution d'un traitement d'exception, le code WLangage suivant le traitement est exécuté. Il est recommandé de veiller à la qualité de ce code (pour éviter l'affichage d'un message d'erreur). Exemple : Dans le code suivant, la ligne {"Champ1"}..Valeur = 5 déclenche le traitement d'exception. A la fin du traitement d'exception, la même ligne de code est ré-exécutée : l'exception a déjà été traitée et le mécanisme de sécurité du WLangage est déclenché.
QUAND EXCEPTION
Trace("Erreur")
FIN
{"Champ1"}..Valeur = 5
Pour éviter ce problème, il est conseillé en fin du traitement d'exception : - Soit de s'assurer que le problème est corrigé et ne se reproduira plus.
- Soit d'utiliser les mots-clé RETOUR et RENVOYER pour sortir du traitement en cours.
- Soit d'utiliser la fonction DonneFocusEtRetourUtilisateur pour rendre la main à l'utilisateur.
- Soit d'utiliser la fonction FinProgramme pour fermer l'application.
Un traitement d'exception générale ne peut pas être déclaré dans les instructions composées de type : Traitement d'exception et composant Si un traitement d'exception général est effectué à la fois dans le code d'initialisation du composant et dans le code d'initialisation du projet intégrant le composant, lorsqu'une erreur apparaîtra dans un des éléments du composant, ce sera le traitement d'exception du projet qui sera effectué. Traitement d'exception et threads Si un traitement d'exception général est effectué dans le code d'initialisation du projet, il sera déclenché si une exception survient : - dans le thread principal,
- dans un thread secondaire lancé par la fonction ThreadExécute.
Cependant, si le thread secondaire déclenche une exception, il ne sera pas possible de connaître son origine avec la fonction ExceptionInfo dans le code du projet. Pour connaître l'origine d'une exception dans un thread secondaire, il faut inclure le traitement de l'exception dans le thread secondaire. Fonctions de gestion des exceptions générales Des fonctions spécifiques à la gestion des exceptions peuvent être utilisées avec les traitements d'exceptions générales :
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|