Le Mendix Microflow Engine : comment ça marche ?
Dans cet article de blog, j'aimerais expliquer comment le moteur Microflow effectue son travail d'exécution d'une logique complexe dans votre Mendix application. Tout d'abord, je vais vous présenter brièvement ce que sont les microflux et comment ils vous aident à modéliser votre application, puis j'expliquerai la technologie qui les sous-tend.
Une introduction
Dans l' Mendix plateforme vous permet de créer un modèle de votre application en utilisant le Mendix Business Modeler. Nous ne générons pas de code, mais interprétons ce modèle au démarrage de l'application sur notre serveur d'exécution. Cette approche présente de nombreux avantages, notamment la possibilité de déboguer visuellement, même dans des environnements distants.
Pour comprendre cet article, il est important d'avoir déjà créé des microflux. Je vais également vous expliquer ce qu'ils sont. Si vous savez déjà les utiliser, vous pouvez passer directement à la section suivante. Action.
Pour citer notre documentation, « Les microflux vous permettent d'exprimer la logique de votre application » et « C'est une façon visuelle d'exprimer ce qui se retrouve traditionnellement dans un code de programme textuel. »En d’autres termes, les microflux vous permettent d’ajouter facilement une logique métier complexe aux processus de votre application sans avoir à écrire de code. Mendix Il s'agit avant tout de collaboration entre l'entreprise et l'informatique, et les microflux aident beaucoup en donnant aux personnes soucieuses de l'entreprise un aperçu de la manière dont l'application est conçue.
Les microflux définissent des activités de haut niveau. Un exemple très simple pourrait ressembler à ceci :

En Java, cela pourrait s'écrire comme suit. L'instruction « else » n'est pas strictement nécessaire, mais elle correspond davantage à l'expression du microflux.

Un exemple plus concret est donné ci-dessous :

Pour en savoir plus sur l'utilisation des microflux, vous pouvez consulter [lien manquant]. https://world.mendix.com/display/refguide4/Microflows.
Mais comment tout cela fonctionne-t-il ? Voyons cela maintenant.
Action
Un microflux est un type de actionLes actions sur le serveur sont définies par une interface dont la propriété de base est qu'elle peut être exécutée. Ceci est réalisé par gestionnaire d'actions; cette classe est responsable de l'exécution d'actions de diverses manières. Elle peut les exécuter de manière synchrone ou asynchrone, ou les planifier pour une exécution ultérieure, et gère toute la complexité du threading.
Différents types d'actions sont définis sur le serveur. Certaines sont à usage interne, comme la suppression des sessions expirées. D'autres peuvent être utilisées, voire implémentées, par les développeurs. Mendix. Les exemples sont suppression d'objet or requête xpath actions. Si vous avez déjà créé votre propre action Java, vous avez peut-être remarqué qu'elle étend UserAction et qu'il doit mettre en œuvre la méthode executeAction.
Nous savons maintenant que les microflux sont des actions qui peuvent être exécutées, mais comment obtenir (des instances de) cette classe ?
Construire les structures de microflux
Au démarrage du serveur, il lit d'abord le fichier contenant votre modèle d'application. Ce modèle contient tous les documents de votre projet, y compris les microflux. Le serveur construit des structures à partir de ces documents microflux, plus faciles et plus rapides à utiliser pour instancier des microflux réels que les informations du modèle plat. Par exemple, après la construction de ces structures, un microflux appelant un autre microflux pointe directement vers la structure de ce microflux plutôt que vers un identifiant du modèle, et le contenu d'une boucle imbriquée est restitué sous forme de structure de microflux distincte.
Une fois cette étape terminée, nous disposons d'un ensemble de structures de microflux. Celles-ci représentent un microflux tel que dessiné dans le modeleur et contiennent des objets microflux représentant soit un événement de début, un événement de fin, un événement d'arrêt, ou, enfin et surtout, un événement de fin. activité.

Ces objets microflow sont connectés les uns aux autres par les flux: les lignes reliant les différents blocs lors du dessin d'un microflux. Un objet microflux peut avoir des flux entrants et sortants.
Si vous avez l'habitude des microflux et que vous vous demandez maintenant : « Mais qu'en est-il des boucles ou des passerelles ? », sachez que ces éléments sont également représentés par des activités. À ce propos, l'événement d'erreur que nous avons récemment présenté peut être considéré comme un type particulier d'événement de fin.
Comme mentionné précédemment, le contenu d'une boucle imbriquée est également rendu sous forme de structure de microflux. À chaque itération d'une boucle, un autre microflux est instancié. Instancié, dites-vous ? Voyons voir…
Instanciation et exécution de microflux
Avant d'exécuter un microflux, celui-ci est instancié très rapidement à l'aide de la structure précédemment construite. Pour une instance spécifique d'un microflux, nous avons besoin d'éléments tels que la valeur réelle de variable d'entrée et la aux contextes du microflux. Le contexte contient diverses informations, notamment l'utilisateur qui exécute ce microflux.
Le tableau complet ressemble donc à ceci :

