Le guide Oracle Forms 9i/10g
Date de publication : Juin 2005
Les items case à cocher
Définition
Concept
Mise en oeuvre
Techniques avancées
Les items case à cocher
Définition
Un item de ce type permet de représenter deux états différents.
L'un lorsque la boite est cochée, l'autre lorsqu'elle est décochée
A l'inverse des boutons options, les boites à cocher sont indépendantes les unes par rapport aux autres.
Concept
Ce type d'item est idéal pour représenter un choix binaire.
Soit la case est cochée et représente une valeur, soit elle ne l'est pas et représente une autre valeur. C'est typiquement le choix de type Oui/Non.
Deux propriétés de ce type d'item permettent de gérer ce choix:
- Valeur lorsque cochée indique la valeur stockée dans l'item lorsque l'utilisateur coche la case
- Valeur lorsque non cochée indique la valeur stockée dans l'item lorsque l'utilisateur décoche la case
Le type de données peut être CHAR, NUMBER ou DATE
Mise en oeuvre
Créer une Case à cocher
Depuis le navigateur d'objet:
Pointer le nud Eléments du bloc désiré puis sur le bouton 
La propriété Type d'élément doit être valorisée à Case à cocher
Depuis l'éditeur de présentation:
Sélectionner le canevas et le bloc de réception de l'item.
Cliquer l'icône 
Dessiner sur le canevas un rectangle avec la souris pour délimiter les dimensions de l'item
Propriétés spécifiques d'une case à cocher:
Libellé représente le libellé situé à droite de la case. A la différence de l'invite, le libellé est cliquable (il fait parti de la zone sensible permettant de cocher/décocher l'item).
Cette propriété peut être modifiée à l'exécution via l'instruction :
Set_Item_Property( nom_item | id_item, LABEL, libelle).
Valeur lorsque cochée représente la valeur de l'item lorsque l'utilisateur coche la case.
Cette propriété ne peut être modifiée à l'exécution.
Valeur lorsque non cochée représente la valeur de l'item lorsque l'utilisateur décoche la case.
Cette propriété ne peut être modifiée à l'exécution.
Correspondance d'autre valeur indique quel aspect (et donc quelle valeur) sera stockée dans l'item lorsque la donnée stockée ne correspond pas aux valeurs cochée et décochée:
- Non autorisé toute autre valeur est interdite et génère une erreur
- Cochée la valeur et celle correspondant à la case lorsqu'elle est cochée
- Non cochée la valeur et celle correspondant à la case lorsqu'elle est décochée
Cette propriété ne peut être modifiée à l'exécution.
Exemple:
La colonne : Actif de votre table indique si le client a passé une commande les 6 derniers mois. Cette colonne peut prendre deux valeurs : O/N
ACTIF Varchar2(1) CHECK ACTIF IN ('O', 'N')
La propriété cochée de l'item sera donc valorisé à O
La propriété non cochée sera valorisée à N
La propriété correspondance autre valeur sera valorisée à non cochée
Remarque:
Si la propriété est positionnée sur Non autorisé et que des colonnes en base ont une valeur différente de celles spécifiées, l'enregistrement n'est pas ramené en query.
Lecture de la valeur de l'item:
Pour connaître l'état de l'item il suffit d'interroger son contenu
LC$Valeur := :BLOC.ITEM_CHK_BOX ;
Changement de la valeur de l'item:
La valeur insérée doit correspondre à la valeur lorsque cochée ou non cochée
:BLOC.ITEM_CHK_BOX := 'O' ;
Indépendamment de la valeur stockée dans l'item, il est possible de savoir si la case est cochée ou non avec la fonction:
Boolean Checkbox_Checked( nom_item | id_item ) ;
Cette fonction retourne TRUE si la case est cochée sinon elle retourne FALSE.
Les déclencheurs liés aux cases à cocher:
When-Checkbox-Changed se déclenche dès que l'utilisateur coche ou décoche la case en cliquant avec la souris ou en utilisant le clavier (touche espace).
Utilisez ce déclencheur lorsque vous voulez implémenter une action lors du changement d'état de la case.
Déclencheur : When-Checkbox-Changed Begin
If :BLOCK.ITEM_CHK_BOX = 'O' Then
Message('case cochée');
Else
Message('case non cochée');
End if ;
End ;
Techniques avancées
Une case à cocher peut être utilisée, non pas pour spécifier la valeur d'une colonne d'un enregistrement, mais pour indiquer un choix exclusif entre plusieurs enregistrements.
Par exemple, dans les lignes d'une facture, vous avez la possibilité d'accorder une remise de 10% sur un et un seul article de la commande.
Chaque enregistrement du bloc contient donc une boite à cocher, mais une seule peut être cochée à la fois.
Il faut donc, à chaque fois qu'une case d'un enregistrement est cochée, décocher la case des autres enregistrements.
Partons du principe que la valeur de l'item (:BLOC.CB1) est 'O' lorsqu'il est coché et 'N' lorsqu'il ne l'est pas.
Voici comment implémenter le déclencheur : When-Checkbox-Changed attaché à l'item CB1:
Déclencheur : When-Checkbox-Changed Declare
LN$CurRec pls_integer := :system.cursor_record ;
LN$Rec pls_integer := 1 ;
Begin
If :BLOC.CB1 = 'O' Then
First_record ;
Loop
If LN$Rec <> LN$CurRec Then
:BLOC.CB1 := 'N' ;
End if ;
If :system.last_record = 'TRUE' Then
Exit ;
End if ;
Next_record ;
LN$Rec := LN$Rec + 1 ;
End loop ;
Go_Record( LN$CurRec );
End if ;
End ;
|