Adepte ou détracteur du concept, les REGEX demeurent un outil efficace pour la manipulation de chaîne de caractères et donc d'objets dans des ERP.
La proposition de notre extension sur Business Central se trouve à la fin de l’article : Extension Axians BMS
En informatique, une expression régulière, expression rationnelle ou expression normale n’est pas qu’une simple chaîne de caractères. Sa syntaxe particulière décrit plus spécifiquement la structure de cette chaîne de caractères. Des opérations telles que la recherche, la modification ou la validation sont alors extrêmement simplifiées.
Il existe un nombre infini d’exemples d’utilisation de REGEX sur des chaines normées. On peut citer les emails, sites web ou numéros de téléphone avec des règles de contrôle particulières.
Cas d’usage de REGEX
Un cas concret serait de vouloir parcourir toutes les occurrences de déclaration des variables Sales Invoice Header, Sales Invoice Line, Sales Shipment Header et Sales Shipment Line dans notre fameux Codeunit 80 Sales-Post. Il suffit pour cela de faire appel à une recherche à partir d’un REGEX, :\sRecord\s(« Sales)\s(Invoice|Shipment)\s(Header|Line) » dont on retrouve le résultat, avec les deux premières itérations des variables parmi les 164 :
Difficile d’obtenir le même résultat par d’autres moyen non ? 😉 Pour voir plus clair et s’exercer dans cette nouvelle langue, je vous conseille le site suivant : https://regex101.com/
REGEX dans Business Central
Les solutions Dynamics Nav ou Dynamics 365 Business Central ont intégré, un peu tardivement, une couche technique sur les expressions régulières (couche héritée des librairies sur le même sujet de .NET).
Des méthodes très pratiques de type Ismatch, Match, Replace et Escape existent dans cette couche technique, mais fonctionnellement, qu’en est-il?
Rien n’existe à ma connaissance et ce malgré les potentiels avantage énoncés, excepté l’extension Document Capture du partenaire Continia.
Un Exemple flagrant de ce vide fonctionnel pourrait être l’approche de Business Central pour valider la structure d’un email (Customer table), à la charge du Codeunit 9520 Mail Management avec la méthode CheckValidEmailAddress (email) :
🤔🤔😳…uuummhhh. (Il existe un contrôle similaire pour les numéros de téléphone)
Notre tentative
Nous avons voulu libérer les REGEX 😊 dans Dynamics 365 Business Central en s’appuyant sur la couche technique évoquée plus haut.
La première approche a été de regarder la fonctionnalité, assez récente (BC 2020 Wave 2, BC17), de Monitoring de champs dans Business Central et qui permet de notifier lors de la modification d’un champ paramétrable dans l’ERP. Une extension de cette fonctionnalité aurait permis d’utiliser les mêmes objets et routines pour déclencher à la convenance du paramétrage une notification ou une opération à l’aide de REGEX pour un champ.
Cependant un problème apparait… La plupart de ces objets sont marqués, en internes, ou non extensibles. Ce choix est compréhensible à la vue de la sécurité associée à la fonctionnalité. En revanche une approche avec des interfaces aurait permis d’élargir la couverture fonctionnelle à l’utilisation des REGEX.
Notre extension
Nous avons fini par développer de manière complétement isolée une extension prenant en charge l’utilisation des REGEX (contrôle de Matching ou remplacement de caractères). Le développement est extrêmement simple et rapide, il s’inspire des global triggers, de la même manière que la fonctionnalité Monitoring Fields. Cette dernière autorise la définition d’un pattern de contrôle de saisie ou un remplacement de caractères pour n’importe quel champ d’une table quelconque de notre ERP.
La page principale, Field regex Rules, ressemble à celle de Monitored Fields Worksheet :
Le champ Nom 2 doit ressembler et avoir la structure d’une adresse mail. Il est possible d’associer plsuieurs règles (REGEX) pour un même champ d’une table :
Nous vous proposons les 2 cas qui peuvent advenir:
- Saisie d’une valeur incorrecte (ne respectant pas les critères du REGEX), avec un message d’erreur personnalisable :
- Ecriture de l’adresse mail avec le bon format, la suite de la saisie est autorisée :
Cette extension a été réalisée uniquement à but expérimental. Elle reste à améliorer et adapter selon votre contexte. Je la laisse disponible dans mon GitHub personnel, avec l’intégration des test automations : https://github.com/BMSPedro/BC-REGEX.git
BCIdeas
Nous avons soumis l’idée à l’équipe Business Central. Si vous la trouvez utile, n’hésitez pas à y faire un tour, commenter ou voter : Enable REGEX to be used for all BC fields