Onintgo permet dans un traitement de déclarer une étiquette où se déroutera l'exécution du traitement sur appui de la touche d'interruption.
Onintgo [ étiquette ] [ From traitement ]
Elément | Description | Restrictions |
étiquette | Etiquette de branchement en cas d'interruption. | Aucune. |
traitement | Traitement dans lequel est définie l'étiquette (par défaut, il s'agit du traitement courant), sous l'une des formes suivantes : | Le traitement doit être accessible. |
exp_nomtrt | Expression alphanumérique dont le résultat est un nom de traitement. | Le traitement doit être accessible. |
# Sur appui de la touche d'interruption, l'exécution du traitement
# se déroute sur l'étiquette LECTURE.
# Le traitement est interruptible
Inter
# sur <INTERRUPTION>, aller en LECTURE
Onintgo LECTURE
For [LNS]CLE(1)
For [LNS]CLE
Infbox num$(ZV)
Next
Infbox num$(TOTAL)
Next
End
#
# traitement de l'interruption
LECTURE
Call VERIF From GESINTER
Resume
Onintgo permet de définir une étiquette où se déroute l'exécution d'un traitement sur appui de la touche d'interruption. Si une interruption est déclenchée après l'ordre Onintgo, la partie de traitement qui suit l'étiquette est exécutée.
Dans le traitement de l'interruption, la fonction errl contient le numéro de ligne du traitement où l'interruption a été déclenchée.
Un traitement d'interruption se termine soit par Resume, soit par End. Dans le premier cas, l'exécution du traitement interrompu reprendra à l'instruction suivant celle où s'est produit l'interruption. Dans le deuxième cas, le traitement est interrompu de façon définitive.
L'interruption se déclenche à condition :
On peut définir l'étiquette appelée par Onintgo dans un autre traitement que le traitement courant. Il faut alors en préciser le nom dans l'instruction Onintgo. Ce mécanisme permet de se constituer des traitements généraux de gestion des interruptions.
Onintgo sans étiquette supprime la référence à une étiquette en cas d'interruption; par la suite, tout déroutement devient impossible.
Une déclaration Onintgo reste valide tant que l'on ne quitte pas le traitement.
Dès qu'une gestion des interruptions est faite dans un traitement, elle agit aussi dans chaque sous-programme appelé par Call. Cependant, si un sous-programme ne comporte pas d'Onintgo, et qu'une interruption est déclenchée lors de son exécution, le sous-programme va s'arrêter, et le traitement appelant traiter l'interruption. Si l'instruction Resume termine le traitement de gestion d'erreur, son exécution relancera les instructions du traitement appelant, celles du sous-programme placées après la dernière exécutée étant alors ignorées (dans le cas d'un End, l'arrêt du traitement sera définitif). Il est donc impératif d'utiliser Onintgo dans un sous-programme appelé par Call pour y gérer les interruptions spécifiques (on peut aussi rendre le sous-programme ininterruptible).
Le traitement de gestion d'interruption ne peut en aucun cas terminer une transaction, que ce soit par Commit ou par Rollback, car il ne peut être du même niveau de localité que le traitement qui l'a initié.
S'il y a une transaction en cours au moment où l'interruption est confirmée, elle est annulée automatiquement si le traitement se termine par End. L'utilisateur en sera averti.