Author: Fabrice Nordmann

  • FileMaker 12 – Video – Modèles

    FileMaker 12 – Video – Modèles

    La nouveauté la plus visible de FileMaker 12 : les modèles

    Tout ou presque (on en garde sous le coude) ce qu’il faut savoir sur les modèles de la 12. Comment les manipuler, comment modifier un thème ou en créer, et mille et unes choses à savoir dans cette loooooongue vidéo d’une heure !

  • FileMaker 12 – Video – Aperçu

    FileMaker 12 – Video – Aperçu

    FileMaker 12, une révolution ?

    Vous vous souvenez peut-être avoir ici même, il y a deux ans, découvert FileMaker 11 à l’instant où il a été annoncé par FileMaker Inc.

    Bien que FileMaker 11 ait apporté son lot de nouveautés dont certaines étaient vraiment intéressantes, j’avais développé un sentiment mitigé. Parfois jugé sévèrement des évolutions timides.

    Pour FileMaker 12, disons-le d’entrée, rien de tel. Toute la gamme de produits (FileMaker Server, FileMaker Pro, FileMaker Go) évolue d’une manière magnifiquement cohérente. Il s’agit tout simplement de la plus grosse évolution de FileMaker depuis la version 3 et le modèle relationnel.

    Quoi ?! plus importante que le passage de 6 à 7 ?

    Oui, FileMaker 12 est une révolution.

    Rassurez-vous. Bien que FileMaker 12 utilise un nouveau format de fichier, la migration est très simple à effectuer. Un peu comme quand on est passé de 3 à 4. Par contre, sur le plan fonctionnel, oui, la révolution est comparable au passage de 6 à 7. En tant que développeur et concepteur d’applications, je pense même que la version 12 changera plus ma vie et celle des utilisateurs. Comment ? Nous l’effleurerons ici, et reviendrons plus en détails dans des vidéo à paraître les jours prochains.

  • CQDF 2012. Première conférence sur FileMaker 12

    CQDF 2012. Première conférence sur FileMaker 12

    FileMaker 12 étant maintenant disponible, voici le véritable contenu de la session que nous présenterons à la conférence CQDF 2012 (Montréal 11-12 mai 2012), qui devient de fait la première conférence FileMaker au monde après la sortie de FileMaker 12.

    N’ayons pas peur des mots, cette session va apporter une révolution, permise par FileMaker 12 mais pas forcément évidente.

    Entre autres, au menu de cette session :

    • interactions avec les webviewers, permettant d’ajouter tout élément d’interface, notamment avec jQuery
    • délégation au serveur de tâches lourdes, rendant instantanés des traitements qui prenait plusieurs secondes, notamment sur un réseau distant ou avec FileMaker Go.
    • véritables calculs au niveau du modèle rendant inutile des dizaines de rubriques et de scripts

    et ce ne sont que 3 exemples de ce que nous verrons lors de cette session.

    Un vrai conseil pour les développeurs FileMaker : soyez-y !

  • fmcloud.fm Hébergement FileMaker 12

    fmcloud.fm Hébergement FileMaker 12

    FileMaker 12, 1-more-thing annonce la mise à jour de ses offres d’hébergement, désormais compatibles avec FileMaker 12.

    Testez gratuitement votre solution sur nos serveurs ! (envoyez-nous simplement un lien de téléchargement et nous prendrons contact avec vous)

    Surprise ! Nous offrons à tous nos clients d’hébergement FileMaker 12 notre technologie maison “FMSDIFM” (FileMaker Server Does It For Me). Une technologie simple mais tellement puissante qui vous permet de décharger votre FileMaker client (Pro ou Go) et de confier à FileMaker Server les tâches gourmandes en ressources.

  • Libellés d’onglets calculables et formatables

    Cette astuce très simple fait suite à une demande revenant souvent sur les forums : comment utiliser le formatage conditionnel ou modifier le libellé des onglets par calcul.

    Le fichier d’exemple (télécharger) est le même que celui de l’article sur les Bibliothèques

     

  • Le graphique des liens

    Le graphique des liens

    Quelques petites et grandes choses à savoir sur les liens dans FileMaker

    FileMaker propose plusieurs manières de formuler des requêtes sur la base de données. (scripts, calculs, recherches, interfaces sql, xml…). Mais c’est bien les liens qui donnent le plus de fil à retordre au développeur expert comme au débutant.

    Voici quelques petites astuces de manipulation et quelques idées plus fondamentales qui vous aideront à mieux appréhender cette outil.

    Attention, une maîtrise minimale des liens et de la logique relationnelle est nécessaire pour suivre cette vidéo.

    Télécharger

     

  • Communications structurées

    Communications structurées

    (une fonction FileMaker pour la Belgique)

    Si vous développez des solutions FileMaker pour une organisation belge, vous avez peut-être parfois besoin de créer des numéros communications structurées.

    Nous avons récemment publié une fonction personnalisée qui vous permet, à partir des 10 premiers chiffres (libres), de formater et compléter la communication.

    Ainsi, si vous composez une chaîne telle que 1234567890 (constituée, par exemple, du numéro de client et du numéro de facture), cette fonction vous rend le résultat : 123/4567/67890/02. (les deux derniers caractères étant la clef de validation de la communication)

    http://fmfunctions.com/fid/321

    Cette fonction n’est pas récursive, c’est-à-dire que si vous ne disposez pas de FileMaker Pro Advanced, vous pouvez utiliser la formule comme un simple calcul en remplaçant simplement _input = _char10 par _input = [votre chaîne de 10 caractères]

  • Créer des enregistrements liés “par en haut”

    Créer des enregistrements liés “par en haut”

    Deux techniques faciles pour améliorer l’expérience utilisateur

    Quand un utilisateur souhaite créer rapidement des enregistrements liés, une table externe basée sur un lien autorisant la création semble toute indiquée.

    Néanmoins, cette technique native présente quelques inconvénients :

    • il faut défiler jusqu’à la première rangée vide pour pouvoir créer de nouveaux enregistrements liés.
    • l’utilisateur doit savoir que c’est la première rangée vide et uniquement celle-ci qui permet la création.
    • des éléments d’interface seront présents sur cette dernière rangée vide, alors qu’il n’y a pas lieu (un bouton de suppression par exemple, qui ne sert à rien puisqu’il n’y a, justement, pas d’enregistrement)

    Voici un fichier qui présente deux techniques simples pour permettre à l’utilisateur de créer des enregistrements dans une table externe depuis un champ de saisie situé au-dessus de celle-ci.

    L’une, la plus simple, est disponible depuis FileMaker 7 (moyennant une petite adaptation du calcul qui utilise la fonction Contenu, apparue avec FileMaker 9)

    L’autre se base sur les filtres de tables externes filtrées, apparus en FileMaker 11.

    Télécharger

  • Un point de vue sur “le cloud”

    Un point de vue sur “le cloud”

    La planète informatique s’affole, on ne parle plus que de ça dans les services IT ou dans les PME. La sortie imminente d’iCloud -la version d’Apple du “nuage”- provoque un buzz incroyable… bref, vous avez déjà sans doute tout lu ou tout entendu au sujet du cloud.

    Pourtant, en tant que chef d’entreprise -et donc d’utilisateur du nuage- mais également en tant que consultant susceptible de conseiller mes clients dans leurs choix technologiques, j’ai pensé que mon point de vue sur la question pouvait vous intéresser.

    Comme vous l’avez sans doute déjà compris dans le discours ambiant, si vous n’êtes pas utilisateur du nuage, vous êtes has been. Votre entreprise se dirige vers une faillite certaine… c’est l’évidence.

    Ah bon ?

    Ce type de discours est tellement stéréotypé, que sans présager de son inexactitude, il me semble prudent de me demander de qui il émane.

    Or, c’est amusant, je retrouve les mêmes type de discours à propos du nuage que ceux que j’entendais à la fin des années 90 sur “la nouvelle économie”. L’aveuglement de ceux qui les professaient comme de ceux qui les écoutaient devant mener à la constitution puis à l’explosion de “la bulle Internet”.

    Si les discours sur le nuage ressemblent à ceux de l’époque, c’est qu’ils viennent parfois des mêmes auteurs. Aux Etats-Unis, on les appelle des “évangélistes”. Le terme en soi devrait nous appeler à la plus grande méfiance.

    Que l’on s’entende bien : ce qui va suivre dans cet article est un discours dissonant, critique. Mais ne sautez pas à la conclusion que je ne verrais rien d’intéressant dans le nuage. Comme vous allez le voir, un minimum de sens critique peut nous permettre d’utiliser le nuage à bon escient.

    Durant la “bulle Internet”, tout le monde était numéro un mondial dans son secteur… et tout ce qu’on savait faire était programmer un vague site web avec une ergonomie acceptable et, grand luxe, une interface vers une base de données. Peu importait qu’on n’ait jamais eu d’expérience de la logistique pour s’improviser supermarché en ligne, qu’on n’ait aucune expérience du recrutement pour constituer une plateforme sur l’emploi, qu’on n’ait jamais regardé autre chose que son écran pour lancer son business de tirage de photos…

    C’était la “nouvelle économie”, le monde allait marcher comme ça, et tout ce beau monde “levait” des millions pour des startup qui n’avaient oublié qu’un détail : en économie -même “nouvelle” !-, les entreprises doivent générer des richesses.

    Ceux qui faisaient valoir un point de vue critique étaient inévitablement taxés de passéistes peu dignes d’intérêt.

    Le discours dominant sur le cloud est à peu de chose près aussi irrationnel.

    Comme à l’époque, ces fanatiques -j’ose le mot !- sont éblouis par ce qui n’est en réalité qu’un effet de bord. Il est exact que les services proposés par des acteurs majeurs tels que Google ou Apple offrent des fonctionnalités très intéressantes. Celui qui n’a jamais créé un “spreadsheet” (feuille de calcul) sur Google Documents ou équivalent ne peut se rendre compte des avantages que cela représente par rapport à un document Excel résidant sur le disque dur d’un poste de travail.

    Il est exact que cela rend le partage d’informations, et donc la collaboration, extrêmement faciles. Plus besoin de s’envoyer le document Excel, de devoir attendre les modifications de notre interlocuteur avant de pouvoir modifier à nouveau. Plus d’e-mails oubliés ou de mélange de versions de documents.

    Ces possibilités sont perçues comme déterminantes dans l’économie d’aujourd’hui, où les décideurs sont de plus en plus mobiles, où la vitesse à laquelle l’information peut être centralisée et analysée est un facteur clef de réussite, et enfin où Windows a perdu son monopole, notamment à cause (ou grâce) à la spectaculaire remontée du Mac, mais bien davantage encore à l’explosion des smart phones et des tablettes (iPhone, iPad, Android, BlackBerry, Windows Mobile…)

    Déterminantes, elles le sont. Je n’en disconviens pas. Mais ceci ne doit pas occulter les changements fondamentaux qu’entraîne un recours massif aux services du cloud.

    La première conséquence, notamment pour les entreprises, c’est la relocalisation de leurs données. Jusqu’à récemment et encore aujourd’hui, les entreprises prenaient en charge elles-mêmes le stockage, les sauvegardes et la sécurité de leurs données. Un autre avantage du cloud est d’ailleurs d’alléger la facture, notamment en réduisant l’investissement nécessaire pour maintenir des serveurs à jour. Mais attention : les grands acteurs des clouds publics ne peuvent garantir la localisation des données, c’est-à-dire que vous ne savez pas du tout où elles se trouvent. Elles sont même dans certains cas réparties sur des serveurs différents, aux quatre coins de la planète. (J’espère malgré tout que vous les retrouverez plus facilement que les coins du globe…)

    Rien ne dit que la note que vous avez prise sur votre iPhone afin de la retrouver sur votre PC n’est pas entre temps stockée en Chine ou dans une autre contrée.

    Or les lois sur la protection des données ne sont pas les mêmes, loin s’en faut, selon les pays.

    Par exemple, 100% des données stockées sur le service iCloud d’Apple seront localisées aux Etats-Unis, et donc soumises au Patriot Act, Ce qui veut dire qu’elles peuvent être réquisitionnées à tout moment par les autorités américaines. Si j’insiste sur le cas d’Apple, c’est qu’iCloud va sortir dans quelques jours, mais la situation avec Office 365 de Microsoft n’est nullement différente.

    Pire, les sociétés américaines sont susceptible de transmettre l’information que vous leur auriez confiée, y compris si leurs serveurs sont situés en Europe !

    Après tout, si vous avez cru à la nouvelle économie et à ses éléphants roses, pourquoi ne pas croire que l’administration américaine (ou une autre disposant de prérogatives équivalentes ou supérieures) ne fera jamais usage de vos données ?

    Plus immédiatement, la confidentialité est également mise à mal par les conditions générales des services concernés, qui fluctuent à chaque modification du service. Quelle est la PME dont le service juridique a le temps de lire et d’analyser ces dizaines de pages de ces conditions à chaque fois ? Je n’en connais pas. Or la confidentialité (privacy) est une notion en pleine évolution, et entamée par les déclarations régulières de dirigeants du cloud (notamment Mark Zuckerberg pour FaceBook, ou Eric Schmidt pour Google), et donc soumise de manière régulière à des interprétations changeantes exprimées dans ces contrats.

    Il convient désormais de remonter à la question première : le cloud, qu’est-ce que c’est ?

    Le cloud (nuage en français), c’est justement l’idée que les données sont décentralisées, et accessibles par le biais d’une connexion internet, à l’aide d’un logiciel dit client léger, le plus souvent un simple navigateur web.

    Or ce concept est tout sauf nouveau. L’utilisation d’un client léger (terminal) interagissant avec des données sur un système central fût même la réalité de l’informatique jusqu’à l’apparition des ordinateurs individuels (PC) dans les années 80. La grosse différence est qu’au lieu d’être centralisées (sur un serveur bien identifié), elles sont au contraire réparties sur une myriade de serveurs formant une nébuleuse, d’où le nom de nuage. Pour l’utilisateur, cela ne fait pas une grosse différence.

    Mais si ce qui était perçu comme archaïque quand les ordinateurs individuels sont apparus est désormais considéré comme le dernier cri, c’est que les clients légers (navigateurs) permettent désormais un confort de travail (ergonomie) dû notamment à l’évolution des moteurs de rendu, et en particulier de javascript, mais également -surtout- une grande compatibilité. Les normes établies par le W3C permettent à n’importe quel navigateur de traiter une grande variété de fichiers, dont les spécifications répondent à pratiquement tous les besoins. Que vous travaillez sur un texte, une image, un plan, une composition graphique ou musicale, une base de données… il existe un ou plusieurs formats lisibles par un navigateur. Le service cloud n’a plus alors qu’à vous proposer l’interface pour gérer vos documents ou les modifier.

    Les avantages de ces services sont donc nombreux. Parmi eux on citera :

    • la réduction du coût du matériel : plus besoin de serveur local, plus besoin de machines très puissantes -un simple netbook ou un téléphone est aussi bien équipé pour l’utilisation du cloud qu’un monstre de puissance quadri-processeur…
    • aucun logiciel client ne doit être installé sur le poste client -du moins si l’on s’en tient aux services utilisables depuis un navigateur. (d’autres services, comme DropBox, demandent une installation)
    • ces services permettent le travail collaboratif en temps réel (plusieurs personnes peuvent agir simultanément sur le même document)
    • un utilisateur n’a plus besoin de synchroniser ses différents postes de travail (téléphone, PC, tablette…)

    Les inconvénients sont notamment :

    • une perte de contrôle de l’endroit où sont effectivement stockées les données (avec des implications de confidentialité, mais également fiscales).
    • une récupération de sauvegarde dépendant d’un service extérieur à l’entreprise, et donc pas toujours aussi prompte à réagir qu’un service informatique interne.
    • la nécessité d’avoir un accès correct à Internet en permanence, et ce point est extrêmement sous-évalué par les évangélistes du cloud. Pas plus aux Etats-Unis qu’en Europe de tels accès ne sont garantis partout. De nombreuses situations nous laissent sans connexion à Internet (transports, absence ou saturation du réseau 3G…)
    • un impact écologique désastreux. En effet, pour assurer la répartition entre les serveurs (load balancing), et la redondance des données (mirroring), les opérateurs doivent passer par des systèmes de synchronisation complexes (middleware) qui consomment une énergie faramineuse. On nuancera toutefois en remarquant que l’importance du succès des smart phones et tablettes permet de contrebalancer cet effet : si la consommation électrique est multipliée du côté serveur, elle baisse très vite du côté client (un téléphone consommant moins qu’un PC). Il faut donc certainement être prudent sur ce point, voire optimiste sur l’évolution à terme.

    A voir ces deux listes, il apparaît clairement -du moins sur l’aspect “révolutionnaire” du nuage- que les inconvénients l’emportent sur les avantages, quand bien même ceux-ci sont particulièrement alléchants. Mais ceci ne tient pas compte d’une notion fondamentale, et souvent occultée :

    Il y a cloud et cloud.

    D’ordinaire, la multiplication des nuages dans le ciel n’est pas bon signe. Dans ce cas, elle l’est. En effet, les inconvénients majeurs du cloud concernent ce que l’on appelle le cloud public. C’est-à-dire des serveurs mutualisés où vos données côtoient les données d’autres.

    Or il existe aussi la notion de cloud privé. Dans ce cas-ci, l’entreprise mettra en œuvre son propre cloud sur des serveurs qui lui appartiennent ou qui appartiennent à un prestataire bien identifié. Selon les prestataires, elle disposera de tels ou tels services, ou pourra installer ses propres logiciels.

    De nombreux logiciels -souvent Open Source- peuvent ainsi être installés sur un cloud privé. C’est le cas du célébrissime Wikimedia (sur lequel tourne Wikipedia), ainsi que Google Calendar, ou le défunt (et regretté) Google Wave.

    Dans le cas du cloud privé, le problème de confidentialité est -en principe- relégué à une question de sécurité informatique, la récupération d’une sauvegarde peut être contrôlée par l’utilisateur, et l’impact écologique est a priori moindre. Dans le cas où le cloud privé est sur le réseau physique de l’entreprise, la problématique de la connexion à Internet n’est pas plus criant que dans l’informatique “pré-nuageuse”.

    On voit donc qu’il existe des solutions aux principaux problèmes évoqués, tout en gardant la totalité des avantages. Seulement, sauf à créer un cloud privé en louant plusieurs fermes de serveurs (ce qui se fait fréquemment pour des grosses entreprises comme les banques), on passe de la décentralisation sans limite et sans contrôle à une forme de re-centralisation (sur un ou quelques serveurs).

    Autrement dit, nous sommes dans une architecture client/serveur classique, avec un client léger (navigateur). Cette solution est excellente, mais… bienvenue dans les années 1970 ! on n’a rien inventé !

    La révolution qui est en marche comporte bien des pièges. En prenant le recul pour les éviter, nous sommes convaincus que vous sortirez gagnant de votre transition au nuage.

    Et en attendant, au vu de l’été qui vient de s’écouler, espérons qu’il n’apporte pas trop de pluie !

  • Create related records from a field above a portal

    Two easy techniques to improve user experience

    If a user wants to easily create related records, a portal based on a relationship set to allow creation is obviously appropriate.

    Nevertheless, this built-in technique has some cons:

    • the user needs to scroll to the first empty row before being able to create new records.
    • he must know that only the first empty row allows creation.
    • some interface elements are displayed on this empty row, while they make no sense (i.e. a deletion button, useless because there is yet no related record to delete)

    This sample file presents two easy techniques that allow creation from a field placed above the portal.

    The first one, the easiest as well, has been available since FileMaker 7 (although the auto enter calculation would require a little adaptation, because it’s making use of Self function, a FileMaker 9 feature)

    The second one uses filtered portals, a FileMaker 11 feature.

    Download

  • CQDF 2012, Montréal

    CQDF 2012, Montréal

    1-more-thing annonce sa participation à la conférence CQDF 2012 qui se tiendra à Montréal les 11 et 12 mai 2012.

    Fabrice Nordmann y présentera une session dont le sujet sera révélé ultérieurement, mais qui contribuera à faire de cette deuxième édition un incontournable, avant la FileMaker DevCon de juillet à Miami.

  • Vidéo : Figer l’ensemble trouvé

    L’ensemble trouvé est un concept-clef de FileMaker, à tel point qu’on oublie parfois de l’expliciter. Or sa maîtrise est indispensable, tant pour le développement que pour l’utilisation de FileMaker.

    Un point méconnu et souvent source de problème dans les solutions multi-utilisateurs est la différence entre afficher tous les enregistrements et figer un ensemble trouvé de tous les enregistrements.

    Au travers d’une courte vidéo, apprenez comment éviter ce piège.

  • Bibliothèques

    Bibliothèques

    Gestion de libraries avec FileMaker

    Dans ce numéro, nous présentons des techniques que nous utilisons souvent pour la gestion des bibliothèques (libraries) dans FileMaker, notamment pour les images de l’interface et les chaînes de texte.

    Ces techniques sont très simples à mettre en œuvre, et facilitent grandement le développement en rendant le contenu de ces libraries toujours disponible, quelque soit le contexte ou le mode.

    Télécharger

  • Pause on Error London 2011

    1-more-thing annonce sa participation à la première conférence européenne Pause on Error, qui aura lieu à Londres les 20 et 21 octobre 2011.

    Jean-Frédéric Struyven et Fabrice Nordmann y présenteront une session sur quelques techniques maison.

  • Pause on Error 2011

    Nous sommes heureux d’annoncer la participation de 1-more-thing à la conférence Pause On Error 2011, qui aura lieu les 16 et 17 février à New York.

    Fabrice Nordmann y présentera une session technique sur l’utilsation du XML au sein de FileMaker.

  • Des cases à cocher pour un choix exclusif (unique)

    FileMaker propose plusieurs présentations pour sélectionner des éléments dans une liste de valeurs. Or il n’est pas aisé de proposer un choix exclusif parmi plusieurs valeurs.

    Les boutons radio (ou cercles d’options) devraient permettre ceci, mais malheureusement, le maintien de la touche majuscule permet à l’utilisateur de choisir plusieurs valeurs, même avec ces boutons radio.

    Cette astuce permet de contourner cette difficulté, et de proposer de vrais choix exclusifs.

    Télécharger

  • Boucles

    Boucles

    Si vous n’avez pas de notions de programmation, les boucles sont certainement l’aspect le plus déroutant de l’écriture de scripts.

    Si vous êtes au contraire un développeur né, la simplicité des boucles dans FileMaker est également l’aspect le plus déroutant de l’écriture de script.

    Dans cette vidéo, nous explorons plusieurs techniques, trucs et astuces pour faciliter la programmation de de ces fameuses boucles.

    Télécharger

     

     

  • 1-more-thing, sponsor de la FM Conf 2011

    1-more-thing, sponsor de la FM Conf 2011

    Pour sa 7ème édition, la FM Conférence se déplacera à La Rochelle du 19 au 21 mai 2011.

    1‑more‑thing est heureuse d’y apporter une nouvelle fois son soutien, et d’y présenter ses services pour les développeurs et utilisateurs de FileMaker.

    La FM Conférence est organisée par La Source Multimedia et FileMaker France

  • FileMaker : Eviter le “Hard-coding”

    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 (FileMaker 10 a depuis la publication originale de cet article, introduit la fonction ObtenirNomRubrique, qui rend cette affirmation caduque) :
    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 (nous partons du principe dans cet article qu’un script qui ne fonctionne plus n’est pas un résultat souhaitable). 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.

    Si j’ai bien travaillé, et même si vous meniez jusqu’à maintenant une vie tranquille, vous êtes maintenant angoissé et vous demandez quels éléments de vos solutions il vous est interdit de renommer.

    Non, non, il n’y a pas de quoi, c’est en toute amitié.

    Alors nous y voilà, voici la technique promise. Elle tient en une fonction personnalisée, publiée depuis quelques temps sur FMFunctions.com :

    FM_Name_ID ( _Name_ID ; _TLFSV ; _fileName ; _layoutName )

    Commençons par décrire cette fonction, nous verrons ensuite pourquoi et comment l’utiliser.

    Les paramètres sont :

    • _Name_ID : on peut y mettre le nom d’un élément ou son identifiant. Prenons par exemple le nom de notre modèle “Clients_Liste” (à ce stade, on ne connaît que son nom)
    • _TLFSV : ce paramètre nous servir à dire à la fonction de quoi il s’agit :
      • “Table” ou “T” pour une occurrence de table
      • “Layout” ou “L” pour un modèle
      • “Field” ou “F” pour une rubrique
      • “Script” ou “S” pour un script
      • “ValueList” ou “V” pour une liste de valeurs
    • _fileName : le nom du fichier dans lequel cet élément ce trouve. Un paramètre vide (“”) signifie : le fichier courant, Obtenir ( NomFichier )
    • _layoutName : ce paramètre ne doit être rempli que si le type est “Field” ou “F”. Là encore, un paramètre vide signifie le modèle courant. (Note : Comme pour les fonctions de Design de FileMaker, ce paramètre prend en fait le nom d’une occurrence de table si elle existe, et le nom du modèle sinon. Par exemple, si vous mettez “Clients” et que vous avez une occurrence de table nommée “Clients”, elle sera prise en compte, avec priorité sur un éventuel modèle “Clients”.)

    Passons maintenant notre modèle “Clients_Liste” à la moulinette :

    FM_Name_ID ( "Clients_Liste" ; "L" ; "" ; "" )

    On obtient le résultat 121. Ça ne marche pas chez vous ? vous obtenez 63 ? Mais c’est normal ! L’identifiant du modèle “Clients_Liste” est 121 dans mon fichier, et 63 dans le votre. Mais c’est un identifiant, c’est à dire que son intérêt est qu’il ne changera jamais. Le jour où vous le renommerez “Clients_tableau”, il aura toujours l’identifiant 63 (ceux qui pensaient 121 ont besoin de faire une petite pause ;))

    Tiens, mais c’est intéressant, ça, un identifiant !

    Et si dans le script, au lieu d’appeler mon modèle par son nom, je l’appelais par son identifiant ? mon problème serait réglé ! Il suffit donc de sélectionner, dans l’action de script Activer Modèle, l’option (calcul par ID).

    Ah ! on me dit dans l’oreillette que cette option n’existe pas… quel dommage !

    Heureusement, notre fonction magique va régler le problème, car elle fonctionne dans les deux sens !

    Je sais que mon identifiant est 121 (oui, chez moi, je vous rappelle que c’est 121), je vais donc appeler le modèle avec Activer Modèle (calcul par Nom) avec le calcul suivant :

    FM_Name_ID ( 121 ; "L" ; "" ; "" )

    Le résultat est… mais oui, vous avez deviné : “Clients_Liste” 
