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.