Changements récents - Rechercher:

Tutoriel Filemaker

  1. Structure
  2. Modèles
  3. Opérations diverses
  4. Calculs
  5. Scripts
  6. Privilèges d'accès

Filemaker avancé

  1. Partage des données
  2. Astuces et Exemples
  3. Développement

Règles de nommage

Versions de FileMaker Pro

Liens utiles Contact Commentaires

edit SideBar

Ouverture du fichier (version 2)

<==Ouverture du fichier 1 ^ Scripts

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 :

  • Afficher tous les enregistrements dans toutes les tables
  • Activer le modèle PAR_Menu
  • Mettre en plein écran

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 principe
Les variables
Construction de la liste
Mise à jour des modèles
Le script




Le principe


Il 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 variables


On commence par se fabriquer des variables, nécessaire à l’établissement d’une liste correcte de tous les modèles « Tech » :

On devrait donc avoir :

  • Une liste de toutes les OT, $ot, par la fonction NomsTables(Obtenir(NomFichier))
  • Une variable vide, qu’on va remplir avec les noms des modèles "Tech", $tables
  • Le nombre de valeurs de la liste $ot, $nbreot, par la fonction DecompteValeurs
  • Un compteur, mis à 1 au départ, $n

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 liste


Ce qu'on veut faire :

  1. On a une liste exhaustive de toutes les OT ($ot)
  2. On veut la "filtrer" pour n'obtenir QUE les ancres
  3. On veut transformer le nom de chaque ancre de XXX__ en XXX_Tech

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 :

  • Si => on va vérifier une condition
    • Longueur (....) = 5 => c'est notre condition, la longueur de quelque chose doit être égale à 5. La longueur de quoi ?
      • de ObtenirValeur ($ot ; $n) => dans la liste contenue par $ot, je prends la valeur située à la $n ième position (puisque rappelons le, $n est un compteur qui va de 1 à "nombre d'ot".

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 :

  • définir variable [$tables...] => nous définissons une variable appelée $tables
  • comme valeur pour cette variable, on prend
    • Debut ( ... ; 4 ) soit les 4 premiers caractères à partir du début
    • & "Tech" pour ajouter le texte Tech ensuite
      • & un saut de ligne pour avoir le tout en liste
        • & $tables, c'est à dire ce qui est déjà dans la variable qu'on complète

Fin de boucle si

On 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.
Dans le cas présent, comme l'incrémentation se fait en fin de boucle - Définir variable [ $n : valeur : $n + 1 ) - et la vérification juste avant, on peut en effet sortir dès que la valeur est atteinte. Si ces deux dernières instructions étaient inversées (incrémentation puis vérification), il faudrait sortir sur l'instruction "Fin de boucle si [ $n > $nbreot ] pour ne pas rater la dernière occurrence.

La variable $tables est ainsi montée sous forme de liste :

Mise à jour des modèles


Pour 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 script


Voici 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

<==Ouverture du fichier 1 ^ Scripts
Éditer - Historique - Imprimer - Changements récents - Rechercher
Page mise à jour le 30 juin 2008 à 11h08