Le guide Oracle Forms 9i/10g


précédentsommairesuivant

XXXIV. Les différents statuts de la forme et variables système

Forms maintient en permanence des variables système qui indiquent le statut courant de la forme.

Dans la forme en cours

:SYSTEM.FORM_STATUS qui peut prendre trois valeurs:

  • CHANGED indique que la forme contient au moins un bloc dont au moins un enregistrement a été modifié
  • NEW indique que la forme ne contient que de nouveaux enregistrements
  • QUERY indique qu'un query est ouvert et qu'aucun bloc ne contient d'enregistrement modifé

Cette variable peut être consultée pour savoir si la forme nécessite un enregistrement

 
Sélectionnez

-- Données à enregistrer ? --
If :SYSTEM.FORM_STATUS = 'CHANGED' Then
   Commit_Form ;
End if ;


Dans le bloc en cours

:SYSTEM.BLOCK_STATUS qui peut prendre trois valeurs:

  • CHANGED indique que le bloc contient au moins un enregistrement modifié
  • NEW indique que le bloc ne contient que de nouveaux enregistrements
  • QUERY indique que le bloc ne contient que des enregistrements valides

Cette variable peut être consultée pour savoir si les données d'un bloc ont été modifiées

 
Sélectionnez

-- Données à enregistrer ? --
If :SYSTEM.BLOCK_STATUS = 'CHANGED' Then
   Commit_Form ;
End if ;


Dans l'enregistrement en cours

:SYSTEM.RECORD_STATUS qui peut prendre quatre valeurs:

  • CHANGED indique que l'enregistrement est modifié
  • INSERT indique que la présence d'un nouvel enregistrement (non présent en base)
  • NEW indique qu'un nouvel enregistrement est créé (il ne contient alors aucune valeur)
  • QUERY indique que l'enregistrement est valide (non modifié)

Cette variable peut être consultée pour savoir si l'enregistrement en cours peut être effacé

 
Sélectionnez

-- Enregistrement modifié ? --
If :SYSTEM.RECORD_STATUS In ('CHANGED','INSERT') Then
   Commit_Form ;
End if ;   
Clear_Record ;


Dans quel mode se trouve la forme ?

A tout moment l'on peut interroger le mode en cours en interrogeant la variable:
:SYSTEM.MODE qui peut prendre trois valeurs:

  • NORMAL indique que la forme est en mode normal (saisie)
  • ENTER-QUERY indique que la forme est en mode interrogation
  • QUERY indique que la forme est en train d'exécuter un query

L'exemple suivant démontre comment afficher une LOV dans le champ :EMP.EMPNO lors d'une interrogation

When-New-Item-Instance (niveau bloc)
Sélectionnez

If :SYSTEM.CURSOR_ITEM = 'EMP.EMPNO'
And :SYSTEM.MODE = 'ENTER-QUERY' Then
   Show_Lov( 'LOV_EMP' ) ;
End if ;



Les variables associées aux déclencheurs

:SYSTEM.TRIGGER_BLOCK indique le nom du bloc dans lequel un trigger a été déclenché
Cette valeur est NULL si le déclenchement provient de PRE-FORM ou POST-FORM.
Cette variable peut être utilisée dans un déclencheur de niveau forme pour savoir de quel bloc provient le déclenchement

When-New-Block-Instance (niveau forme)
Sélectionnez

Declare
  LC$Bloc  Varchar2(30) := :System.trigger_Block ;
Begin
  If LC$Bloc = 'EMP' Then
     ...
  Elsif LC$Bloc = 'DEPT' Then
     ...
  End if ;
End ;

:SYSTEM.TRIGGER_ITEM indique le nom de l'item dans lequel le trigger vient d'être déclenché
Lors de la navigation, lorsqu'aucun item n'a le focus (PRE/POST RECORD, BLOCK, FORM) cette valeur est NULL

When-New-Item-Instance (niveau forme)
Sélectionnez

Declare
  LC$Item  Varchar2(61) := :System.trigger_Item ;
Begin
  If LC$Item = 'EMP.EMPNO' Then
     ...
  Elsif LC$Item = 'DEPT.DEPTNO' Then
     ...
  End if ;
End ;

Item de type Tree (Arborescence)

:SYSTEM.TRIGGER_NODE_SELECTED, valorisé uniquement lors du déclenchement de When-Tree-Node-Selected, indique si le nœud de l'arbre est sélectionné (TRUE) ou déselectionné (FALSE).

:SYSTEM.TRIGGER_NODE indique le nom du nœud sélectionné dans un arbre (Tree)

Relation Maître-détail

:SYSTEM.COORDINATION_OPERATION indique l'opération de coordination liée à la relation
:SYSTEM.MASTER_BLOCK indique le nom du bloc maître de la relation


Variables de localisation

:SYSTEM.CURSOR_BLOCK indique le nom du bloc où se situe le curseur
:SYSTEM.CURSOR_ITEM indique le nom de l'item où se situe le curseur

 
Sélectionnez

Declare
   LC$Item  Varchar2(61) := :System.Cursor_Item ;
Begin
   If LC$Item = 'EMP.EMPNO' Then
      ...
   End if ;
End ;

:SYSTEM.CURSOR_RECORD indique le numéro de l'enregistrement où se situe le curseur

 
Sélectionnez

Message( 'Modification de l''enregistrement  : ' || :System.Cursor_Record ) ;


Valeur de l'item (Varchar2) en cours

