Aller au contenu
  • billets
    30
  • commentaires
    35
  • vues
    509

À propos de ce blog

Le blog francophone de 1-more-thing

Billets dans ce blog

fabriceN

Un québécois dans la gang, ça c’est le fun !! Bon…ce n’était pas tant la volonté d’étendre notre rayonnement francophone, mais plutôt le souhait et l’opportunité de concrétiser une amitié professionnelle de longue date qui ont abouti à l’arrivée de Sylvain dans l’équipe de 1-more-thing. Aficionado de FileMaker, Sylvain a montré entre autres à travers […]

Cet article Sylvain Lapointe, votre interlocuteur Help Desk est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Premier épisode de la mini série consacrée au tri dans FileMaker. Trier peut signifier regrouper les choses d’une même nature. Dans cette démonstration, nous verrons comment procéder à des regroupements de données au moyen de tris, dans nos interfaces ou lors d’exportations d’enregistrements. En exploitant les possibilités de regroupement par sous-récapitulatifs, l’utilisateur manipule les données […]

Attention - cet article devrait plaire à @Marc Boucher :)

Cet article Et j’ai trié,…trié… (couplet 1) est apparu en premier sur 1-more-thing.

 

Afficher la totalité du billet

 

fabriceN

Vous n’en entendez peut-être même pas parler, mais plusieurs pays d’Afrique, notamment la Somalie, le Sud Soudan et le Nigeria connaissent actuellement une famine grave et qui est en train de tourner à la catastrophe majeure. La sous-médiatisation de cette famine entraîne un sous-financement des ONG capables d’agir. Or pour une famine, il faut agir […]

Cet article Urgence famine Afrique : vos licences FileMaker à la rescousse est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Tableau est un puissant outils d’analyse des données et depuis peu, il est devenu possible d’y connecter nos bases de données FileMaker à l’aide d’un connecteur dédié livré avec la version 16 de FileMaker serveur. Alors que nous testions ses possibilités dans le but d’en faire profiter nos clients, nous avons eu une mauvaise surprise : […]

Cet article QuickFix : Tableau et les séparateurs de décimales est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Comme tous les ans depuis 4 ans, nous nous rendons au mois de juin à Berlin, ou Egbert Friedrich @pixi organise “l’anti-conférence” dotfmp Une anti-conférence (unconference), c’est comme une conférence, mais au lieu de privilégier une transmission verticale (un orateur à son auditoire), on essaie d’en faire un lieux d’échanges horizontaux. L’orateur est plutôt un animateur d’une discussion […]

Cet article De retour de la dotfmp 2017 à Berlin est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

L’API-PHP de FileMaker est elle en fin de vie ? C’est une question que l’on pourrait se poser depuis qu’une nouvelle technologie est apparue dans FileMaker Server 16 pour nous permettre de partager les données d’une base FileMaker au travers d’un site web: l’API REST. Cependant, bien que cette nouvelle API (encore en version beta) apporte un […]

Cet article Non, l’API-PHP de FileMaker n’est pas morte ! est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

FileMaker 16 pour les développeurs – un réel besoin de se former 27 juin 2017 – Paris Réserver La sortie de FileMaker 16 en mai est très particulière. Alors que de version en version il suffit en général au développeur de parcourir la liste des nouveautés pour les comprendre, et quelques billets de blog pour […]

Cet article Événement FileMaker 16 : formation pour développeurs est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Pour chaque sortie majeure de FileMaker, il y a les fonctionnalités phare, mises en avant par l’éditeur, compréhensibles avec un simple screenshot… Et il y a les fonctionnalités moins en vue, qui sont souvent tout aussi importantes. FileMaker 16 ne déroge pas à la règle. Avec ce changement apparemment mineur que sont les sources de données externes […]

Cet article FileMaker 16 – Sources de données dynamiques est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Lors de la sortie de FileMaker 14, nous avions déjà publié un article sur ce sujet, car nous avions un début de solution à l’éternel problème des fins de ligne dans les fichiers exportés par FileMaker.

Mais FileMaker 16 met un terme à cette éternité : le problème est désormais résolu de manière propre.

Voici donc une petite vidéo qui explore la fonction TextEncode

 

 

 

Cet article Contrôle des fins de lignes (suite) est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Lors de la sortie de FileMaker 14, nous avions déjà publié un article sur ce sujet, car nous avions un début de solution à l’éternel problème des fins de ligne dans les fichiers exportés par FileMaker. Mais FileMaker 16 met un terme à cette éternité : le problème est désormais résolu de manière propre. Voici donc […]

Cet article Contrôle des fins de lignes (suite) est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

