initiation à this_access
# 0000000850
ajouté le 22/04/2013 09:31:47 et modifié le 22/04/2013
consulté 8070 fois
Niveau
initié
Version(s) Foxpro : VFP 9.0
Description
Un détail dans la présentation de Cesar CHALOM aux rencontres de ROISSY2013 m'a beaucoup interessé : les propriétés et les méthodes de _screen sont 'structurées hirarchiquement', par exemple _Screen.oFoxyPreviewer. Dans nos applications, nous trainons un grand nombre de paramètres et de données qu'il est facile et interessant, du moins pour la relecture, de structurer. Il suffit de créer une classe mère et une classe pour chaque categorie :
[vfp] DEFINE CLASS donnees AS custom && jme 22/04/2013
* classe dont l'instance va contenir 'toutes' les données de
Mais, j'ai voulu aller un peu plus loin ! en effet, dans l'exemple ci-dessus, on a besoin des dates de facturation que lorsqu'on fait des factures. Faut-il alors aller chercher systématiquement des valeurs dont on pourra n'avoir pas besoin dans l'application ce jour ? Ce serait bien si on ne pouvait aller les chercher qu'en cas de besoin.
Celà nous fait penser à une méthode _ACCESS mais _access sur quoi ? eh bien sur la classe complète ! en utilisant la méthode THIS_ACCESS. Cette méthode sera lancée chaque fois qu'on accédera à la classe (en fait à l'instance de la classe) et elle aura comme paramètre le nom de la propriété que l'on veut. Il suffit alors de vérifier si la propriété existe; si oui, on n'a rien à faire; si non on la crée. Le plus simple pour comprendre est d'executer le programme pas à pas ci-dessous et de voir ce qu'il se passe.
Cette méthode a un inconvénient (assez important) : on déroule du code chaque fois que l'on veut accéder à une propriété. Ce n'est pas très efficace mais il y a un moyen de minimiser ce problème en créant une variable (locale ou privée) sur la propriété 'cheffe de rubrique' comme je l'ai fait avec l'instruction lofils = m.loobject.classefils A l'execution de cette instruction, on va lancer this_access et donc créer la propriété si elle n'existe pas déjà; mais pas après en utilisant m.lofils.
Code source :
setstepon
loobject = CREATEOBJECT("classe1")
lnaccu = m.loobject.classefils.toto && on execute this_access
? m.lnaccu
lofils = m.loobject.classefils && on execute this_access
lnaccu = m.lofils.toto && on n'execute pas this_access
lnaccu = m.lofils.toto + 1 && on n'execute pas this_access *loobject.removeobject("classefils") && on execute this_access
lopapa = m.loobject && on n'execute pas this_access
lnaccu = m.lopapa.classefils.toto && on execute this_access RELEASE lofils, lopapa
loobject = NULL&& on détruit classe1. On passe * dans le destroy et dans this_access RELEASE loobject SETSTEPOFF
le 22/04/2013, Marc Thivolle a écrit : Alors là Jean, chapeau ! Je découvre le This_access.
le 22/04/2013, Jean à Grenoble a écrit : C'est pas mal mais ce qui serait mieux c'est que je puisse indenter mon code dans le premier exemple ! Jean à Grenoble
Alors là Jean, chapeau ! Je découvre le This_access.