Bonjour
Ce post ne sera pas un article, il sera intégré à notre dossier en cours de refonte.
Concernant la manipulation des contextes HyperFiles voici un petit piège de conception à l'explication un peu lointaine...
Au départ nous avons un fichier, une fenêtre et un état. Tous va bien, la fenêtre affiche le contenu du fichier dans une table, il est possible de filtrer le fichier, la table et l'état prennent en compte le filtre pendant sa durée d'activité.
Ensuite, rendons les choses plus complexes. Disons que l'on réexploite la fenêtre... mais avec un fichiers temporaire (décrit en dynamique par
hDédritFichier).
La fenêtre voie sa table réaffectée par les propriétés :
Table..FichierParcouru="NOMFICHIERTEMPORAIRE"
Table..RubriqueParcourue="CLEFICHIERTEMPORAIRE"
Table.COLONNE..LiaisonFichier="NOMFICHIERTEMPORAIRE.RUBRIQUE"
...
On conserve les avantages de rapidité de la table fichier.
Le filtre est possible sur le fichier temporaire, la table suit !
Table..FichierParcouru="" // débranche les propriété de parcours
// inactive le filtre précédant
hDesactiveFiltre(NOMFICHIER)
// filtre simplement le fichier (on peut aussi filtrer selon une condition...)
cRub est une chaîne
cRub = hFiltre(NOMFICHIER,RUB,Min,Max,Condition)
HLitPremier(NOMFICHIER)
SI PAS hEnDehors() ALORS
Table..RubriqueParcourue=cRub // Change la clé de parcours [optionnel]
FIN
Table..FichierParcouru=NOMFICHIER // rebranche les propriété de parcours
Pour l'état, c'est une autre histoire.
// Brancher le fichier temporaire et sa clé de parcours
MonEtat..NomSource=NOMFICHIERTEMPORAIRE
MonEtat..RubriqueParcourue=CLEFICHIERTEMPORAIRE
// pointer les champs liés
NOMCHAMP..RubriqueAffichée="RUBRIQUE"
...
le hic est bien dans l'application du filtre !
En effet, brancher le fichier temporaire à la place du fichier normal semble créer un nouveau contexte Hyperfile (source de données de l'état). Ce nouveau contexte ignore donc le filtre activé dans la fenêtre appelante !
Une solution serait alors d'utiliser en paramètre d'appel à l'état le nom de la source de données utilisée dans la fenêtre... le contexte serait alors transmis à l'état.
Subtile !