Bonjour,
Dans plusieurs écrans développés sous forms 10g, j'ai identifié des scénarios où l'exception FORM_TRIGGER_FAILURE est levée mais où l'exécution continue.
J'ai constaté ce fait aussi bien à l'exécution, qu'en débug.
Voici un exemple simplifié :
KEY-COMMIT
PRE-INSERT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 COMMIT; IF FORM_SUCCESS THEN MSG_BOX('Modifications enregistrées avec succès.'); CLEAR_FORM(NO_VALIDATE); ... END IF;
Scénario : créer un enregistrement non unique et valider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 IF NOT CHECK_UNIQUE('PR0200', 'CH_NOM', :PR0200.CH_NOM, 'CH_MILL', :PR0200.CH_MILL) THEN MSG_BOX('Erreur. Cet enregistrement existe déjà.'); RAISE FORM_TRIGGER_FAILURE; END IF;
Les triggers sont alors déclenchés dans cet ordre :
1/ key-commit
2/ pre-insert
A l'exécution, il s'affiche effectivement une boîte de dialogue stipulant "Erreur. Cet enregistrement existe déjà." MAIS le contrôle n'est pas immédiatement redonné à l'utilisateur : le reste du code s'exécute dont l'affichage de la boîte de dialogue "Modifications enregistrées avec succès."
Malgré le test sur FORM_SUCCESS, l'exécution du code n'est pas stoppée par l'exception.
Quelle explication voyez-vous à ce scénario ?
Quelle solution permettrait de bloquer l'exécution du code dans ce cas ?
Merci d'avance.
Partager