Nous parlions, il y a quelques semaines, du nouveau “External Database Connector” qui a profité de la sortie de la 10.6 pour passer en GA (General Availability – 1ère version officielle). Je vous propose un billet de découverte de cette nouvelle façon d’accéder à des données hébergées dans des bases de données externes.

En comparaison de l’autre connecteur base de données, le concepteur a, ici, moins de travail à faire et est plus assisté, le connecteur est plus simple à utiliser et découvre le schéma de la base… en résulte un gain manifeste de temps et forcément moins d’erreurs 😎.

Introduction

Quelques mots sur le connecteur avant de se lancer dans son utilisation.

L’External Database Connector nécessite l’utilisation de la version 10.6 (minimum) de Mendix.

Il permet une intégration à des bases Microsoft SQL Server, Oracle, MySQL ou PostgreSQL.

Au moment de l’écriture de ce billet, seules les requêtes de types Select et Insert sont prises en compte. Bien évidemment, cela va évoluer dans les semaines à venir (NDLR : requêtes Update et Delete ajoutées avec la version 10.7).

Dans tous les autres cas (par exemple utilisation d’une version 9 de Mendix ou si vous souhaitez vous connecter à d’autres systèmes) cela reste toujours possible avec le Database Connector qui reste disponible, utilisable, supporté et qui continue à bénéficier de correctifs et évolutions. Il nécessitera un peu plus de travail, mais permettra une intégration complète à n’importe quelle base de données relationnelle (telles que SQLite, MariaDB, Presto et plein d’autres) avec n’importe quelle version supportée de Mendix.

Vous retrouverez la documentation complète du connecteur dans la documentation Mendix.

Utilisation

Pour le billet, je vais créer un simple projet Mendix en partant d’une Blank Web App (et utilisant la version 10.6.1), histoire qu’il n’y ait aucune fioriture 😉.

Etape 1 – Ajouter le connecteur au projet

Depuis la marketplace Mendix accessible depuis Mendix Studio Pro, je vais rechercher et ajouter le External Database Connector comme nouveau module de mon projet.

L’ajout du module me permet d’avoir une nouvelle entrée dans les activités microflow, mais également une nouvelle entrée parmi la liste des éléments qui peuvent être ajoutés à un projet. Et c’est d’ailleurs ce nouvel élément que nous allons utiliser à l’étape suivante.

Etape 2 – Connexion à la base de données externe

Depuis un clic-droit sur mon module applicatif, j’ajoute un élément de type External database connection. Cela ouvre une nouvelle fenêtre au sein de laquelle je vais pouvoir saisir les informations d’identification à cette base à intégrer, soit une chaîne de connexion soit les paramètres 1 à 1. Dans les 2 cas, les informations sont gérées dans des constantes Mendix qui vont être ajoutées au projet une fois la connexion enregistrée.

La connexion doit être testée avec succès pour passer à la suite. On peut alors cliquer sur Save et cela ajoute 4 objets que je retrouve dans mon explorateur de projet et que je peux classer à ma guise.

Etape 3 – Paramétrer les requêtes à utiliser

Maintenant que ma connexion est définie, je vais pouvoir paramétrer les requêtes qui seront nécessaires à mon application. Cet espace de paramétrage est apparu dans la fenêtre principale de conception suite à la sauvegarde, mais vous pouvez le retrouver en cliquant sur l’objet dans votre explorateur de projet (UnboxingMySQLDB dans mon cas).

L’espace de paramétrage est séparé en 2. A gauche, les requêtes que vous souhaitez paramétrer, à droite la fenêtre de résultats et de découverte disposant elle-même de sous-onglets. Vous remarquez d’ailleurs ici que Mendix a découvert l’ensemble des tables et des vues disponibles sur la base de données externe, ce qui est très pratique et que nous n’avions pas sur l’autre connecteur base de données.

Pour notre exemple, nous allons utiliser une requête d’affichage du contenu de l’unique table (quand je vous disais que je ne voulais pas de fioritures 😜) de ma base de données externe ; puis une requête d’insertion.

Requête de sélection

Je donne un nom à ma requête (cela me servira ensuite lorsque j’ajouterai de la logique dans mon application), je l’écris et je la teste en direct. Je peux ainsi vérifier que j’ai bien le résultat attendu dans l’onglet Response Data de la partie droite. N’est-ce pas pratique ?

Si cela me convient, je peux cliquer sur le bouton Use Response en bas à droite. Mendix va alors utiliser la structure de la réponse pour proposer la création d’une NPE (Entité Non Persistante – l’entité sera dans mon Domain Model afin que je puisse utiliser les données pour la création de mes pages et ma logique, mais les données ne seront pas dupliquées dans la base de données sous-jacente à l’exécution de mon application). Je peux alors cliquer sur le bouton Save Query & Create Entity pour que l’entité soit automatiquement créée et ajoutée au Domain Model de mon module 😎. Simple, non ??

Requête d’insertion

Passons à des choses (BEAUCOUP 😂) plus complexes et ajoutons notre requête d’insertion. Tout en haut de la fenêtre de paramétrage, on peut cliquer sur + Add Query, et on remarque à la gauche de ce bouton, une liste déroulante en création qui contient le nom de notre requête précédente.

Je donne un nom, j’écris ma requête à laquelle j’ajoute des paramètres dont le nom est passé entre accolades dans la requête. Le nom de ces paramètres sera alors indiqué lorsque je construirai la logique de mon application. Enfin je clique sur Run Query pour tester et si c’est testé avec succès je clique sur Save Query afin de pouvoir l’utiliser.

NB : comme vous le voyez sur la copie d’écran ci-dessous, la requête est exécutée pour valider quelle fonctionne, mais il y a un Rollback immédiat afin de ne pas polluer la base avec les données de conception.

J’ai à présent mes 2 requêtes dans ma liste déroulante de requêtes.

Etape 4 – Création de la logique d’exécution des requêtes

A présent, pour pouvoir exécuter mes requêtes, il va me falloir 2 microflows :

Microflow pour le Select

Ce microflow va contenir une activité permettant de choisir la base de données et la requête que je souhaite exécuter. Pour cela j’ajoute donc l’activité Query External Database. Je sélectionne alors ma base de données puis je paramètre l’appel à ma requête et l’enregistrement de son résultat dans un objet que je passe en return value du end event de mon microflow.

Microflow pour l’Insert

Le principe est presque le même, sauf que je vais devoir gérer des arguments en entrée et que je ne vais rien gérer en sortie. J’ajoute donc un paramètre à mon microflow qui pointe vers mon entité “MySQLTestTable” et j’utilise cet objet pour faire le mapping avec les arguments attendus de ma requête d’insertion (créés lors de l’étape 3).

Etape 5 – Utilisation des requêtes dans mon application

Et pour finir, il ne me reste plus qu’à faire un petit peu d’UI et donc à créer une page qui va me permettre de lister le contenu de ma table externe et d’y ajouter des lignes en appelant mes microflows. Je vais donc ajouter un Data grid 2 sur ma page d’accueil. Et configurer la Data source pour pointer vers mon microflow de sélection.

Ensuite, je n’ai plus qu’à configurer le bouton d’ajout d’un nouvel élément créé avec le Data grid 2 pour qu’il fasse une création d’objet (MyFirstModule.MySQLTestTable dans mon cas) et qu’il aille sur une page que je fais créer à la volée par Mendix Studio Pro (Forms > Vertical avec PopupLayout)

Je n’ai plus qu’à changer l’action du bouton Save de ce formulaire pour qu’il exécute mon microflow d’insertion et on est bon !

Voilà… il n’y a plus qu’à tester ! Pour bien faire, il aurait fallu mettre un petit message de confirmation, des contrôles de saisie, fermer le popup… mais j’ai dit “Sans fioriture” donc on se concentre uniquement sur le connecteur DB 😜.

Etape 6 – Test

Bon… forcément, ça fonctionne, sinon je n’aurai pas publié l’article… mais voici le petit gif du résultat (ok… comme je n’ai pas mis de message de confirmation, j’ai cliqué 2 fois sur le bouton et j’ai donc créé 2 lignes 😂) :

Allez… avouez, c’est magique ! Et puis ce qui est génial c’est que vous avez la main sur tout, donc vous pouvez complexifier vos requêtes, les structures de retour etc. Il n’a jamais été aussi simple d’accéder à des bases de données externes 🚀

🔥🔥 Happy low-coding ! 🔥🔥

1 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.