:SYSTEM.CURSOR_VALUE indique la valeur de l'item en cours

 
Sélectionnez

If :System.Cursor_Value = '50' Then
   ...
End if ;

Si aucun item n'a le focus, cette valeur est NULL

Synchronisation avec la date de la base

:SYSTEM.DATE_THRESHOLD représente l'intervale de temp (MI:SS) au bout duquel Forms synchronise ses variables dates internes avec celle de la base.
Les dates internes sont celles correspondant aux variables $$DBDATE$$, $$DBDATETIME$$ et $$DBTIME$$
La valeur par défaut est : 01:00 (une minute)

 
Sélectionnez

-- Synchronisation avec la date de la base toutes les 30 secondes --
:System.Date_Threshold := '00:30' ;

:SYSTEM.EFFECTIVE_DATE représente la date système de la base au format : DD-MON-YYYY HH24:MI:SS
Cette variable peut être utilisée pour simuler une action dans le passé ou le futur

 
Sélectionnez

-- Test de la forme à une date dans le futur --
:System.Effective_Date := '01-DEC-2010 14:00:00' ;


Evènements sur les fenêtres

:SYSTEM.EVENT_WINDOW indique le nom de la fenêtre pour laquelle l'un des déclencheurs suivants s'est activé:

  • WHEN-WINDOW-ACTIVATED
  • WHEN-WINDOW-CLOSED
  • WHEN-WINDOW-DEACTIVATED
  • WHEN-WINDOW-RESIZED


Variables liées à la souris

:SYSTEM.MOUSE_BUTTON_MODIFIERS indique la touche clavier enfoncé lors du click

  • Shift+
  • Caps Lock+
  • Control+
  • Alt+
  • Command+
  • Super+
  • Hyper+

:SYSTEM.MOUSE_BUTTON_PRESSED indique le numéro du bouton utilisé

 
Sélectionnez

Declare
  LN$Btn  Varchar2(1) := :System.Mouse_Button_Pressed ;
Begin
  If LN$Btn = '1' Then
     Message('Bouton gauche' );
  ElsIf LN$Btn = '2' Then
     Message('Bouton milieu' );
  Else
     Message('Bouton droit' );  
  End if ;
End ;

:SYSTEM.MOUSE_BUTTON_SHIFT_STATE indique la touche clavier activée pendant le clic

  • Shift+ touche Majuscule enfoncée
  • Ctrl+ touche Contrôle enfoncée
  • Alt+ touche alt enfoncée
  • Shift+Ctrl+ touches Majuscule + Contrôle enfoncées

:SYSTEM.MOUSE_CANVAS indique le nom du canevas sur lequel se trouve le pointeur de souris
:SYSTEM.MOUSE_FORM indique le nom de la forme sur laquelle se trouve le pointeur de souris
:SYSTEM.MOUSE_ITEM indique le nom de l'item sur lequel se trouve le pointeur de souris
:SYSTEM.MOUSE_RECORD_OFFSET représente le déplacement par rapport au premier enregistrement visible
:SYSTEM.MOUSE_RECORD indique le numéro de l'enregistrement dans lequel se trouve le pointeur de souris
:SYSTEM.MOUSE_X_POS indique la position horizontale de la souris en pixels
:SYSTEM.MOUSE_Y_POS indique la position verticale de la souris en pixels


Autres variables

:SYSTEM.LAST_FORM représente l'identifiant de la forme précédente (dans une application multi formes)

 
Sélectionnez

-- Fermeture de la forme précédente --
Declare
  LN$Id  FORMMODULE ;
Begin
  LN$Id.ID := To_Number( :System.Last_Form ) ;
  Close_Form( LN$Id ) ;
End ;

:SYSTEM.LAST_RECORD indique s'il s'agit du dernier enregistrement du bloc

 
Sélectionnez

-- Boucle sur les enregistrements du bloc --
Begin
   First_Record ;
   Loop
      Exit when :System.last_Record = 'TRUE' ;
      ...
      Next_Record ;
   End loop ;
End ;       

:SYSTEM.LAST_QUERY retourne l'ordre SELECT correspondant au dernier FETCH exécuté lors du query d'un bloc


:SYSTEM.MESSAGE_LEVEL indique le niveau d'affichage des messages de Forms. La valeur peut être:

  • 0 (défaut)
  • 5
  • 10
  • 15
  • 20
  • 25

Au cours de la session, Forms supprime l'affichage des erreurs dont le niveau de gravité est inférieur ou égal à cette valeur.
En effet, à chaque erreur Forms est associé un niveau de gravité.
Pour ne pas afficher ces messages, positionnez la variable :System.Message_Level au niveau voulu

 
Sélectionnez

Declare
  LN$MsgNum Pls_Integer := :System.Message_Level ;
Begin
  :System.Message_Level := 5 ;
  Commit_Form ;
  :System.Message_Level := LN$MsgNum ;
End ;


:SYSTEM.SUPPRESS_WORKING permet d'afficher ou masquer le message : « Working… »

 
Sélectionnez

-- Supression du message --
:System.Suppres_Working := 'TRUE' ;
Go_block( 'EMP' ) ;
Execute_Query ;
Go_block( 'DEPT' ) ;
Execute_Query ;
...
:System.Suppres_Working := 'FALSE' ;

:SYSTEM.TAB_NEW_PAGE indique le nom de l'onglet vers lequel on se dirige
:SYSTEM.TAB_PREVIOUS_PAGE indique le nom de l'onglet d'où l'on vient


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.