FileMaker 16 est une immense étape pour notre plateforme favorite. Au point qu’il nous est difficile de résumer toutes les nouveautés dans une ou deux vidéo de présentation —même en nous cantonnant aux évolutions majeures.

Aussi, nous avons décidé de publier dans les semaines à venir plusieurs vidéo plus spécifiques et approfondissant un sujet en particulier, toujours sous un angle un peu plus technique que ce que vous pouvez trouver par ailleurs sur le web.

Voici la première d’entre elles : les fenêtres carte. N’hésitez pas à laisser des commentaires ci-dessous, et à nous donner votre ordre de priorité pour les sujets à traiter dans les prochaines vidéos !

 

Cet article FileMaker 16 – les fenêtres carte est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

FileMaker 16 est une immense étape pour notre plateforme favorite. Au point qu’il nous est difficile de résumer toutes les nouveautés dans une ou deux vidéo de présentation —même en nous cantonnant aux évolutions majeures. Aussi, nous avons décidé de publier dans les semaines à venir plusieurs vidéo plus spécifiques et approfondissant un sujet en particulier, […]

Cet article FileMaker 16 – les fenêtres carte est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Sorry America but…

It is with great sadness that we have decided today to cancel our participation to the annual FileMaker Devcon next July.

We had planned to go there with our families, but we really feel, as foreigners, muslims, blacks, jews, latinos, gays and women, that we’re not welcome anymore to the United States, and certainly don’t feel like pretending we agree with the decision the American people made yesterday.

We’re not forgetting our friends and colleagues there. We know they’re as astonished and sad as we are: we’re so sorry for you and for your great country. May the force be with you!

The 1-more-thing team

Cet article Sorry America but… est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Sorry America but…

It is with great sadness that we have decided today to cancel our participation to the annual FileMaker Devcon next July. We had planned to go there with our families, but we really feel, as foreigners, muslims, blacks, jews, latinos, gays and women, that we’re not welcome anymore to the United States, and certainly don’t […]

Cet article Sorry America but… est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

ODBC Import technique

[Version française]

In this blog post, I will share a technique that Laurent Spielmann (@laurent_at_joes) and I developed together and that greatly simplifies imports. It uses ODBC import.

Have you never been bothered by inconsistent database structures between a data source and your own application?

Have you never cursed the SQL developer who uses as a unicity key a concatenation of several columns?

Have you never felt anxiety before renaming a field because it could break an import order?

Have you never lost your temper in front of a progress bar during a sync operation on a ESS table?

If you answered no to all of these, I’m jealous. This article is for the rest of us. 🙂

Some technical background for a start

FileMaker has had a great friend for a long time: ODBC.

ODBC is implemented in 3 very different manners in FileMaker. Let’s avoid confusion:

  1. FileMaker can be defined as an ODBC data source. It is not our topic today but it’s interesting because a FileMaker source interrogated via ODBC will act as any other database. An ODBC driver is provided with FileMaker Pro and FileMaker Server.FileMaker ODBC driver
  2. FileMaker can access ODBC data in the context of ESS (External SQL Source). The purpose is here to interact with external data as if they were FileMaker data, through table occurrences, layouts, scripts…). Since FileMaker 9, we used to be able to play with mysql, Oracle and SQL Server. Since the release of FileMaker 15, Postgresql and DB2 have joined the game. Note that on Mac, a third party driver is required (Actual Technologies). Since the release of ESS in FileMaker 9, developers tend to use it for all interactions with SQL sources. And that is a very bad idea. I admit that the fact that you can interact with external data just as if they were FileMaker data is great, but the cost in terms of performance is huge. ESS performance is well below ODBC potential.
  3. Finally, and that is often forgotten -and therefore our today topic— the capability to communicate with a SQL source by script.

What script steps are we talking about?

Two script steps allow interaction with ODBC sources:

  1. READ: Import records.
  2. WRITE: Execute SQL (I’m not talking about the ExecuteSQL calculation function, that can only read (SELECT), but of the Execute SQL script step, for good)

Note that it is not possible, at least to my knowledge, to read data from an external source without writing to a FileMaker table (import). One could expect that Execute SQL would return the result of a SELECT statement to a variable, but it doesn’t.
Tip: Execute SQL can also modify the structure of a database. (CREATE, DROP, ALTER…). Come back to this tip after reading this article. Could give you ideas.

Driver ? DSN ? what’s this?

The main reason why these features are somehow neglected is that they require a DSN (Data Source Name) to be installed at the operating system level, and sometimes, depending on the database, a specific driver.

A DSN is needed for the operating system to give applications access to an ODBC data source. ODBC is a standard that allows different databases to communicate using SQL. (Open DataBase Connectivity).

