Visual - Listes - Filtres manuels

Last modified by Isabelle FERRIERE on 2015/10/12 10:12

 Soit une liste d’animaux, dont les colonnes CATEGORIE et ANIMAL sont définies en filtre manuel :

LST_ANIMAUX.png 

 Sur l’événement « ActionFiltre » de ces colonnes :

1/ Déterminer le filtre, à partir de la propriété VALEUR_INTERNE_FILTRE :

  • Position 1 à 2 : opérateur du filtre. Valeurs possibles : '=', '>', '<', ''
  • Position 3 : indicateur de casse ('0' sans casse, '1' avec la casse)
  • Position 4 à 6 : longueur de la valeur (sur 3 chiffres, complétée par des zéros à gauche)
  • Position 50 : début de la valeur
  • La propriété à *BLANK indique que l'utilisateur a choisi de tout afficher (filtre « * »)
* Action sur filtre
SI COL_CATEG:VALEUR_INTERNE_FILTRE = *BLANK
   W_FILTRE_OPERATEUR = '*'
   W_FILTRE_CASSE = *BLANK
   W_FILTRE_LONG = *BLANK
   W_FILTRE_VAL = *BLANK
SINON
   W_FILTRE_OPERATEUR = &EXTRACTION(COL_CATEG:VALEUR_INTERNE_FILTRE; 1; 2)
   W_FILTRE_CASSE = &EXTRACTION(COL_CATEG:VALEUR_INTERNE_FILTRE; 3; 1)
   W_FILTRE_LONG = &EXTRACTION(COL_CATEG:VALEUR_INTERNE_FILTRE; 4; 3)
   W_FILTRE_VAL = &EXTRACTION(COL_CATEG:VALEUR_INTERNE_FILTRE; 50; 200)
FIN

2/ Parcourir la liste (LECTURE_LST, par exemple) et rendre visible ou non les lignes en fonction du filtre, ce en utilisant le filtre défini précédemment et la propriété LIGNE_VISIBLE :

LECTURE_LST LST_ANIMAUX:LISTE
 
   * Masquer toutes les lignes
   LST_ANIMAUX:LIGNE_VISIBLE = *FAUX
 
   * Filtre = « tous » => Rendre visible toutes les lignes
   SI W_FILTRE_OPERATEUR = '*'
      LST_ANIMAUX:LIGNE_VISIBLE = *VRAI
 
   SINON
 
      SI W_FILTRE_CASSE = '0'
         * Non respect de la casse
         SI WCOL_NOM = 'CATEGORIE'
            WCOL_VALEUR = &MINUSCULE(COL_CATEG:)
         SINON_SI WCOL_NOM = 'ANIMAUX'
            WCOL_VALEUR = &MINUSCULE(COL_ANIMAL:)
         FIN
         W_FILTRE_VAL = &MINUSCULE(W_FILTRE_VAL)
 
      SINON
         * Casse sensitive
         SI WCOL_NOM = 'CATEGORIE'
            WCOL_VALEUR = COL_CATEG:
         SINON_SI WCOL_NOM = 'ANIMAUX'
            WCOL_VALEUR = COL_ANIMAL:
         FIN
      FIN
     
      * Rendre visible les lignes respectant le filtre
      SI W_FILTRE_OPERATEUR = '=' ET WCOL_VALEUR = W_FILTRE_VAL
         LST_ANIMAUX:LIGNE_VISIBLE = *VRAI
      FIN
 
      SI W_FILTRE_OPERATEUR = '>' ET WCOL_VALEUR > W_FILTRE_VAL
         LST_ANIMAUX:LIGNE_VISIBLE = *VRAI
      FIN
 
      SI W_FILTRE_OPERATEUR = '<' ET WCOL_VALEUR < W_FILTRE_VAL
         LST_ANIMAUX:LIGNE_VISIBLE = *VRAI
      FIN
 
      SI W_FILTRE_OPERATEUR = '~' ET WCOL_VALEUR CONTIENT W_FILTRE_VAL
         LST_ANIMAUX:LIGNE_VISIBLE = *VRAI
      FIN
   FIN
 
   * Mettre à jour la liste
   MODIFIER_ELT LST_ANIMAUX:LISTE
FIN_LECTURE_LST

Déclarations utiles://**

ALPHA(2)   W_FILTRE_OPERATEUR
ALPHA(1)   W_FILTRE_CASSE
ALPHA(3)   W_FILTRE_LONG
ALPHA(200) W_FILTRE_VAL
ALPHA(9)   WCOL_NOM
ALPHA(200) WCOL_VALEUR

Articles connexes

Les articles connexes apparaissent ici en fonction des étiquettes que vous avez sélectionnées. Cliquez pour modifier la macro et ajouter ou modifier des étiquettes.