L’expérience de la formation FileMaker m’a entre autre appris que parmi les nombreuses fonctions de calcul de FileMaker, il en est une qu’il est toujours difficile d’expliquer à une personne n’ayant pas de notions de programmation orientée objet.
Apparue avec la version 9 de FileMaker, la fonction Contenu (Self en anglais), est classée dans les fonctions logiques. C’est une fonction tellement particulière qu’elle a droit à un message d’erreur particulier quand vous l’utilisez dans certaines formules. Toutes les autres fonctions de calcul peuvent être utilisées dans n’importe quelle formule, mais pas celle-ci. Dans la plupart des cas, un message apparaît vous indiquant que vous ne pouvez utiliser cette fonction.
De plus, elle ne prend pas de paramètre, ce qui est assez rare (mais pas unique ! Alea par exemple n’en prend pas non plus)
Au caractère abstrait de cette fonction s’ajoute pour les francophones une difficulté de traduction. Self veut dire « soi-même », mais on peut en Anglais parler du self d’un tiers (c’est d’ailleurs un concept de psychanalyse inventé par Winnicott).
Plus loin dans l’Histoire de la psychanalyse, Freud parlait du « Moi » (concept très différent mais autre traduction possible de la fonction de calcul – juste pour redescendre un peu. Entre parenthèses le « Moi » freudien est déjà une traduction très controversée de « Ich », qui signifie littéralement « Je », qui pour le coup serait une traduction inappropriée de la fonction)
Beaucoup de détours me direz-vous ? Pas tant que ça je crois. Car ces différents concepts (que je ne détaille pas ici mais que rien ne vous empêche d’explorer en suivant les liens) permettent d’approcher la fonction Contenu et ses évolutions. Car oui, vous avez bien lu, à cette complexité conceptuelle s’ajoutent les évolutions de cette fonction, qui est devenu beaucoup plus puissante au fil des versions.
Telle qu’apparue avec FileMaker 9, on peut dire que la traduction française (Contenu) était plus pertinente que la VO (Self). En effet, la fonctionnalité se résumait à peu de chose.
Il n’était alors possible d’utiliser cette fonction que dans deux situations :
Je vous passe le détail de deux bugs qui m’avaient fort énervé (et qui n’ont pas été réglés avec les mises à jour de FileMaker 9 mais seulement en FileMaker 10), mais en gros ils rendaient l’utilisation de Contenu impossible, et dans bien des cas celle du formatage conditionnel également. (Pour les historiens que ça intéresse vraiment, je suis prêt à développer mais le simple fait d’évoquer ces bugs titille mon ulcère)
Donc, si tout avait bien marché, qu’aurions-nous pu faire avec ça dès la version 9 ?
Pour comprendre ces utilisations, il faut se demander qui exécute le calcul, ou plutôt qui demande à l’exécuter. Dans le cas de l’auto-entrée, c’est la rubrique qui demande l’évaluation de la formule afin de définir son propre résultat, Contenu retourne donc le contenu de la rubrique avant l’évaluation du calcul. (Si la rubrique contient 1, alors Contenu + 1 = 2). De même, si l’objet de modèle contient la date du jour (indépendamment de la nature de cet objet, un symbole de modèle, une rubrique de fusion, une rubrique classique…), la formule ObtenirDate ( Contenu )) > Dossier ::dateLimite permettra de formater l’objet si la date limite du dossier est dépassée.
Note : il ne faut pas confondre Contenu et Obtenir ( ContenuRubriqueActive ). Cette dernière fonction renvoie exclusivement le contenu de la rubrique dans laquelle est le curseur, il n’y a pas d’auto-référence induite dans cette fonction.
Avec FileMaker 10, outre le fait que les deux principaux bugs (ceux de l’ulcère) ont été réglés, la fonction a gagné en puissance. Sa traduction (Contenu) est devenue désuète, même si elle n’a pas changé pour ne pas dérouter les quelques utilisateurs qui ne l’étaient pas encore.
Self est désormais porteuse de deux pointeurs. L’un au contenu, comme avant, et l’autre à la rubrique en tant qu’élément de structure de la base de données. (Si vous n’avez rien compris à cette phrase, c’est normal. Moi-même, je ne suis pas très sûr… mais nous sommes en psychanalyse, souvenez-vous…)
Il faut ici rappeler que FileMaker 10 a également apporté deux fonctionnalités majeures et complémentaires : Définir Rubrique par nom (action de script), et ObtenirNomRubrique (fonction de calcul). Vous trouverez de nombreux exemples d’utilisation dans cet excellent article.
Or, si l’on s’amuse à créer une fonction personnalisée (FileMaker Pro Advanced requis) telle que Moi ( _parametre ), avec la formule suivante : ObtenirNomRubrique ( _parametre ), et que l’on utilise cette fonction dans la formule d’un calcul auto-entré d’une rubrique :
Moi ( Contenu )
Que croyez-vous qu’on obtiendra ?
La logique vue précédemment voudrait que Contenu pointe vers le contenu de la rubrique, et le transmette à la fonction qui, essayant d’extraire un nom de rubrique à partir d’un paramètre n’ayant rien à voir avec un nom de rubrique, retournerait un beau point d’interrogation.
Concrètement, si une rubrique MaTable ::MaRubrique contient
« Ça va ? vous suivez toujours ? »
et que la formule d’auto-entrée est
Moi ( Contenu )
on aurait pu penser, puisque la fonction s’appelle contenu, que la fonction Moi évaluerait le calcul :
ObtenirNomRubrique ( « Ça va ? vous suivez toujours ? » )
et qu’elle n’aurait pas su répondre à cette question, car il n’existe pas de rubrique de ce nom.
Or -c’est là que ça devient subtil- le résultat de la fonction sera bien :
MaTable ::MaRubrique
En utilisant la fonction Contenu comme paramètre de la fonction personnalisée, on envoie en fait deux informations de natures différentes : le contenu de la rubrique et l’identité de la rubrique. Selon le traitement effectué ensuite par la fonction personnalisée, l’une ou l’autre de ces informations sera traitée.
En réalité, c’est la fonction ObtenirNomRubrique qui est ici « magique » puisqu’elle traite une autre information que celle qu’on croyait passer. Mais il est remarquable que Self puisse passer cette information.
Un petit saut dans le futur, ou plutôt dans mes rêves (c’est une expression, il serait curieux de commencer un article en parlant de psychanalyse et de le terminer en rêvant de FileMaker 13 !)
Self est donc capable de représenter des entités différentes (une rubrique, un objet de modèle), et de référencer des informations de natures différentes (une valeur, un élément de structure de la base de données). Autrement dit cette fonction a de sérieux atouts qui pourraient régler des problèmes que nous rencontrons quand nous développons nos solutions FileMaker.
C’est tout pour aujourd’hui, notre séance s’arrête là. Ça n’est pas remboursé. 🙂