Effectuez une recherche dans notre base de connaissances
TEC-35 – Cacher ou afficher des champs en fonction de la valeur d’un autre champ
Il arrive qu’il soit nécessaire de masquer des champs dans un formulaire en fonction des valeurs d’autres champs, par exemple, masquer le champ « date de fin de contrat » lorsque le champ sélecteur du type de contrat contient la valeur CDI ou masquer les champs « Véhicule de société » et « Smartphone » lorsque le champ sélecteur du type de contrat contient la valeur « Stagiaire » et le champ « Type de poste » contient la valeur « Sédentaire » et afficher le champ « Smartphone » si le champ sélecteur du type de contrat contient la valeur « Stagiaire » et le champ « Type de poste » contient la valeur « Nomade ».
Pour gérer les différentes combinaisons possibles d’affichage et de masquage de champs, Ecaldima dispose d’un mécanisme qui s’appuie sur une table de la base de données et une propriété étendue d’un ou plusieurs champs.
La table qui contient un enregistrement pour chaque valeur ou combinaison de valeurs possibles d’un ou plusieurs champs et les champs qui s’affichent ou se masquent en fonction de la valeur.
La valeur {EcaldimaAny} se substitue à n’importe quelle valeur sauf la valeur « vide ».
Pour indiquer la valeur « Vide » c’est-à-dire quand aucune information n’est sélectionnée dans un sélecteur ou dans une textebox.
Il est conseillé de donner un nom à la table qui prend en compte son périmètre. En effet, un champ pourra se comporter de manière différente suivant qu’il est dans un service ou un autre, dans un article ou un autre.
Nom de la table
Utiliser une règle de nommage pour les tables d’affichage et masquage de champs permet de les retrouver plus facilement et d’en apprécier la portée d’une simple lecture.
La structure du nom peut être la suivante :
<CLIENT>_t_SHOWHIDE_<Numéro de service (Id)>_<Numéro d’article (Id)>_<Numéro du champ (Id) qui conditionne l’affichage des autres>
Par exemple, pour le champ 100 de l’article 10 du service 1 chez le client KNS, ou aurait comme nom de table :
KNS_t_SHOWHIDE_1_10_100
Autre exemple, pour le champ 200 du service 2 sans tenir compte d’un article chez le client ALD, on aurait comme nom de table :
ALD_t_SHOWHIDE_2_0_200
Autre exemple, pour le champ 300 de l’article 30 sans tenir compte du service chez le client SEPRO, on aurait comme nom de table :
SEPRO_t_SHOWHIDE_0_30_300
Enfin, pour plusieurs champs du service 40 chez le client CFL et quel que soit l’article, on aurait comme nom de table :
CFL_t_SHOWHIDE_40_0_0
Cette convention de nommage n’a pas de vocation technique, elle permet simplement d’apprécier la portée d’une table en voyant son nom.
Structure de la table
La structure de la table doit respecter les conditions suivantes :
- Les premiers champs sont les valeurs à comparer et doivent se nommer FIELD_<numéro du champ> et être de type nvarchar d’une taille suffisante pour contenir la valeur possible
- Les autres sont les comportements, affichage ou masquage et doivent se nommer SHOW_<numéro du champ> et être de type bit
La lecture de la table s’effectue dans l’ordre alphanumérique des champs FIELD combinés tels que dans la structure de la table. Si la table comporte deux champ FIELD, le tri s’effectuera sur le premier puis le second indépendamment des numéros de champ. Il s’agit de l’instruction « ORDER BY » du SQL qui applique donc ORDER BY <Premier champ Field>, <Second champ FIELD>…
Dès qu’une ligne qui correspond aux conditions est trouvée, elle s’applique et la recherche s’arrête là.
Exemples
Le service concerné est le service « Nouvel arrivant » dont le numéro est le 5. Le client est la société ABCD.
Nom du champ | Nº du champ (Id) |
Type de contrat | 100 |
Date de fin de contrat | 200 |
Véhicule de société | 300 |
Smartphone | 301 |
Type de poste | 400 |
Cas nº 1 – Masquer la date de fin de contrat si le champ « Type de contrat » contient CDI
Structure de la table ABCD_t_SHOWHIDE_21_0_100
FIELD_100 | SHOW_200 |
CDI | 0 |
{EcaldimaAny} | 1 |
SQL
CREATE TABLE dbo.[ ABCD_t_SHOWHIDE_21_0_100] (_Id int IDENTITY(1,1),FIELD_100 nvarchar(50), SHOW_200 bit)
INSERT dbo. ABCD_t_SHOWHIDE_21_0_100(Field_100, SHOW_200) VALUES (‘CDI’,0)
INSERT dbo. ABCD_t_SHOWHIDE_21_0_100(Field_100, SHOW_200) VALUES (‘{EcaldimaAny}’,1)
Cas nº 2 – En plus du cas nº 1, Il faut masquer le champ « Véhicule de fonction » si le type de contrat est « Stagiaire » et masquer le champ « Smartphone » si le type de poste est « Sédentaire ».
Structure de la table ABCD_t_SHOWHIDE_21_0_0
FIELD_100 | FIELD_400 | SHOW_200 | SHOW_300 | SHOW_301 |
CDI | {EcaldimaAny} | 0 | 1 | 1 |
Stagiaire | Sédentaire | 1 | 0 | 0 |
Stagiaire | Nomade | 1 | 0 | 1 |
{EcaldimaAny} | {EcaldimaAny} | 1 | 1 | 1 |
SQL
CREATE TABLE dbo.[ ABCD_T_SHOWHIDE_21_0_0] (_Id int identity(1,1),FIELD_100 nvarchar(50), FIELD_400 nvarchar(50), SHOW_200 bit, SHOW_300 bit, SHOW_301 bit)
INSERT dbo. ABCD_T_SHOWHIDE_21_0_100(Field_100, Field_400, SHOW_200, SHOW_300, SHOW_301) VALUES (‘CDI’, ‘{EcaldimaAny}’,0,1,1)
INSERT dbo. ABCD_T_SHOWHIDE_21_0_100(Field_100, Field_400, SHOW_200, SHOW_300, SHOW_301) VALUES (‘Stagiaire’,’ Sédentaire’,0,1,1)
INSERT dbo. ABCD_T_SHOWHIDE_21_0_100(Field_100, Field_400, SHOW_200, SHOW_300, SHOW_301) VALUES (‘Stagiaire, ‘Nomade’,0,1,1)
INSERT dbo. ABCD_T_SHOWHIDE_21_0_100(Field_100, Field_400, SHOW_200, SHOW_300, SHOW_301) VALUES (‘{EcaldimaAny}’, ‘{EcaldimaAny}’,1,1,1)
Utilisation de la table
Afin d’utiliser la table d’affichage et masquage, il est nécessaire de l’indiquer dans chaque champ qui doit interagir avec l’affichage. Dans nos exemples précédents, on le ferait sur les champs 100 et 400.
Pour ce faire, il faut ajouter le propriété étendue USESHOWHIDETABLE sur chacun des champs et lui donner le nom de la table comme valeur.
La partie du numéro de service dans le nom de la table peut être remplacé par {ServiceId}. De telle façon, le champ pourra aller chercher la table qui correspond au service dans lequel il est utilisé à ce moment-là.
Dans le cas nº1 la propriété étendue serait :
Nom | Valeur |
USESHOWHIDETABLE | ABCD_T_SHOWHIDE_21_0_100 |
Dans le cas nº2 la propriété étendue serait :
Nom | Valeur |
USESHOWHIDETABLE | ABCD_T_SHOWHIDE_21_0_0 |