On the Mac, you have to setup a DSN using ODBC Manager, that used to be installed by default in /Applications/Utilities/ before Apple decided it was too good for you. Fortunately, unlike MagSafe connector and other great hardware and software features removed by Apple, ODBC Manager can still be downloaded here.

ODBC Manager

While it is true that setting up a DSN on each client machine is complex, it’s a snap to install it once on the server.

As a matter of fact, we’ve been able since FileMaker Server 9 to schedule scripts on server, and since FileMaker 13 to perform script on server from the client.

What’s more, and while Import Records [ ODBC data ] has always been server compatible, Execute SQL has become server compatible only with FileMaker Server 15. Enough to re-think some stuff!

To sum up: you can now set up a DSN only on the server and benefit from it on all clients, including Pro, Go, WebDirect and CWP.

However, the developer (that’s you) will also need to access the SQL sources in order to write scripts (namely to configure import orders). To address this you’ll simply have to set up the same DSN on your computer, paying attention to using exactly the same name. So you will be able to edit your scripts and the server can perform them.

We’re done with the technical setup. Now let’s focus on what’s interesting.

The plot

Here is a short summary of the situation we had to address. We have to import a massive amount of data stored in mysql.
Performance is a key here, and this excludes ESS immediately. By the way, we had really no reason to consider ESS: this technology is good at one thing only: present and manipulate external data as if they were FileMaker data. Nothing else. It’s really NOT designed to import or run synchronization operations.
So we go for ODBC imports, but refinements are to come later.

First challenge: unicity and performance

So here we are with the following script configuration:

blog import odbc query basic

As you can see, the Import records script steps is talking to a DSN with a query that we define as a variable for the sake of readability.

But among the numerous imports we have to make, some are of ‘update’ type (the third option checked in the import order dialog)

Import matching records

The problem is that the unicity criteria does not fit in a single column. To decide wether a record matches and must be updated, 3 columns had to be used as matching keys.

FileMaker allows this, but with dramatically poor performance. Since the number of records was huge, this simply wasn’t an option.

Imagine the query:

SELECT a, b, c, d FROM myTable

But although we want to import these 4 columns into 4 FileMaker fields: A, B, C, and D, we must update records if a, b and c are matching A, B, and C.

Let’s define the import order like:

import order 1

but we know that performance won’t be acceptable.

One way —I’m serious here— would be to ask the SQL developer to update the view and add a column that would concatenate the 3 others. In our situation it would have been a reasonable option, but very often you have simply no control over the source structure.

Let’s see if we couldn’t have mysql do the work for us…

First, let’s create a FileMaker calculation field that will be a unique key on the destination side.

K is a calculated field such as

A & B & C

Now, let’s update the query like:

SELECT CONCAT (a, b, c) AS K, a, b, c, d FROM myTable

Some explanations:

  • a 5th column is created on the fly (concatenation of a, b, and c).
  • we move before the others (optional, that’s just to show them who’s the boss.)
  • it’s renamed K, just because it looks nice (but you’ll see, that will give us ideas. Beauty IS important.)

By selecting the Matching names options, we end up with this:

import order 2

and that is way faster!

Second challenge: naming

Wait! that’s interesting, isn’t it? OK, we solved the performance issue, but while doing so we really took control over the left side of the import order dialog (source).
And one of the great issues we face with import records in FileMaker is it’s fragility. The only way to maintain an import order, even if you create or remove fields is to choose Matching names, but then you’re exposed to the consequences of renaming.

As we just saw, we can control the name of the left side columns. Those who already used XSLT to import XML data already knew, but it’s worth mentioning.

In the above example, I simplified the column names in a, b, c, d and the field names in A, B, C, D, but as you probably expect the real world names were a bit more complex.

Imagine that the original request would be:

SELECT name_first, name_last, jobTitle, date_of_birth FROM PEOPLE

and that the target field names would be

firstName, surName, occupation, dob

we can write:

SELECT name_first AS firstName, name_last AS surName, jobTitle as occupation, date_of_birth as dob FROM PEOPLE

and with the concatenation:

SELECT CONCAT (name_first, name_last, jobTitle) AS K, name_first AS firstName, name_last AS surName, jobTitle as occupation, date_of_birth as dob FROM PEOPLE

Fantastic! we can now use the Matching names option!

Still we knew that the SQL developer might want to rename some columns, or even release new views to replace the old ones after some weeks (this is a real case, not fantasy)
So we wanted to build a system that would resist a change on the source side. Not that the change would be entirely automated, but we wanted to be able to switch to a new source in minutes, without coding. That’s where our work began.

The nice little trick

Wouldn’t it be nice if each FileMaker table was able to generate it’s own import query?

