Ouverture du fichier (version 2)
Rappelons le script précédent de notre fichier: Il faudrait être aveugle pour ne pas constater que la série d'activation de modèles et d'affichage de tous les enregistrements est un peu répétitive... De plus, si on veut développer un tant soit peu sérieusement, on remarque immédiatement que, si une nouvelle table est créée, il nous faudra ré-ouvrir le script et rajouter une répétition supplémentaire, pour autant qu'on n'oublie pas de le faire... On va donc aborder ici une approche plus professionnelle pour faire exactement la même chose que le script précédent :
Seulement, cette fois, ça va chauffer de la cafetière, alors, silence et concentration... Alons-y pazapa. Ce script-ci s'appelle open2 et va remplacer le précédent à l'ouverture du fichier.
Le principeIl existe dans FileMaker Pro une fonction appelée "NomsTables", qui liste non pas les tables, mais les OT ! (Ben oui...) Grâce à notre nomenclature géniale, que l'on a bien respectée depuis le début de ce tutoriel, on va fabriquer une nouvelle liste pour obtenir la liste des ancres uniquement, de forme XXX__. A partir de cette nouvelle liste, si on change le nom de chaque ancre de XXX__ en XXX_Tech, on aura la liste exhaustive des modèles "Tech", de façon dynamique, même si on rajoute ou supprime une table par la suite ! On va ensuite boucler sur cette liste pour afficher tous les enregistrements par table. On est ainsi assuré de balayer à tout moment l'entièreté des tables de l'application. Les variablesOn commence par se fabriquer des variables, nécessaire à l’établissement d’une liste correcte de tous les modèles « Tech » : On devrait donc avoir :
La condition de fin de boucle sera : si $n = $nbreot (le compteur a atteint le nombre d'OT). C’est la seule raison de l’existence de ces 2 dernières variables. Construction de la listeCe qu'on veut faire :
Or, comment reconnaître une ancre dans la liste des OT ? Sa longueur a 5 caractères… Toutes les autres OT sont plus longues ! (et oui ceux qui ont suivi depuis le début sont de plus en plus contents de savoir que tout ce qu'ils ont fait a une vraie utilité). On démarre une 1ère boucle en balayant la liste des OT, $ot. Comment ? En utilisant la fonction ObtenirValeur (liste de valeurs; nombre de valeurs), qui devrait être traduite par ObtenirValeur ( Liste; Numéro ). Par exemple, ObtenirValeur ( $ot ; 3 ) donne cla_INS__Professeur (la troisième valeur de la liste). Si la valeur obtenue de la liste $ot a une longueur de 5, on la retient dans la variable $tables, sous forme de liste, sinon on passe. On en profite pour transformer le nom trouvé XXX__ en XXX_ (= 4 premiers caractères) & "Tech". Courage ! : En fait c'est assez simple à détailler et à mettre en place. Quelques compléments d'explication quand même ? Si [ Longueur ( ObtenirValeur ($ot ; $n ) ) = 5 ]Comme toujours il faut décomposer, mais il suffit de lire :
Sur notre fichier, la liste contenue dans $ot est normalement : Donc si la longueur du nom de l'OT est égale à 5, on rentre dans le si, sinon on passe à la suivante. Définir variable [ $tables ; Valeur : Debut (ObtenirValeur ( $ot ; $n) ; 4 ) & "Tech" & ¶ & $tables ]Ici aussi, ça devient assez limpide :
Fin de boucle siOn a vu que si notre compteur avait atteint le nombre d'ot, on devait sortir de la boucle. Il faut être vigilant sur les conditions de sortie. La variable $tables est ainsi montée sous forme de liste : Mise à jour des modèlesPour la deuxième boucle, une nouvelle variable, $nbretables, compte le nombre de valeurs de notre dernière liste, $tables, et la variable "compteur" $n est remise à 1. Par boucle, en extrayant à chaque fois une valeur de la liste, on peut aller au modèle correspondant et afficher tous les enregistrements, comme dans le script de la page précédente. Pour sélectionner le nom du modèle par calcul, on utilise la fonction ObtenirValeur ( $table ; $n ), $n étant également le compteur de l à n. Ceux qui souhaitent peaufiner peuvent rajouter une ligne pour activer le premier ou le dernier enregistrement. Lorsque l'utilisateur activera un modèle, non seulement il aura tous les enregistrements de la table, mais il sera positionné sur celui désiré. la boucle : Le scriptVoici le script brut dans son ensemble : Il se termine par un retour au modèle PAR_Menu et l'ajustement de la fenêtre en plein écran. Cette approche est nettement plus professionnelle que la précédente, car le script ne dépend plus du nombre de tables. Pour autant que la nomenclature soit correctement respectée, il pourrait même être ré-utilisé dans d'autres fichiers ! Bien évidemment, ce script est probablement plus difficile à comprendre. Mais c'est normal : à ce stade, vous n'êtes plus des débutants !!! Ne vous reste plus qu'à le tester puis à le mettre en remplacement de "Open" en script d'ouverture. Attention, avant de mettre un script en ouverture dans les options de fichier, il est très important de le tester. En effet, s'il est exécuté à l'ouverture et qu'il comporte une erreur, vous risquez fort d'être bloqué car même en forçant l'application à quitter, chaque lancement du fichier exécutera le script. En plus du test préalable, nous ne saurions donc trop vous recommander de faire les modifications importantes sur un fichier APRÈS avoir fait une copie (qui permettra toujours de revenir à l'état antérieur du fichier. Enfin, si vous avez malencontreusement mis un "mauvais" script en démarrage et que vous êtes l'heureux possesseur d'une version Advanced, vous trouverez dans la partie Astuces et Exemples de la section Avancé (et oui, maintenant vous pouvez y aller) le moyen d'interrompre un script (et tout plein d'autres choses passionnantes). À vous de jouer !!!! The fichier
|