Nouvelles fonctions pour am�liorer la gestion de s�lection/d�s�lection d'un champ Interrupteur par programmation
Contexte technique et fonctionnel
Lors de mes d�veloppements personnels, j'ai du manipuler le champ interrupteur, celui-ci peut �tre manipuler par programmation avec les fonctions propos�s par WinDev :
L'ensemble de ces fonctions permettent un certains nombre d'actions mais ne couvraient pas l'ensemble de mes besoins, j'ai donc cr�� de nouvelles fonctions et j'ai d�cid� de les partager pour permettre
- � la communaut� de les utiliser ;
- une �volution de celles-ci avec les �ventuelles retour.
Version de WinDev : 20 et ant�rieures
Modfication du 22/09/2015 : Une version des fonctions avec le type de variable Champ est disponible dans ce billet WinDev : fonctions de s�lection/d�s�lection des champs interrupteurs V2
Version de WinDev : 19 et sup�rieures
Les fonctions
Le nom des fonctions a �t� cr�� en conservant la m�me syntaxe que celles propos�es par PC-Soft
InterrupteurSelectionne
Cette fonction permet de s�lectionner plusieurs options d'un champ interrupteur en passant les indices en param�tres
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| // Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//InterrupteurSelectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau)
//
// Paramètres :
// ps_champ (chaîne ANSI) : nom du chqmpde type interrupteur
// pt_LstIndice (tableau) : Liste des indices à sélectionner
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurSelectionne(Int_options,[1,2,3])
//
PROCEDURE InterrupteurSelectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers)
//----->Declaration des variables
ls_MessageErreur est une chaîne
li_interrupteurOccurrence est un entier
//----->Initialisation des variables
ls_MessageErreur="Vous avez appelé l'opérateur [] sur le champ %1."+RC+...
"L'indice spécifié [%2] est invalide. "+RC+...
"Les valeurs valides sont comprises entre 1 et %3 (inclus)."
SI ChampExiste(ps_champ) ALORS
SI {ps_champ,indChamp}..Type = typInterr ALORS
//----->Initialisation des variables
li_interrupteurOccurrence={ps_champ,indChamp}..Occurrence
POUR li_i=1 _A_ pt_LstIndice..Occurrence
SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS
{ps_champ,indChamp}[pt_LstIndice[li_i]]=Vrai
SINON
ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_interrupteurOccurrence))
FIN
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN |
Exemple d'utilisation :
InterrupteurSelectionne(Int_LstOptions..nom,[1,3,5,7])
InterrupteurSelectionneTout
Cette fonction s�lectionne toutes les options du champ interrupteur pass� en param�tre
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| // Résumé : Sélectionne toutes les options d'un champ de type interrupteur
// Syntaxe :
//InterrupteurSelectionneTout (<ps_champ> est chaîne)
//
// Paramètres :
// ps_champ (chaîne ANSI) : Nom du champ de type interrupteur
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurSelectionneTout(Int_LstOptions..Nom)
//
PROCEDURE InterrupteurSelectionneTout(ps_champ est un chaîne)
SI ChampExiste(ps_champ) ALORS
SI {ps_champ,indChamp}..Type = typInterr ALORS
POUR li_i=1 _A_ InterrupteurOccurrence(ps_champ)
{ps_champ,indChamp}[li_i]=1
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN |
Exemple d'utilisation :
InterrupteurSelectionneTout(Int_LstOPtions..nom)
InterrupteurDeselectionne
Cette fonction permet de d�s�lectionner plusieurs options d'un champ interrupteur en passant les indices en param�tres
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| // Résumé : Déselectionne les options du champ interrupteur passé en paramètre 1 avec les indices passé en paramètre 2
// Syntaxe :
//InterrupteurDeselectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau)
//
// Paramètres :
// ps_champ (chaîne ANSI) : nom du champ interrupteur à manipuler
// pt_LstIndice (tableau) : Liste des indices des options à désélectionner
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurDeselectionne (Int_LstOptions..nom,[1,3,7])
//
PROCEDURE InterrupteurDeselectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers)
//----->Declaration des variables
ls_MessageErreur est une chaîne
li_interrupteurOccurrence est un entier
//----->Initialisation des variables
ls_MessageErreur="Vous avez appelé l'opérateur [] sur le champ %1."+RC+...
"L'indice spécifié [%2] est invalide. "+RC+...
"Les valeurs valides sont comprises entre 1 et %3 (inclus)."
SI ChampExiste(ps_champ) ALORS
SI {ps_champ,indChamp}..Type = typInterr ALORS
//----->Initialisation des variables
li_interrupteurOccurrence={ps_champ,indChamp}..Occurrence
POUR li_i=1 _A_ pt_LstIndice..Occurrence
SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS
{ps_champ,indChamp}[pt_LstIndice[li_i]]=Faux
SINON
ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_interrupteurOccurrence))
FIN
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN |
Exemple d'utilisation :
InterrupteurDeselectionne(Int_LstOPtions..nom,[1,3,7])
InterrupteurDeselectionneTout
Cette fonction d�s�lectionne toutes les options du champ interrupteur pass� en param�tre
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| // Résumé : Déselectionne toutes les option d'un interrupteur
// Syntaxe :
//InterrupteurDeselectionneTout (<ps_champ> est chaîne)
//
// Paramètres :
// ps_champ (chaîne ANSI) : Nom du champ de type interrupteur
// Valeur de retour :
// Aucune
//
// Exemple :
// InterrupteurDeselectionneTout(Int_option..nom)
//
PROCEDURE InterrupteurDeselectionneTout(ps_champ est un chaîne)
SI ChampExiste(ps_champ) ALORS
SI {ps_champ,indChamp}..Type = typInterr ALORS
POUR li_i=1 _A_ InterrupteurOccurrence(ps_champ)
{ps_champ,indChamp}[li_i]=0
FIN
SINON
ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
FIN
SINON
ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN |
Exemple d�utilisation :
InterrupteurDeselectionneTout(Int_LstOPtions..nom)
Les exceptions
Comme vous avez pu le constater en lisant le code source des fonctions, celles-ci d�clenchent des exceptions en cas de probl�me. Trois types d'exceptions sont g�r�es :
Code |
Message |
1 |
Le champ '%%Champ%%' n'existe pas |
2 |
Le champ '%%Champ%%' n'est pas de type interrupteur |
3 |
Vous avez appel� l'op�rateur [] sur le champ %%Champ%%.<br>
"L'indice sp�cifi� [%Indice%%] est invalide. "+RC+...
"Les valeurs valides sont comprises entre 1 et %%Occurrence%% (inclus). |
Exemple d'utilisation avec la gestion des exceptions :
InterrupteurSelectionne
1 2 3 4 5
| QUAND EXCEPTION DANS
InterrupteurSelectionne(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
//Gestion des exceptions
FIN |
InterrupteurSelectionneTout
1 2 3 4 5
| QUAND EXCEPTION DANS
InterrupteurSelectionneTout(Int_LstOptions..Nom)
FAIRE
//Gestion des exceptions
FIN |
InterrupteurDeselectionne
1 2 3 4 5
| QUAND EXCEPTION DANS
InterrupteurDeSelectionne(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
//Gestion des exceptions
FIN |
InterrupteurDeselectionneTout
1 2 3 4 5
| QUAND EXCEPTION DANS
InterrupteurDeselectionneTout(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
//Gestion des exceptions
FIN |
Conclusion
Par ce billet, je viens de mettre � disposition de la communaut� des fonctions pour am�liorer la gestion par programmation du champ Interrupteur. N'h�sitez pas � me faire part de vos retours pour am�liorer, compl�ter la liste de ces fonctions.
A voir, si PC-Soft int�grera ces propositions dans une future version de son EDI.
Bon dev � tous