APPELER SUR ERREUR

4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

version 5


APPELER SUR ERREUR (méthodErreur)

ParamètreTypeDescription
méthodErreurAlphaMéthode de gestion d'erreur à appeler ou
Chaîne vide pour désinstaller la méthode

Description

APPELER SUR ERREUR installe la méthode projet dont le nom est passé dans méthodErreur comme méthode d'interception des erreurs — aussi appelée méthode de gestion des erreurs.

La portée de cette commande est le process courant. Il ne peut y avoir qu'une seule méthode de gestion des erreurs par process, mais il peut exister différentes méthodes de gestions d'erreurs pour plusieurs process.

Pour désinstaller une méthode de gestion des erreurs, appelez de nouveau APPELER SUR ERREUR et passez une chaîne vide dans méthodErreur.

Après l'installation, 4D appelle cette méthode lorsqu'une erreur se produit.

Vous pouvez identifier les erreurs en lisant la variable système Error, qui contient le code de l'erreur. Les codes d'erreurs retournés par 4D sont traités dans les sections Codes d'erreurs. Reportez-vous par exemple à la section Erreurs de syntaxe ou Erreurs de la base de données. La variable Error n'est définie qu'à l'intérieur de la méthode de gestion des erreurs ; si vous souhaitez que le code soit accessible dans la méthode ayant provoqué l'erreur, copiez la variable Error dans votre propre variable process.

La méthode de gestion des erreurs doit généralement traiter les erreurs de manière appropriée ou afficher un message d'erreur à l'utilisateur. Les erreurs peuvent être générées par :

Le moteur de base de données de 4D ; par exemple, lorsque la sauvegarde d'un enregistrement provoquerait la duplication d'une clé d'index unique.

L'environnement de 4D ; par exemple, lorsque vous n'avez pas assez de mémoire pour remplir un tableau.

Le système d'exploitation sur lequel la base est lancée ; par exemple, disque plein ou erreurs d'entrée/sortie.

La commande STOP peut être utilisée pour stopper le traitement. Si vous n'appelez pas STOP dans la méthode installée, 4D retourne à la méthode interrompue et reprend son exécution. Utilisez la commande STOP lorsque l'exécution ne peut se poursuivre.

Si une erreur se produit dans la méthode de gestion d'erreurs elle-même, 4D reprend le contrôle de la gestion des erreurs. En conséquence, assurez-vous que la méthode de gestion des erreurs installée ne puisse pas elle-même générer d'erreur. Aussi, vous ne pouvez pas utiliser la commande APPELER SUR ERREUR dans une méthode de gestion des erreurs.

APPELER SUR ERREUR est généralement placée dans la méthode base d'ouverture d'une application, afin de gérer les erreurs pour cette application. APPELER SUR ERREUR peut également être placée au début d'une méthode pour gérer les erreurs spécifiques à cette méthode.

Lorsqu'une méthode APPELER SUR ERREUR est installée, il n'est plus possible de tracer l'exécution des méthodes à l'aide de la combinaison Alt+clic (sous Windows) ou Option+clic (sous Mac OS). En effet, cette combinaison génère un code d'erreur (code 1006) qui active immédiatement la méthode d'appel sur erreur. Cependant, vous pouvez tester ce code d'erreur et appeler la commande TRACE si nécessaire.

Exemples

(1) La méthode projet suivante tente de créer un document dont le nom est reçu en paramètre et retourne 0 (zéro) ou un code d'erreur si le document n'a pas pu être créé :

      ` Méthode projet Créer doc
      ` Créer doc ( Chaîne ; Pointeur ) -> Entier long
      ` Créer doc ( NomDoc ; ->DocRef ) -> Code d'erreur résultant
   
   gError:=0
   APPELER SUR ERREUR("IO TRAITEMENT ERREURS")
   $2->:=Creer document($1)
   APPELER SUR ERREUR("")
   $0:=gError

La méthode projet IO TRAITEMENT ERREURS est la suivante :

      ` Méthode projet IO TRAITEMENT ERREURS

