Le guide Oracle Forms 9i/10g


précédentsommairesuivant

XXX. Enregistrement et annulation

XXX-A. 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.

XXX-B. 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.

XXX-C. Mise en œuvre

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
Sélectionnez

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()
Sélectionnez

Exit_Form( NO_VALIDATE, FULL_ROLLBACK ) ;

ou

Exit_Form()
Sélectionnez

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()

 
Sélectionnez

Forms_ddl( 'rollback' ) ;

ou

 
Sélectionnez

Rollback [ TO SAVEPOINT nom_save_point ] ;
Rollback
Sélectionnez

-- insertion ligne 1 --
insert into la_table values( ... ) ;
-- pose d'un point de sauvegarde --
savepoint point1 ;
-- insertion ligne 2 --
insert into la_table values( ... ) ;
-- annulation ligne 2 seulement --
rollback to savepoint point1;
-- seule, la ligne 1 est validée --
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.

XXX-D. Conseil pratiques

Afin de ne pas lancer inutilement la procédure de validation, il convient de tester le statut de la forme

 
Sélectionnez

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 ;


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2005 SheikYerbouti. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.