Une fois l'instance créée, le gestionnaire d'actions exécute le microflux. Il finira par rencontrer un activité...
Activités de microflux
Comme je l'ai dit précédemment, certains (ou en fait, la plupart) des objets microflow sont d'activités. Certains exemples d'activités de microflux sont la modification d'un objet, la transmission d'instructions pour ouvrir un formulaire, la génération d'un document basé sur un modèle ou l'importation de XML.
Une activité définit un execute méthode. L'instance de microflow est transmise à cette méthode afin que nous puissions effectuer des opérations telles que rechercher des variables qui se trouvent dans le portée de ce microflux.
Voici un exemple d'activité de microflux : l'exportation XML. Si vous êtes vous-même développeur, vous saurez à quoi elle sert.

Il récupère les variables de contexte et de microflux de la portée du microflux, obtient l'identifiant du mappage XML, récupère l'objet paramètre, puis décide d'exporter une chaîne et de renvoyer cette valeur, ou d'écrire dans un fichier. Nous n'entrerons pas dans le détail des méthodes qui effectuent réellement cette tâche, mais vous comprenez l'idée.
Depuis que Mendix 5, nous utilisons OSGi En tant que système de modules, différents composants peuvent désormais intégrer leurs activités au moteur Microflow. Par exemple, le composant « Générateur de documents » insère une activité « Générer un document » et le composant « Interface Web » insère des activités telles que « Afficher un message ».
Services d'envoi constituent un type d'activité particulier et sont représentées différemment lors de leur modélisation. Une passerelle représente une division dans le flux d'un microflux. Il peut s'agir d'un division exclusive ou un partage de l'héritageL'option par défaut d'un fractionnement exclusif consiste à analyser une expression. À partir de cette expression, le microflux peut ensuite être fractionné. Le cas le plus simple est une expression booléenne (vrai ou faux), mais vous pouvez également fractionner selon des valeurs d'énumération. Comment cela fonctionne-t-il ? Nous allons examiner les expressions de microflux.
Expressions de microflux
In Mendix Nous avons défini notre propre langage d'expression. Vous trouverez une définition sur Wikipédia: Dans un langage de programmation, une expression est une combinaison de valeurs explicites, de constantes, de variables, d'opérateurs et de fonctions, interprétées selon les règles de priorité et d'association propres à ce langage. Cette expression calcule puis produit (renvoie, dans un environnement avec état) une autre valeur. Ce processus, comme pour les expressions mathématiques, est appelé évaluation. La valeur peut être de différents types, tels que numérique, chaîne de caractères et logique.
Nous avons écrit la grammaire de l'expression language en ANTLR et l'utilisent également pour générer l'analyseur et le Arbres de syntaxe abstraite. Pour citer leur site Web, « ANTLR (ANother Tool for Language Recognition) est un puissant générateur d'analyseur pour la lecture, le traitement, l'exécution ou la traduction de textes structurés ou de fichiers binaires. »
Vous pouvez en savoir plus sur les possibilités de nos expressions de microflux dans notre Documentation.
Les expressions peuvent être utilisées à divers endroits, notamment pour attribuer une valeur à un attribut dans une activité de modification d'objet, lors d'un événement de fin lors du renvoi d'une variable ou encore dans un partage exclusif, comme mentionné précédemment. Prenons un exemple : une application avec une base de données de films permettant aux utilisateurs de rechercher différentes propriétés d'un film.

L'expression de cette passerelle est « Film/Durée > 180 ». Dans le chemin du microflux suivant la valeur « vraie », vous pouvez qualifier ce film particulier de long.
Alors, comment une expression comme celle-ci finirait-elle par être évaluée ?
Une fois l'action de passerelle déclenchée, elle donne la commande d'évaluation de l'expression. Il s'agit d'une expression binaire très simple. L'action entre dans la classe d'expression binaire et recherche l'opérateur utilisé, ici le signe « supérieur à ». Une fois cet opérateur trouvé, l'action entre dans la méthode des expressions arithmétiques ou de comparaison. Après avoir obtenu les types des membres gauche et droit de l'expression et vérifié que les valeurs ne sont pas nulles, l'action entre le code de l'opérateur correspondant et effectue la comparaison. Le code final est simple. value = longExpr1 > longExpr2.
La valeur est ensuite renvoyée à l'action de passerelle, qui détermine le chemin du microflux à exécuter ensuite. Ce film peut être marqué comme long, et vos utilisateurs qui prévoient de rester chez eux un soir pluvieux pourront trouver l'activité idéale.
Conclusion
Voilà qui résume à peu près le fonctionnement de notre moteur de microflux. Grâce aux microflux, vous n'avez plus à vous soucier de l'appel d'un service web, de l'exécution d'une requête SQL sur une base de données avec toutes les contraintes de sécurité associées, ni de l'ouverture d'un formulaire sur le client. Le moteur de microflux fournit ces fonctions sous forme d'activités simples que vous pouvez ajouter à votre application.
J'espère que cette analyse vous a plu.