We saw that the left side of the import order could be managed on the fly. It is therefore up to the right side (the database structure) to contain the information.

One spot seemed nice for this: field comments.

Let’s create a small syntax that will:

  • declare the left side column name. We’ll use a tag, “SOURCENAME:” followed by the source column name.
  • allow to modify this name easily: we’ll simply have to change the column name that follows the tag.
  • to comment out. If // is found before SOURCENAME:, the tag is ignored
  • not interfere with other information you’d like to place in the comments. As you can see on the image, you can combine a source name and some other comments.

field comments

Then we need to create a custom function. (the code is available in this text file)

custom function

It might look a little complex at first glance but:

  • a great part of the work is done by 2 other functions written by Agnès Barouh, CustomList and FilterList, that we renamed list.custom and list.filter. As a side note, Agnès now develops the Ti’Sac, that we sincerely recommend (it’s not simple politeness here, it’s a amazingly clever, unique, patented purse). Christmas is coming, so you should definitely take a look here.Ti'Sac
  • if it wasn’t a bit complex, you’d be disappointed.

In fact, this function code doesn’t matter. If for the above mentioned table we evaluate the following expression:

sql.query.import.map ( "" ; "contacts AS C" )

the empty parameter indicates “current table”. One can also write:

sql.query.import.map ( "people" ; "contacts AS C" )

the result is:

SELECT "C"."CIE" AS "company", "C"."familyname" AS "name" FROM "contacts" AS "C"

which is exactly the query we need to pass to the script step Import records to have consistent source and destination names.

Here is the same image again:field comments

  • Field ‘company’ will receive data from column ‘CIE’
  • Field ‘excluded’ won’t receive data
  • Field ‘inactive’ won’t either
  • Field ‘name’ will receive ‘familyname’

And conflicts with SQL reserved words are avoided using quotes.

The second parameter, “contacts AS C”, could have been “contacts”, but the function supports table aliases. This will allow importing from joints in the future (currently not supported by the function)

Finally, this second parameter is optional, so you can inject SQL functions in the query:

sql.query.import.map ( "" ; "" )

returns:

SELECT "CIE" AS "company", "familyname" AS name

So if you need to do more complex things you can:

sql.query.import.map ( "" ; "" ) & ", CONCAT ( column1, column2 ) AS myField FROM contacts"

As you can see, this techniques opens up a lot of possibilities. Whether you’re importing from an external source or from the FileMaker database itself.

If you combine this with the fact that an import script step is able to create a new table, that Execute SQL is able to delete this table (DROP), that you can now duplicate a record set without being limited because a table cannot import to itself, etc, etc… the potential is huge!

Do not hesitate to leave a comment here, and now it’s up to you to explore!

Cet article ODBC Import technique est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

ODBC Import technique

[Version française] In this blog post, I will share a technique that Laurent Spielmann (@laurent_at_joes) and I developed together and that greatly simplifies imports. It uses ODBC import. Have you never been bothered by inconsistent database structures between a data source and your own application? Have you never cursed the SQL developer who uses as […]

Cet article ODBC Import technique est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

[English version]

Dans cet article, je vais vous exposer une technique que nous avons développée avec mon collègue Laurent Spielmann (@laurent_at_joes) et qui nous permet de simplifier grandement les imports. Elle utilise l’import ODBC.

N’avez-vous jamais été embêté par les incohérences de structure entre une source de données que vous deviez importer et la structure de votre application ?

N’avez-vous jamais maudit le développeur SQL qui utilise comme identifiant unique une concaténation de plusieurs colonnes ?

N’avez-vous jamais craint de modifier le nom d’une rubrique de peur de casser des ordres d’importation ?

N’avez-vous jamais pesté devant la lenteur de synchronisations avec des tables ESS ?

Si vous avez répondu non à toutes ces questions, je vous envie. Cet article est fait pour tous les autres. 🙂

Un peu de technique pour commencer

Connaissez-vous l’histoire de l’ODBC ? Comment il vécut ? Comment il vit encore ?

Et bien écoutez l’histoire de l’ODBC et FileMaker.

Alors voilà, FileMaker a un bon ami, il est puissant et compatible avec plein de bases de données (on s’éloigne un peu de Gainsbourg, mais ça allait commencer à être pénible) : l’ODBC.

