MGListe : Filtre

Filtrage dans MGListe

Principe général

Chaque MGListe contient un modèle doté d’un filtre (ex. MFiltreUtilisateur) accessible dynamiquement. Le filtrage s’effectue avant la requête SQL, via la propriété m_pclFiltre du modèle. Le filtrage ne s’applique donc pas en mémoire, mais en base de données.

Remarque importante

Le champ m_pclFiltre dans l’objet MxxListe doit impérativement être déclaré en PUBLIC. Sinon, la classe MGListe ne pourra pas accéder au filtre lors de l’appel à GetObjetFiltre() ou GetListeAvecFiltre(), ce qui empêchera tout filtrage des données.

Exemple d’utilisation

pclFiltre est un objet dynamique = GGlobal.GListe(GUtilisateurListe).GetObjetFiltre()
pclListeAvecFiltre est un objet dynamique

pclFiltre.m_sCode = "DJ"
pclListeAvecFiltre = GGlobal.GListe(GUtilisateurListe).GetListeAvecFiltre(pclFiltre)

POUR TOUT M DE pclListeAvecFiltre.p_tabModele
    Trace(M.p_sNomComplet)
FIN

Trace(GGlobal.GListe(GUtilisateurListe).GetModele(2).p_sNomComplet)

📌 Méthodes clés

GetObjetFiltre()

PROCÉDURE GetObjetFiltre()
pclFiltre est un objet dynamique = Clone(m_pclModele.m_pclFiltre)
pclFiltre.ResetFiltre()
RENVOYER pclFiltre

GetListeAvecFiltre(pclFiltre)

PROCÉDURE GetListeAvecFiltre(pclFiltre est un objet dynamique)

pclListeAvecFiltre est un objet dynamique
pclListeAvecFiltre = Clone(m_pclModele)
pclListeAvecFiltre.p_pclFiltre = pclFiltre
pclListeAvecFiltre.Charger()

RENVOYER pclListeAvecFiltre

📎 Annexe : Problèmes d’auto-complétion

Le filtrage repose sur des objets dynamiques. Si la classe du filtre (ex. MFiltreUtilisateur) n’est pas incluse dans le composant appelant, alors :

  • ❌ Aucune auto-complétion n’est disponible sur les propriétés du filtre.
  • ⚠️ Plus difficile à maintenir et à deviner les bons noms de propriétés.

✅ Solutions alternatives

Solution Auto-complétion Propreté Portabilité
Objet dynamique (actuel)
Interface connue (ex. IFiltreUtilisateur) ⚠️ (dépendance inter-composant)
Typage local temporaire (pour le dev) ⚠️
Génération externe automatisée ⚠️ (complexe)

💡 Alternative légère adoptée

Dans certains cas, un filtrage léger via nom ou identifiant suffit. Pour des filtres plus complexes, une autre méthode dédiée peut être appelée avec des paramètres explicites.