Et dans quelque semaines, il sera “Clients_Tableau” 
Donc mon script fonctionnera tout le temps !

    Certains feront sûrement remarquer que FM_Name_ID ( 121 ; “L” ; “” ; “” ), ce n’est pas très lisible.

    On ne peut pas vraiment leur donner tort.

    Une fois de plus, je ne saurais mieux conseiller que de commenter ! Rien ne vous empêche d’écrire :

    FM_Name_ID ( 121 ; "L" ; "" ; "" ) // Clients_liste

    et le jour où le modèle devient “Clients_tableau”, ben ma fois ce n’est pas bien grave. Le commentaire sera suffisant pour comprendre de quoi il s’agit, et on pourra le changer à l’occasion, sans avoir nuit au fonctionnement de la solution.

    D’autres feront remarquer (car ils sont très perspicaces, tendance sceptiques), que c’est bien joli d’aller chercher l’identifiant des scripts, modèles, rubriques… mais que cela prend du temps.

    Deux choses que vous pouvez faire :

    • laisser dans votre Visualiseur de données les formules qui vous permettent d’accéder à l’information rapidement (j’ai par exemple toujours l’identifiant du modèle courant et du script courant sous les yeux.)
    • noter les identifiants des éléments pour ne pas avoir besoin de les chercher une deuxième fois. Mais où les noter ? Ben… dans le nom, pardi ! maintenant qu’on peut renommer à coeur joie :). Et comme ce n’est vraiment pas très joli pour les rubriques (Nom_364 et Total_facture_857 ne sont pas très agréables), vous pouvez utiliser la zone de commentaires (au-dessous du nom de la rubrique)

    Voilà, c’est tout pour aujourd’hui. J’espère que vous avez apprécié les illustrations ainsi que la musique originale.

    Le web en parle

    Cet article a été publié en Français dans Le Blog FM, et en Anglais dans FileMaker Advisor (réservé aux abonnés)

    Matt Petrowsky a également publié une vidéo dans FileMaker Magazine

    Kevin Frank a également écrit un article sur le sujet sur FileMaker Hacks

  • FileMaker : Variables et rubriques globales

    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 *. Elles ne passent pas non plus la barrière de la fonction Evaluation**
    • 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 !

    * 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

    ** Definir ( var = 1 ; Evaluation ( var + 1 )) ne fonctionnera pas car var n’est pas passée à la fonction Evaluation.

    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.

    Le type de données

    Voyons maintenant quel type de données les variables peuvent contenir, par comparaison aux rubriques globales. Tout d’abord, il faut noter la différence dans la manière dont on type ces données. Dans le cas des rubriques globales, on choisit un type pour la rubrique dans le petit menu où nous retrouvons Texte/Nombre/Heure/Date/Horodatage/Multimedia. Je ne parle pas du type calcul, qui n’est pas à proprement parler un type, puisque le type de résultat d’un calcul se définit en bas à gauche de la définition de calcul. Il peut être global également. Bref, tout ceci prend du sens si on se dit que dans d’autres langages, un “calcul” s’appelle une “requête”, mais bon, le huitième jour, Il avait vraiment mal au crâne.

    Dans le cas des variables, le typage se fait automatiquement, mais c’est parfois quelque chose de méconnu. Si on définit une variable telle que = “bonjour le monde”, le fait de mettre une constante de texte entre guillemets (ou de faire appel à une rubrique de type texte) typera la variable comme texte. Si on n’utilise que des données de type date, la variable sera de type date…

    Je recommande souvent de forcer le type de variable à l’aide des fonctions ObtenirTexte(), ObtenirNombre(), ObtenirDate(), ObtenirHorodatage()

    Cela rend le code plus lisible et évite les mauvaises surprises.

    En revanche, et c’est également méconnu, les variables peuvent contenir tous les types de données gérés par FileMaker. Tous ? oui ! Cela veut dire que l’on peut parfaitement stocker une image ou un fichier dans une variable globale.

    Truc : on notera toutefois un bug pénalisant si vous essayez de stocker un long texte dans une variable globale. L’application se verra dramatiquement ralentie. Ceci ne se produit pas si vous découpez votre texte en plusieurs variables ou… que vous choisissez de le stocker dans une rubriques globale.

    La méthode pour les définir

    Cela semble assez évident, mais cela a de grandes conséquences : on ne définit pas une rubrique globale comme une variable globale.

    Une variable globale peut être définie soit par script (Définir Variable()), soit par simple calcul, grâce à la fonction Définir() : Définir ( $$maVariable = “bonjour le monde !” ; “” )

    C’est là un immense avantage, car on peut alors dès lors définir des variables sur chaque intervention du moteur de calcul : auto-entrée, contrôle, calcul pour ce qui concerne la définition de la base de données, mais aussi jeux de privilèges, et surtout au niveau du modèle (infobulle, web viewer, formatage conditionnel, et même [[jeux de menus personnalisés]FileMaker Pro Advanced est requis pour mettre en place ces possibilités]).

    Pour définir une rubrique globale, vous devez utiliser l’action de script Définir rubrique(). Personnellement, je rêve d’une fonction de calcul qui définirait une rubrique. On peut faire ce genre de choses (et bien plus) avec un plug-in comme DoSQL de myFMbutler, mais pas avec FileMaker tout seul.

    On en oublierait presque qu’à l’inverse, il existe une méthode de définition de la rubrique globale qui n’existe pas pour la variable, et pas des moindres ! Allez, allez, laquelle ? Votre langue au chat ? Ben… c’est l’utilisateur, pardi ! L’utilisateur est également un très bon moyen de définir une globale. Muni de son petit clavier et de sa petite souris, mais aussi des menus déroulant, cases à cocher, et autres boîtes de dialogue que vous aurez bien voulu mettre à sa disposition.

    Les utilisations

    Du fait que la rubrique globale est propre à l’utilisateur, on l’exploitera justement pour tout ce qui est interface (filtres de table externe, images, libellés que l’on veut voir persister en mode recherche…). L’avantage de la rubrique est ici double : modifiable par l’utilisateur (par exemple pour filtrer une table externe via un menu déroulant), et surtout, affichable sur le modèle ! Second rêve du jour : pourvoir insérer un calcul directement sur le modèle, et en particulier une variable globale. On peut déjà, et depuis toujours, insérer une “rubrique de fusion”, le nom de l’utilisateur, la date courante… je parie qu’insérer une variable ne coûterait pas des mois de développement à FMI !

    Une “rubrique globale” peut également servir de “rubrique clef” au départ d’un “lien” (je vous assure, FileMaker est vraiment un langage codé !), ce qui n’est pas possible avec une variable (troisième songe ?). Ainsi, tous les liens relatifs à l’interface (la vue de l’utilisateur courant) doivent être basés sur des rubriques globales.

    Voilà, j’espère avoir fait à peu près le tour, et que ça aidera certains à y voir plus clair

     

    Cet article a été publié sur Le Blog FM et a été repris par FileMaker Inc. dans sa Newsletter d’Octobre 2008.