FileMaker : Eviter le "Hard-coding"
Fabrice Nordmann | 11 novembre 2010
Depuis toujours, on est parfois contraint avec FileMaker de "hard-coder", c’est à dire d’insérer en dur et entre guillemets des constantes de texte se rapportant à la structure de la base de donnée.
Par exemple, pour définir un calcul auto-entré en fonction de la rubrique active, on devra écrire :
Si ( Obtenir ( NomRubriqueActive ) = "leNomDeMaRubriqueEnToutesLettres" ; A ; B )
autre exemple célèbre, les listes de valeurs :
ElémentsListesValeurs ( Obtenir ( NomFichier ) ; "leNomDeMaListeEnToutesLettres" )
Ceci est dû à l’absence de fonction permettant d’interroger la structure de la base de données. On ne peut écrire, à la place de la première expression [1] :
Si ( Obtenir ( NomRubriqueActive ) = leNomDeLaRubriqueDontJeSuisEnTrainDeDéfinirLeCalcul ; A ; B )
ni, à la place de la seconde :
ElémentsListesValeurs ( Obtenir ( NomFichier ) ; laListeDesBidulesDontJAiOubliéLeNom )
Avec la généralisation de techniques comme l’utilisation de plug-ins pour le déclenchement de scripts -FileMaker boudant décidément la programmation sur événement-, ou des scripts standardisés de navigation comme les LayoutProperties, ce problème a atteint une ampleur critique et touche le nom des scripts et des modèles, et même les occurrences de tables. Je ne parle même pas de l’API php, qui oblige à TOUT hard-coder, car la technique que je vais vous présenter ne règle pas ce cas. On pourra éventuellement développer l’équivalent pour le côté php.
Mais au fait, quel est vraiment le problème ?
Principalement, le fait de référencer un élément en tant que constante de texte dans un calcul empêche ensuite de modifier le nom de cet élément, à moins d’explorer à fond tout le DDR (Rapport de Structure de Base de Donnée) avant chaque modification.
Imaginons que vous ayez un modèle "Clients_liste", et un script qui active ce modèle en utilisant l’action Activer modèle (nom par calcul) Imaginons qu’au cours de votre développement, ce modèle devienne un format tableau. Vous le renommez fort opportunément "Clients_tableau". Bien.
Sauf que paf ! votre script ne fonctionne plus [2] . Avec le temps, votre solution est truffée de choses bizarrement nommées, qui font tout autre chose que ce que leur nom indique, et vous ne vous y retrouvez plus (sans parler de vos éventuels collaborateurs ou de votre client, s’il a accès au code source)
Aussi, vous passez des heures à vous acharner sur un calcul qui ne marche pas, pour finalement vous rendre compte que vous avez fait une petite faute de frappe dans le nom du bidule. Que celui à qui ça n’est jamais arrivé se taise immédiatement, le seul réconfort dans ces situations étant de penser que les autres sont aussi bêtes que nous.
[1] FileMaker 10 a depuis introduit la fonction ObtenirNomRubrique, qui rend cette affirmation caduque)
[2] Nous partons du principe dans cet article qu’un script qui ne fonctionne plus n’est pas un résultat souhaitable


5 février 2010 19:16
FileMaker : Eviter le "Hard-coding"
salut Fabrice, pratique en effet. Je me souviens , quand je faisais des bases avec 4D en 1996, il y avait les "pointeurs" pour ce faire, et même l’équivalent des "triggers". FM est un tantinet en retard, mais au moins cela laisse la place pour des ingéniosités de ce genre. Merci Eric
7 février 2010 19:00
FileMaker : Eviter le "Hard-coding"
Sur le blog du forum et sur le forum lui mème, j’ai eu l’occasion de dire tout le bien que je pensais de cette FP généreusement partagée et que désormais j’utilise souvent. Je souhaite bonne chance à Fabrice pour cette nouvelle aventure, mais est-ce une aventure quand on est aguerri comme lui ?
Michel