Le guide Oracle Forms 9i/10g
Date de publication : Juin 2005
Enregistrement et annulation
Définition
Concept
Mise en oeuvre
Conseil pratiques
Enregistrement et annulation
Définition
L'utilisateur d'une application Forms doit pouvoir valider ou annuler les modifications faites.
Dans certains cas, le développeur peut également forcer la validation ou l'annulation de tout ou partie des modifications.
Concept
La validation des modifications est exécutée dans une application Forms avec la fonction Commit_Form().
Celle-ci lance toutes les procédures de validation au niveau de la forme puis génère, pour chaque bloc basé dont le statut est CHANGED, les ordres d'insertion, de mise à jour et de suppression en base. (la validation des blocs se fait dans l'ordre ou ils ont été créés lors de la conception).
Enfin un commit est effectué en base.
Tous les verrous posés sont alors libérés et tous les statuts de niveau enregistrement, bloc et forme sont alors positionnés à QUERY.
Remarque:
Les modifications apportées aux enregistrements pendant la phase de validation ne sont pas prises en compte.
Mise en oeuvre
Validation
La validation des modification apportées dans la session s'effectue avec la fonction Commit_Form() qui est une procédure restreinte.
Le mot clé : commit codé dans un bloc PL/SQL est interprété par Forms comme étant un Commit_Form.
Si, après Commit_Form, le statut de la forme est différent de QUERY, alors une erreur a empêché la validation complète des modifications.
Commit_Form Commit_form ;
IF :System.Form_Status <> 'QUERY' THEN
Message('Erreur de validation. Les modifications ne sont pas enregistrées !', acknowledge);
RAISE Form_Trigger_Failure;
END IF;
Annulation
L'annulation des modifications apportées dans la session peut être réalisée de plusieurs façons
- En quittant la forme avec la fonction Exit_Form()
Exit_Form() Exit_Form( NO_VALIDATE, FULL_ROLLBACK ) ;
ou
Exit_Form() Clear_Form( NO_VALIDATE, FULL_ROLLBACK ) ;
Attention:
Clear_Form() remet tous les items de la forme (basés ou non) à NULL
- Sans quitter la forme avec la fonction Forms_ddl()
Forms_ddl( 'rollback' ) ;
ou
Rollback [ TO SAVEPOINT nom_save_point ] ;
Rollback
insert into la_table values( ... ) ;
savepoint point1 ;
insert into la_table values( ... ) ;
rollback to savepoint point1;
commit ;
Syntaxes de la fonction Exit_Form()
PROCEDURE EXIT_FORM;
PROCEDURE EXIT_FORM(commit_mode NUMBER);
PROCEDURE EXIT_FORM(commit_mode NUMBER, rollback_mode NUMBER);
commit_mode peut valoir:
- ASK_COMMIT (défaut) demande à l'utilisateur s'il veut enregistrer les modifications
- DO_COMMIT valide les données en base et quitte la forme
- NO_COMMIT valide la forme et la quitte sans enregistrer
- NO_VALIDATE quitte la forme sans la valider et sans enregistrer
rollback_mode peut valoir:
- TO_SAVEPOINT (défaut) annule les modifications apportées depuis le dernier point de sauvegarde
- FULL_ROLLBACK annule toutes les modifications effectuées dans la session
- NO_ROLLBACK la forme est quittée sans annulation des modifications
Exit_Form() est une procédure restreinte, utilisable en mode enter_query.
Déclencheurs liés à la phase de validation/annulation
KEY-COMMIT se déclenche lors de la demande utilisateur d'enregistrement
PRE-COMMIT se déclenche après la phase de validation de la forme mais avant de générer les ordres du DML.
ON-COMMIT se déclenche après que les ordres du DML aient été effectués mais juste avant le commit définitif en base.
Dans ce déclencheur, vous devez ajouter l'instruction commit_form() pour que les données soient validées en base.
ON-SAVEPOINT se déclenche lorsque Forms doit placer un point de sauvegarde.
Par défaut, Forms place un savepoint au chargement de la forme, et avant chaque instruction Post() ou Commit().
Pour effectuer le traitement standard de Forms dans ce déclencheur, ajoutez l'instruction : Issue_Savepoint().
ON-ROLLBACK se déclenche lorsque Forms doit effectuer un rollback.
Pour effectuer le traitement standard de Forms dans ce déclencheur, ajoutez l'instruction : Issue_Savepoint().
Le prochain point de sauvegarde de la forme est interrogeable via l'instruction : Get_Application_Property(SAVEPOINT_NAME);
Si la valeur est NULL, alors le point de sauvegarde est celui placé au chargement de la forme.
POST-FORMS-COMMIT se déclenche après les ordres d'insertion, modification, suppression mais avant que Forms ne demande le commit final en base.
POST-DATABASE-COMMIT se déclenche après l'ordre de commit de Forms mais avant le commit réel en base.
Conseil pratiques
Afin de ne pas lancer inutilement la procédure de validation, il convient de tester le statut de la forme
IF :System.Form_Status = 'CHANGED' THEN
Commit_Form;
End if ;
Attention:
Si vous codez un déclencheur ON-COMMIT pour effectuer certaines actions au moment de la validation, n'oubliez pas d'y inclure l'instruction Commit_Form.
Lorsque, en phase de développement, vous souhaitez valider les ordres d'insertion, mise à jour et suppression sans les enregistrer définitivement en base, codez un déclencheur ON-COMMIT dans lequel vous placez une unique instruction Null ;
|