gError:=Error  ` Simple copie du code d'erreur dans la variable process gError

Notez l'utilisation de la variable process gError pour récupérer le code d'erreur dans la méthode en train de s'exécuter. Une fois que ces méthodes sont présentes dans votre base, vous pouvez écrire par exemple :

      ` ...
   C_HEURE(vhDocRef)
   $vlErrCode:=Créer doc($vsDocumentNom;->vhDocRef)
   Si ($vlErrCode=0)
         `...
      FERMER DOCUMENT($vlErrCode)
   Sinon
      ALERTE ("Le document n'a pas pu être créé, erreur d'E/S "+Chaîne($vlErrCode))
   Fin de si

(2) Reportez-vous à l'exemple de la section Tableaux et mémoire.

(3) Alors que vous implémentez un ensemble complexe d'opérations, vous pouvez terminer avec de multiples sous-routines qui nécessitent différentes méthodes de gestion des erreurs. Comme ne pouvez avoir qu'une seule méthode à la fois de gestion des erreurs par process, vous devez soit repérer la méthode courante à chaque fois que vous appelez APPELER SUR ERREUR, soit utiliser une variable tableau process (ici tabErrorMethod) pour "empiler" les méthodes de gestion d'erreur ainsi qu'une méthode projet (ici APPEL SUR ERR) pour les installer et les désinstaller. Le tableau doit être initialisé au tout début de l'exécution du process :

      ` N'oubliez pas d'initialiser le tableau au début
      ` de la méthode de gestion du process
   TABLEAU ALPHA(63;tabErrorMethod;0)

Voici la méthode personnalisée APPEL SUR ERR :

      ` Méthode projet APPEL SUR ERR
      ` APPEL SUR ERR { ( Chaîne ) }
      ` APPEL SUR ERR { ( Nom de la méthode ) }

   C_ALPHA(63;$1;$ErrorMethod)
   C_ENTIER LONG($vlElem)

   Si (Nombre de parametres>0)
      $ErrorMethod:=$1
   Sinon 
      $ErrorMethod:=""
   Fin de si 

   Si ($ErrorMethod#"")
      C_ENTIER LONG(gError)
      gError:=0
      $vlElem:=1+Taille tableau(tabErrorMethod)
      INSERER DANS TABLEAU(tabErrorMethod;$vlElem)
      tabErrorMethod{$vlElem}:=$1
      APPELER SUR ERREUR($1)
   Sinon 
      APPELER SUR ERREUR("")
      $vlElem:=Taille tableau(tabErrorMethod)
      Si ($vlElem>0)
         SUPPRIMER DANS TABLEAU(tabErrorMethod;$vlElem)
         Si ($vlElem>1)
            APPELER SUR ERREUR(tabErrorMethod{$vlElem-1})
         Fin de si 
      Fin de si 
   Fin de si 

Vous pouvez alors l'appeler de la manière suivante :

   gError:=0
   APPEL SUR ERR("ERREURS ES") ` Installe la méthode de gestion d'erreurs ERREURS ES
      ` ...
   APPEL SUR ERR("TOUTES ERREURS") ` Installe la méthode de gestion d'erreurs TOUTES ERREURS
      ` ...
   APPEL SUR ERR   ` Désinstalle la méthode de gestion d'erreurs TOUTES ERREURS et réinstalle ERREURS ES
      ` ...
   APPEL SUR ERR   ` Désinstalle la méthode de gestion d'erreurs ERREURS ES
      ` ...

(4) La méthode de gestion d'erreurs suivante ignore les interruptions de l'utilisateur :

      ` Méthode projet MONTRER ERREURS SEULEMENT
   Si (Error#1006)
      ALERTE ("L'erreur "+Chaine(Error)+" s'est produite.")
   Fin de si 

Référence

Methode appelee sur erreur, STOP.


4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant