PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • 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/iPadApple WatchUniversal Windows 10 AppWindows Mobile
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.
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
PROCEDURE 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 RepriseSaisie 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 :
Versions 09 et supérieures
ExceptionActive
Nouveauté 09
ExceptionActive
ExceptionActive
Ré-active le traitement d'exception en cours si l'exception a pu être corrigée.
Versions 16 et supérieures
ExceptionAffiche
Nouveauté 16
ExceptionAffiche
ExceptionAffiche
Affiche la fenêtre standard des exceptions avec le contenu de l'exception courante.
Versions 09 et supérieures
ExceptionDéclenche
Nouveauté 09
ExceptionDéclenche
ExceptionDéclenche
Déclenche artificiellement le mécanisme de sécurité de WLangage en provoquant une exception.
Versions 09 et supérieures
ExceptionInfo
Nouveauté 09
ExceptionInfo
ExceptionInfo
Récupère des informations sur l'exception en cours.
Versions 10 et supérieures
ExceptionPropage
Nouveauté 10
ExceptionPropage
ExceptionPropage
Propage une exception.
Versions 10 et supérieures
ExceptionRestaureParamètre
ExceptionRestaureParamètre
Rétablit le traitement d'exception d'un traitement.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Fonctionnement sous Android
Dans cet page, il faudrait indiquer clairement que le Mécanisme des exceptions générales n'est pas fonctionnel sous Android (effectivement le pictogramme est grisé, mais aucun rappel clair n'est fait comme c'est le cas dans de nombreuses autres page d'aide).
Anthony CUSUMANO
18 avr. 2016