L’ODBC est présent de 3 manières bien distinctes dans FileMaker, et il est très important de ne pas confondre :

  1. FileMaker peut être une SOURCE de données ODBC. Dans ce qui nous occupe aujourd’hui, c’est intéressant parce qu’une base de données FileMaker comme source de données ne sera pas différente d’une autre base de données. Un driver ODBC est fourni avec FileMaker Pro et FileMaker Server.FileMaker ODBC driver
  2. FileMaker peut exploiter une source de données ODBC dans le cadre de l’ESS (External SQL Source). Le but est ici d’interagir avec des données externes comme avec des données FileMaker (en créant des occurrences de table, des modèles, et en permettant aux commandes et scripts d’agir sur ces données). Depuis FileMaker 9, nous avions à notre disposition mysql, Oracle et SQL Server. Depuis FileMaker 15 Postgresql et DB2 sont de la partie. Notons que sur Mac un driver de chez Actual technologies est nécessaire. Depuis l’apparition de l’ESS, les développeurs FileMaker ont tendance à l’utiliser pour toute interaction avec les sources SQL. Or c’est une très mauvaise idée, car si la similarité des traitements avec les données FileMaker est quasiment magique, le revers de la médaille est la performance, très, très en dessous des capacités de l’ODBC.
  3. Enfin, et c’est vraiment la grande oubliée, et donc le sujet de cet article, la possibilité pour FileMaker d’interagir avec une base de données ODBC par script.

De quels pas de script parle-t-on ?

Deux pas de script permettent d’interagir avec une source de données ODBC :

– en lecture : Importer enregistrements.

– en écriture : Exécuter SQL (attention, on parle bien du pas de script et non de la fonction de calcul ExecuterSQL, qui ne fait que lire (SELECT))

On notera qu’il n’est pas possible de lire des données d’une source externe sans les écrire dans une table FileMaker (importer). On aurait pu espérer que Exécuter SQL qui lance bien, comme on peut l’observer dans les logs d’un serveur SQL, une requête de lecture (SELECT), soit capable de retourner le résultat de cette sélection, mais ça n’est pas le cas. C’est bien dommage, mais si on le sait… (astuce : vous pouvez même utiliser Exécuter SQL pour modifier la structure d’une base. Revenez à cette astuce après lecture de l’article, et ça devrait vous donner quelques idées)

Driver ? DSN ? c’est quoi donc ?

La raison principale pour laquelle ces fonctionnalités ont été si négligées est qu’elles demandent l’installation d’un DSN (Data Source Name), et parfois, selon les sources de données, d’un driver spécifique.

Un DSN est le moyen qu’utilise le système d’exploitation pour donner accès aux applications à une source de données ODBC, ODBC étant lui-même un système d’interopérabilité des bases de données entre elles. (Open DataBase Connectivity).

Sur Mac, cela se configure avec ODBC Manager, que l’on trouvait dans le dossier Utilitaires du dossier Applications avant qu’Apple ne décide de supprimer cette fonctionnalité. Heureusement, contrairement au MagSafe, vous pouvez encore le télécharger ici.

ODBC Manager

Or s’il est complexe de déployer ce DSN sur tous les postes clients, il est très simple de le faire sur le serveur.

Il se trouve que depuis FileMaker Server 9, on peut programmer des scripts sur serveur, et que depuis FileMaker Server 13, on peut exécuter un script sur serveur à la demande depuis le client (Exécuter script sur serveur).

D’autre part, alors que Importer des enregistrements depuis une source ODBC a toujours été compatible serveur, Exécuter SQL n’est compatible que depuis FileMaker 15. De quoi se re-poser certaines questions !

Pour dire les choses très rapidement : il est possible de ne configurer le DSN que sur le poste serveur et d’en faire bénéficier tous les postes client (y compris Go, WebDirect, et publication web personnalisée).

Toutefois, le développeur aura également besoin d’accéder aux sources de données afin d’écrire ses scripts : rien de plus simple, il suffit de configurer le DSN sur sa machine également, en prenant bien soin d’utiliser exactement le même nom. Ainsi vous pourrez composer vos scripts et le serveur pourra les exécuter.

Voilà pour la “plomberie”. Maintenant nous pouvons nous concentrer sur l’intéressant.

La situation

Voici donc un bref exposé de notre problématique. Nous devons importer des données depuis une base de données mysql.

Le volume est très important, ce qui exclut directement ESS (et d’ailleurs, on n’avait vraiment aucune raison d’utiliser ESS). J’insiste : cette technologie n’a pour but QUE de présenter et manipuler des données externes dans FileMaker comme s’il s’agissait de données FileMaker. Elle n’est absolument pas faite pour des imports ou des synchronisations. Elle est très lente et absolument à proscrire pour cette exploitation. On s’oriente donc directement vers un import ODBC. Mais les subtilités viennent ensuite.

Premier problème : la clef unique et la performance

Nous voici donc partis avec la configuration du pas de script suivant :

blog import odbc query basic

Comme vous le voyez, on s’adresse à un DSN avec un requête, ici définie dans une variable par soucis de lisibilité.

