FileMaker : Variables et rubriques globales

le point sur leurs différences, avantages et inconvénients comparés

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.

  1. vider la globale
  2. modifier la rubrique globale en calcul de type global, et définir le calcul comme une constante avec la valeur à attribuer (="MaValeur") par exemple.
  3. s’assurer que le calcul est effectivement évalué, en consultant le Visualiseur de Données par exemple
  4. 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.

Haut de la page

 

[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.