FileMaker : Variables et rubriques globales
le point sur leurs différences, avantages et inconvénients comparés
Fabrice Nordmann | 11 novembre 2010
A la suite d’un fil de discussion sur le forum FM Source, je me suis dit qu’il fallait peut-être, trois ans après la sortie de FileMaker 8 et des variables, faire un point sur les différences entre variables et rubriques globales.
L’étendue
Tout d’abord, il existe trois différentes variables, qui se différencient par leur étendue (scope)
- les variables de calcul, utilisables uniquement dans la fonction Definir() (Let) : Définir ([variable1 = "salut" ; variable2 = "le monde !"] ; variable1 & " " & variable2 ). Ces variables ne sont valables (répétez ça dix fois très vite) qu’au sein de cette fonction Définir. Dès que la parenthèse est refermée, elle sont "oubliées". Notons que ces variables de calcul ne peuvent être utilisées dans des fonctions Définir emboîtées [1]. Elles ne passent pas non plus la barrière de la fonction Evaluation [2]
- les variables "locales" ou "de script", notées $ : On peut les déclarer avec une fonction Définir() ou avec l’instruction de script Définir Variable(). Elles ne sont valables que dans le script en cours, et "oubliées à la fin". Par contre, on oublie souvent qu’elles demeurent pendant tout le script, même si elles ont été déclarées avec une fonction Définir(). Il faut donc se méfier du nommage des variables, afin qu’une fonction Définir() ne vienne pas écraser une variable définie dans le script. On ignore souvent en revanche que des variables locales définies alors qu’aucun script n’est en cours sont valables à chaque fois qu’aucun script n’est en cours. Pour FileMaker, il y a un "script zéro" qui "tourne" quand aucun autre script n’est en cours d’exécution. Définir une variable locale avec la fonction définir alors qu’aucun script n’est en vous permet d’utiliser cette variable à chaque fois qu’aucun script n’est en cours.
- les variables "globales", notées $$ : Ce sont celles qui nous intéressent ici, car les seules que l’on puisse confondre avec les rubriques globales. En fait, si FMI les avait nommées correctement, la confusion n’existerait sans doute pas du tout, mais le huitième jour, Dieu, qui avait la gueule de bois, a dit que FileMaker n’aurait pas le droit d’adopter le même vocabulaire que toute l’industrie, et qu’il faudrait dire "rubrique" là où tout le monde parle de "champ", "modèle" quand les autres parlent de "formulaire"... Je ne vous raconte même pas le 9ème jour, où Il a imaginé Bento !
Ainsi donc ces variables à deux dollars (et j’ai pas dit deux balles), ne sont en fait pas globales du tout mais "de session". C’est à dire que leur limite est celle d’une session utilisateur pour un fichier donné.
Comme leur petites sœurs à un seul $, on les déclare avec la fonction Définir() ou avec l’action de script Définir variable().
Les rubriques globales, elles, s’apparentent beaucoup plus à des variables globales, puisqu’elles sont valables pour une session de l’application (donc multi-fichiers), et qu’elle contiennent une valeur au début de cette session.
Notons que la valeur contenue dans une rubrique globale est accessible depuis n’importe quel contexte d’une solution sans avoir à définir de lien. Elles passent même la barrière des fichiers, alors que les variables globales sont propre à une session pour un fichier.
Ce dernier aspect est particulièrement intéressant pour définir des listes de valeurs relationnelles, accessibles depuis n’importe où, plutôt que de re-créer des liens et une liste de valeurs à chaque fois qu’on en a besoin. Ces listes fonctionnent même en mode recherche !
Nous retrouvons donc en finale de ce tournoi, à ma gauche, les variables globales (c’est pas tous les jours que les $$ sont à gauche), et à ma droite, les rubriques globales (je les mets à droite parce qu’elle conservent une donnée, elles sont donc plus conservatrices - désolé, je suis aussi drôle que Goscinny depuis qu’il s’appelle Uderzo, c’est lamentable)
En finale, oui, parce que nous n’avons pour l’instant étudié que leur étendue, mais il reste encore beaucoup à voir. Et d’ailleurs, avons nous vraiment vu tout ce qui concerne l’étendue ?
Pour ce qui concerne les variables "globales", c’est assez simple, elle sont définie au cours de la session, et sont "tuées" à la fermeture.
Il en est autrement pour les rubriques globales, qui conservent une valeur par défaut, valable pour tous les utilisateurs au début de chaque session.
Pour initialiser la valeur d’une rubrique globale, il faut être l’hôte du fichier. Autrement dit, on ne peut en principe pas modifier cette valeur par défaut si le fichier est servi (partagé par FileMaker Server ou par FileMaker Pro sur un autre poste). Concrètement, chaque utilisateur pourra modifier la valeur d"une rubrique globale au cours de sa session, mais retrouvera la valeur par défaut en fermant et ré-ouvrant le fichier.
Truc : il existe malgré tout une méthode pour modifier la valeur d’une globale sur le serveur. Elle nécessite (heureusement) l’accès intégral au fichier.
- vider la globale
- modifier la rubrique globale en calcul de type global, et définir le calcul comme une constante avec la valeur à attribuer (="MaValeur") par exemple.
- s’assurer que le calcul est effectivement évalué, en consultant le Visualiseur de Données par exemple
- repasser la rubrique en globale standard (non calculée)
Voilà pour l’étendue, je crois que cette fois, nous en avons fait le tour.
Le stockage
Le stockage d’une rubrique globale ou d’une variable globale se fait au niveau du poste client, ce qui est bien pratique. Cela veut dire que la valeur est propre à l’utilisateur, et aussi qu’il n’y a pas besoin d’aller chercher une valeur sur le serveur à chaque fois qu’on en a besoin.
Une rubrique comme une variable peut être multivaluée, mais cela ne présente pas beaucoup d’intérêt pour une variable, car on ne peut pas, contrairement à une rubrique globale, récupérer la liste des valeurs avec la fonction Liste, ou la dernière valeur renseignée avec la fonction Dernière(). En revanche, on peut attribuer n’importe quel entier comme numéro de répétition, qu’il soit négatif, nul ou positif. Considérez que les répétitions d’une variable sont en fait des variables totalement différentes, et vous aurez tout compris.
[1] Definir ( var = "bonjour" ; Definir ( var2 = var & " tout le monde" ; var & var 2 )) ne fonctionnera pas car var n’est pas passée à la deuxième fonction Definir
[2] Definir ( var = 1 ; Evaluation ( var + 1 )) ne fonctionnera pas car var n’est pas passée à la fonction Evaluation.