Mais parmi les nombreux imports que nous devons réaliser, certains sont de type “mise à jour” (avec la 3ème option cochée dans la fenêtre de définition de l’ordre d’importation)

Import matching records

Le problème est que le critère d’unicité ne tient pas dans une seule colonne. Pour décider si un enregistrement correspond et doit être mis à jour, il faut que 3 critères soient égaux.

FileMaker permet tout à fait cela, mais au prix de performances catastrophiques. Au vu du volume (on parle en centaines de milliers d’enregistrements par jour), c’est tout simplement impossible.

Imaginons la requête :

SELECT a, b, c, d FROM myTable

Mais bien que nous voulions importer ces 4 colonnes dans 4 rubriques FileMaker A, B, C et D, nous devons mettre les enregistrements à jour si a, b et c sont identiques à A, B et C.

Nous pouvons configurer l’ordre d’importation ainsi :

import order 1

mais nous savons que les performances ne seront pas acceptables.

Une solution serait de demander au développeur de la vue mysql d’ajouter une colonne qui concatènerait les trois qui nous intéressent. Dans notre cas, c’est envisageable, mais dans bien des cas, on s’adresse à une base de données dont on ne maîtrise pas la structure.

Voyons si nous ne pourrions pas faire travailler mysql pour nous…

Tout d’abord, créons une rubrique calculée dans FileMaker qui jouera le rôle de critère d’unicité.

K est une rubrique calculée telle que

A & B & C

Maintenant, modifions la requête SQL ainsi :

SELECT CONCAT (a, b, c) AS K, a, b, c, d FROM myTable

Explication :

  • nous créons à la volée une 5ème colonne (résultat de la concaténation de a, b, c, d).
  • nous la plaçons en 1ère position (facultatif, c’est juste histoire de prouver qu’on a le contrôle)
  • on la renomme en K pour faire joli (mais on va voir que l’esthétique donne des idées)

Résultat, sélectionnant l’option Matching names (noms concordants), on arrive à ceci :

import order 2

et ça, c’est très, très nettement plus performant !

Deuxième problème: le nommage

Oh ! mais c’est intéressant ce qu’on vient de voir. D’accord nous avons résolu notre problème de performance, mais en plus on a pris le contrôle des noms de champs à gauche (source). Or un des grands problèmes que nous avons avec les imports dans FileMaker, c’est la fragilité. Le seul moyen de maintenir un ordre d’importation même quand on crée ou qu’on supprime une rubrique, c’est de choisir l’option Noms concordants (Matching names), mais alors on s’expose aux changements de noms de part et d’autre.

Or on vient de voir qu’on pouvait contrôler le nom des colonnes à gauche. Ceux qui ont déjà importé des données XML à l’aide d’XSLT le savaient déjà, mais ça mérite quand même d’être précisé.

Dans notre exemple, que j’ai volontairement simplifié en nommant les colonnes a, b, c, d et les rubriques A, B, C, D, les noms n’étaient pas exactement ceux-ci, comme vous vous en doutez.

Imaginons donc que ma requête d’origine ait été :

SELECT name_first, name_last, jobTitle, date_of_birth FROM PEOPLE

et que mes rubriques de destination aient été

prenom, nom, profession, dateDeNaissance

Je peux très bien écrire :

SELECT name_first AS prenom, name_last AS nom, jobTitle as profession, date_of_birth as dateDeNaissance FROM PEOPLE

et avec la concaténation :

SELECT CONCAT (name_first, name_last, jobTitle) AS K, name_first AS prenom, name_last AS nom, jobTitle as profession, date_of_birth as dateDeNaissance FROM PEOPLE

Fantastique ! on peut donc maintenant utiliser l’option Noms concordants !

Reste que, et c’était tout à fait notre cas ici, on sait qu’il peut passer par la tête de notre développeur SQL de changer le nom de ses colonnes. Voire, c’était ici prévu, de changer complètement la structure des vues au bout de quelques semaines d’exploitation. Nous allons donc prendre les devants et créer un système qui permettra de résister à ce genre de choses, c’est-à-dire que l’on veut être capable, en quelques minutes, de changer la source de données et d’adapter notre code, sans, justement, coder. C’est ici que notre travail commence.

La petite technique de derrière les fagots

Ne serait-ce pas idéal si chaque table FileMaker était capable de générer son propre ordre d’importation ?

On a vu que la partie gauche de l’ordre d’importation pouvait être contrôlée “à la volée”. C’est donc à la partie droite (la structure de la table) de contenir l’information.

Un endroit pour cela : les commentaires de rubrique.

Développons donc une petite syntaxe qui va nous permettre :

  • de déclarer le nom de la colonne à gauche : nous utiliserons “SOURCENAME:” suivi du nom de la colonne à importer.
  • de modifier facilement ce nom : il suffit donc de changer le mot qui suit cette balise.
  • d’être désactivable (notion de mise en commentaire) : si la marque de commentaire // est trouvée avant la balise SOURCENAME:, celle-ci est ignorée
  • de ne pas interférer avec d’autres informations éventuellement contenues dans le commentaire : on peut, comme vous le voyez sur l’image, ajouter d’autres choses dans le commentaire.

 

field comments

Ensuite, créons une fonction personnalisée telle que : (le code est disponible dans ce fichier texte)

custom function

ça a l’air compliqué comme ça, mais il faut préciser :

  • qu’une partie non négligeable du travail est faite par deux autres fonctions personnalisées d’Agnès Barouh, CustomList et FilterList, que nous avons pris la liberté de renommer list.custom et list.filter. Entre parenthèses, Agnès développe désormais le Ti’Sac, que nous vous recommandons pour de vrai (et ça n’est pas juste par politesse : c’est un concept de sac à main absolument unique). À l’approche de Noël, vous devriez faire un tour ici.Ti'Sac
  • que si ça n’était pas un peu compliqué, vous ne nous aimeriez plus.

En fait, peu importe ce qu’il y a dans cette fonction. Si pour la table précédente on évalue le calcul suivant :

sql.query.import.map ( "" ; "contacts AS C" )

le paramètre vide indique “la table active”. On peut aussi écrire :

sql.query.import.map ( "people" ; "contacts AS C" )

le résultat de la fonction est :

SELECT "C"."CIE" AS "company", "C"."familyname" AS "name" FROM "contacts" AS "C"

soit exactement la requête qu’il faut passer à l’instruction Importer enregistrements pour avoir quelque chose de cohérent à droite et à gauche.

Je vous remets l’image correspondant au commentaires de rubriques pour bien comprendre :field comments

  • La rubrique ‘company’ va être alimentée par la colonne ‘CIE’
  • La rubrique ‘excluded’ ne fait pas partie de l’ordre d’importation
  • La rubrique ‘inactive’ non plus
  • La rubrique ‘name’ va recevoir la colonne ‘familyname’

 

Le tout en évitant les mots réservés en SQL (les noms des colonnes sont entre guillemets).

Le deuxième paramètre, “contacts AS C”, aurait pu être écrit “contacts”, mais la fonction supporte les alias de table. Ceci dans le but d’importer depuis des jointures (ce qui n’est pas actuellement supporté par la fonction)

Enfin, ce deuxième paramètre est facultatif, ce qui vous permet d’injecter des fonctions SQL à votre requête :

sql.query.import.map ( "" ; "" )

retourne :

SELECT "CIE" AS "company", "familyname" AS name

Si vous avez besoin de faire des choses plus complexes, vous pouvez donc écrire :

sql.query.import.map ( "" ; "" ) & ", CONCAT ( colonne1, colonne2 ) AS maRubrique FROM contacts"

Comme vous le voyez, cette technique ouvre beaucoup de possibilités. Que ce soit lors d’imports depuis une autre base de données ou depuis la base de données elle-même.

Si vous combinez cela au fait qu’un import est capable de créer une nouvelle table, qu’Exécuter SQL est capable de supprimer cette table (DROP), que vous pouvez désormais dupliquer un ensemble d’enregistrements sans être bloqué par le fait qu’une table ne peut s’importer dans elle-même, etc, etc… les possibilités sont immenses !

Nous espérons vous avoir fait découvrir quelque chose. N’hésitez pas à laisser un commentaire ci-dessous ou à partager. À vous maintenant d’explorer ! 

Cet article Une exploitation de l’import ODBC est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

[English version] Dans cet article, je vais vous exposer une technique que nous avons développée avec mon collègue Laurent Spielmann (@laurent_at_joes) et qui nous permet de simplifier grandement les imports. Elle utilise l’import ODBC. N’avez-vous jamais été embêté par les incohérences de structure entre une source de données que vous deviez importer et la structure […]

Cet article Une exploitation de l’import ODBC est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Le forum emploi « Révéler des Talents » approche à grands pas. Cet événement aura lieu ce vendredi 28 octobre au BIP 2-4 rue Royale – 1000 Bruxelles.

Comme chaque année, 1-more-thing sponsorise l’événement organisé par l’ASBL Union, qui célèbre la diversité.

 

forum Emploi

Cet article Forum emploi Révéler des talents est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Le forum emploi « Révéler des Talents » approche à grands pas. Cet événement aura lieu ce vendredi 28 octobre au BIP 2-4 rue Royale – 1000 Bruxelles. Comme chaque année, 1-more-thing sponsorise l’événement organisé par l’ASBL Union, qui célèbre la diversité.  

Cet article Forum emploi Révéler des talents est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Oh ! à première vue il ne s’agit pas d’une révolution, mais pour les utilisateurs de longue date de FileMaker Pro, c’est tout de même quelque chose !

Aujourd’hui sont sorties les version 15.0.2 de FileMaker Server, de FileMaker Pro et de FileMaker Pro Advanced.

La première chose qu’on fait normalement dans ce cas-là, c’est de se rendre sur la page de téléchargement du site de FileMaker pour y trouver les informations de version, et télécharger la mise à jour.

Or aujourd’hui, on ne voit que cela :

 

FileMaker download page

Tant sous l’onglet Mac que sous l’onglet Windows, seule la version Server semble disponible.

Et pourtant… les mises à jour des version Pro et Pro Advanced sont disponibles également, mais il faut passer désormais par un tout autre chemin pour ces mises à jour intermédiaires (dites v-revs)

C’est depuis l’application elle-même (FileMaker Pro ou FileMaker Pro Advanced donc) que vous devrez procéder à la mise à jour.

Pour ce faire, dans le menu Aide (Help), sélectionnez “Rechercher les mises à jour”Help Menu

Vous êtes alors alertés qu’une mise à jour est disponible, dont vous pouvez lire les informations de version. Vous n’avez qu’à confirmer pour procéder à la mise à jour.

Comme vous le verrez, la mise à jour ne pèse que 6Mo (ce qui nous change agréablement), et s’effectue très rapidement, sans quitter l’application ! Autre avantage sur mac : si vous avez choisi de travailler dans une autre langue que la langue de votre système d’exploitation, FileMaker ne vient pas réinstaller le pack de langue que vous aviez consciencieusement désinstallé.info 1502

Seul petit hic, une fois qu’on a passé le dialogue avec les nouveautés de la version… plus moyen de les retrouver. Et aucun article de la base de connaissance (knowledge base) n’en parle (probablement une question de temps).

Toujours est-il qu’un problème non négligeable a été résolu : certaines polices de type 1 empêchaient la création de fichiers PDF corrects (bug connu à partir de la 14.0.6 et de la 15.0.1). C’est maintenant corrigé. La compatibilité mac OS Sierra 10.12 est également de la partie.

 

[Mise à jour] Les notes de version sont désormais disponibles, en Anglais, ici.

Cet article FileMaker Pro 15.0.2 : la première mise à jour “in App” est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

Oh ! à première vue il ne s’agit pas d’une révolution, mais pour les utilisateurs de longue date de FileMaker Pro, c’est tout de même quelque chose ! Aujourd’hui sont sorties les version 15.0.2 de FileMaker Server, de FileMaker Pro et de FileMaker Pro Advanced. La première chose qu’on fait normalement dans ce cas-là, c’est de […]

Cet article FileMaker Pro 15.0.2 : la première mise à jour “in App” est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

fabriceN

FBA Platinum Member !

FileMaker + 1-more-thing = Platinum !

C’est la formule “alchimique” et magique du jour pour toute l’équipe de 1-more-thing. FileMaker nous décerne le titre de “Platinum” au sein de la FileMaker Business Alliance ! En devenant Platinum, nous recevons en quelque sorte le parrainage de FileMaker qui confirme nos qualités d’ambassadeur et d’expert de la plateforme.

Ce label met en valeur notre travail assidu pour concevoir et déployer des apps personnalisées ; il récompense le travail des pélerins qui cheminent depuis la version 2.1 ; il salue les orateurs des FMConf, CQDF, FMSummit, Pause On Error, dotFMP, FMDevcon ; il encourage le partenaire à se tailler un chemin dans la jungle des licences ; il nous incite à poursuivre notre création d’outils mobiles, iOS, web au moyen de la plateforme FileMaker, et surtout à continuer de collaborer avec nos clients avec autant de plaisir.

A cute, smiling 2-3 years old boy is standing behind a wooden table with a golden trophy on it. Little boy is wearing an orange bow tie, red glasses and blue trousers with suspenders.

C’est un grand jour pour nous et nous tenons à vous remercier. Merci à vous, clients qui nous faites confiance et qui nous permettez de nous éclater à faire notre boulot avec enthousiasme. Merci à vous lecteurs, amis développeurs et followers qui nous poussez à rester toujours au top pour vous proposer de nouvelles techniques, idées, analyses, astuces. Et surtout : merci à toute l’équipe de 1-more-thing !

Cet article FBA Platinum Member ! est apparu en premier sur 1-more-thing.


Afficher la totalité du billet

×