DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des Exceptions
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Mécanisme des exceptions générales
Présentation
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.
AndroidWidget AndroidJava Remarque :
  • Le mécanisme des exceptions générales n'est pas disponible. Seules les exceptions spécifiques (QUAND EXCEPTION DANS) sont disponibles. Pour plus de détails, consultez Gestion des exceptions spécifiques.
  • Il est également possible d'utiliser la fonction ExceptionChangeParamètre avec la constante epExécuteProcédureGénérale dans l'événement "Initialisation" du projet.
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 :
// Code d'initialisation du projet
QUAND EXCEPTION
// On arrête l'application
FinProgramme()
FIN
// Procédure globale ValeurChamp
// Renvoie la valeur du champ ou "" si le champ n'existe pas
PROCÉDURE ValeurChamp(NomChamp)
QUAND EXCEPTION
// Pour l'erreur de code ChampInconnu, on renvoie ""
SI ExceptionInfo(errCode) = ChampInconnu ALORS RENVOYER ""
// Pour une autre erreur, on appelle le gestionnaire d'erreur du projet
EXCEPTION
FIN
Remarques générales

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.
WINDEVWINDEV Mobile Par exemple : Un traitement d'exception générale a été déclaré au niveau de la fenêtre et au niveau du projet.
Une première erreur de programmation survient dans la fenêtre. Cette erreur est traitée par le traitement d'exception de la fenêtre.
Une seconde erreur survient dans la fenêtre. Cette erreur est traitée par le traitement d'exception du projet.
WEBDEV - Code Serveur Par exemple : Un traitement d'exception générale a été déclaré au niveau de la page et au niveau du projet.
Une première erreur de programmation survient dans la page. Cette erreur est traitée par le traitement d'exception de la page.
Une seconde erreur survient dans la page. Cette erreur est traitée par le traitement d'exception du projet.

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é.
// Traitement d'exception
QUAND EXCEPTION
// Traitement Ã  effectuer en cas d'exception
Trace("Erreur")
FIN
// Erreur de programmation : le champ Champ1 n'existe pas
{"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.
    WEBDEV - Code Serveur Cette fonctionnalité n'est pas disponible.
  • Soit d'utiliser la fonction FinProgramme pour fermer l'application.
Cas particulier
Un traitement d'exception générale ne peut pas être déclaré dans les instructions composées de type :
  • POUR
  • BOUCLE
  • TANTQUE
Dans ce type d'instruction, utilisez le traitement d'exception spécifique.

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 :
ExceptionActiveRé-active le traitement d'exception en cours si l'exception a pu être corrigée.
ExceptionAfficheAffiche la fenêtre standard des exceptions avec le contenu de l'exception courante.
ExceptionDéclencheDéclenche artificiellement le mécanisme de sécurité de WLangage en provoquant une exception.
ExceptionInfoRécupère des informations sur l'exception en cours.
ExceptionPropagePropage une exception.
ExceptionRestaureParamètreRétablit le traitement d'exception d'un traitement.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 03/07/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale