Self (Contenu), la fonction cognitive de FileMaker
Self (Contenu), la fonction cognitive de FileMaker
4 October 2012 - Author : - Categories : Blog, Technique

Self (Contenu), la fonction cognitive de FileMaker

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.

self error message

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).freud

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.

FileMaker 9 : Une référence au contenu

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 :

  • un calcul auto-entré dans les options d’entrée automatique d’une rubrique
  • dans la définition du formatage conditionnel
  • il est également possible d’utiliser Contenu dans une rubrique calcul, mais très honnêtement nous nous lancerions ici dans une explication à côté de laquelle la psychanalyse serait futile.

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 ?

  • Modifier une donnée qui vient d’être entrée par l’utilisateur ou lors d’un import. Par exemple on pouvait supprimer les espaces avant et après le texte ainsi : Supprespaces ( Contenu ). Rien de neuf sous le soleil, mais cela permettait d’utiliser la même formule pour nettoyer plusieurs rubriques, alors qu’auparavant ce résultat n’aurait été obtenu que par la formule : Supprespaces ( nomDeLaRubrique ), qui aurait donc été différente d’une rubrique à l’autre.
  • Se référer au contenu d’une rubrique (ou d’un objet de modèle) pour le formater. Ainsi on peut, par exemple, colorer une rubrique différemment en fonction de la valeur qu’elle contient. Là encore, l’intérêt est de pouvoir utiliser la même formule pour le formatage de différents objets de modèle. Il y a là un second intérêt qui est que tout objet contenant quelque chose peut éventuellement être formaté en fonction. Petit bémol, seuls peu d’objets peuvent alors être formatés de la sorte. Seuls les éléments de texte et les rubriques sont concernés. Depuis FileMaker 12, les onglets peuvent également être formatés conditionnellement en fonction de leur libellé.

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.

FileMaker 10 : un pointeur multiple

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.

FileMaker 13 : de nouvelles possibilités

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.

  • référence de l’objet de modèle. A ce jour, il n’est toujours pas possible de connaître le nom de l’objet de modèle ayant déclenché un script, soit qu’il s’agisse d’un déclencheur ou simplement d’un bouton. Si on pouvait passer Self en paramètre de script et dans le script connaître tout de l’objet qui a déclenché le script, ce serait un grand progrès…
  • référence de la variable ou de la rubrique que l’on est en train de définir. Par exemple Définir variable [ $i ; Self + 1 ] au lieu de [ $i ; $i + 1 ] ou Définir rubrique [ Commissions ::liste ; Liste ( Self ; “Artichauts” )] au lieu de [ Commissions ::liste ; Liste ( Commissions ::liste ; “Artichauts” )]

C’est tout pour aujourd’hui, notre séance s’arrête là. Ça n’est pas remboursé. 🙂

Prev / Next Post

Add comment