2 février 2010 15:27
FileMaker : Variables et rubriques globales
Salut Fabrice,
J’ai peut-être lu trop vite, mais, pour être complet, il me semble que tu n’as pas mentionné la propriété de la rubrique globale d’être accessible de n’importe quelle occurence de table sans aucun lien, ce qui peut s’avérer intéressant.
Bravo pour ton site !
Christian
2 février 2010 17:27
FileMaker : Variables et rubriques globales
Bonjour Christian,
merci pour ce commentaire aussi pertinent qu’inaugural ! Le texte est modifié, et mentionne cette propriété ainsi que son utilisation possible dans les listes de valeurs.
3 février 2010 11:59
Bonjour Fabrice
J’ai mis du temps à me faire aux variables, je m’étais bien habitué aux globales. Je les trouvait pratiques pour passer des informations d’un fichier à l’autre (fp5), puis d’une table à l’autre (fp7). Maintenant, j’utilise des variables pour transmettre des informations et des globales pour les tables ou recherches et même, je mets des variables dans des globales pour qualifier des importations. Ça marche toujours aussi bien. Ma seule question est : est-ce-que ça change quelque chose au poids, à la stabilité ou à la vitesse d’exécution de FMP ?
3 février 2010 12:50
FileMaker : Variables et rubriques globales
Bonjour Tora,
Aucunement ! sauf, bien sûr, les valeurs "par défaut" inscrites dans une rubrique globale. Si l’idée te venait d’y stocker de lourdes images par exemple (mais quelle idée !)
Par contre, quand tu dis que tu utilises des rubriques globales pour les recherches, attention ! les rubriques globales ne sont pas prises en compte dans les recherches, justement.
3 février 2010 21:53
FileMaker : Variables et rubriques globales
salut Fabrice belle initiative ! pratique les variables. Elles permettent d’accélérer considérablement certains scripts, qui du coup deviennent aussi rapides qu’un lièvre (variable). bon j’ai appris qu’on pouvait stocker une image dans une variable. amicalement Eric (ire)
4 février 2010 06:43
FileMaker : Variables et rubriques globales
Hello Fabrice,
Bravo pour le site que j’avais déjà vu en visitant le site de la FmConf mais j’avais pas vu cette partie blog.
C’est super et je suis encore plus heureux puisque c’est en... français.
Encore bravo
10 février 2010 00:02
D’outre Atlantique.
Wow ! Pour une 1ière entrée au blogue, s’en est toute une ! :O) Merci Fabrice pour cet article anthologique. Je pense que nous aurons tous appris des choses sur les dessous des variables FileMaker.
Leur ancêtre est probablement les paramètres de scripts apparus en version 7, et dont le contenu peut, au besoin, se transporter d’un fichier à un autre. Sans oublier le petit négligé Obtenir(RésultatScript) qui permet ’dans le sens inverse’ de développer de véritables fonctions-script autonomes (avec résultat de sortie).
Et sans compter tout ce que l’on peut maintenant faire du côté serveur... Bref, FileMaker continue de perdre de son innocence et il est devenu, malgré son lexique particulier, un outil de développement très puissant.
26 novembre 2011 15:41
Lien Snapshot
Bonjour, J’ai compris comment enregistrer un lien Snapshot, mais ne trouve acune action de script pour permettre à l’utilisateur d’y revenir. A la souris, avec Fichier / Ouvrir ... on y parvient, mais rien en script. Quelque chose m’échappe ou est-ce impossible svp ? Merci par avance, Roger