Créer une fonction dans DMN et l’utiliser dans une table de décision dans jBPM
💡 Introduction
Dans jBPM, on utilise souvent des tables de décision DMN pour définir les règles métiers de manière visuelle.
Mais il arrive que certaines logiques (calculs, validations, transformations) soient répétées dans plusieurs décisions.
👉 Pour éviter la duplication, vous pouvez créer une 📦 fonction réutilisable dans votre modèle DMN et l’appeler depuis vos tables de décision, expressions ou contextes.
Cela rend vos modèles plus clairs, modulaires et faciles à maintenir.
🧠 1️⃣ Qu’est-ce qu’une fonction dans DMN ?
Dans DMN, une fonction est un morceau de logique réutilisable écrit en FEEL (Friendly Enough Expression Language).
Elle peut recevoir des paramètres d’entrée et renvoyer une valeur.
✅ Exemple simple de fonction FEEL :
📊 Vous pouvez la définir :
-
Dans un contexte
-
Comme une décision distincte
-
Ou sous forme de Business Knowledge Model (BKM) pour la réutiliser globalement
⚙️ 2️⃣ Pourquoi utiliser des fonctions dans DMN
| Raison | Avantage |
|---|---|
| 🧾 Réutilisabilité | Définir la logique une seule fois et la réutiliser partout |
| ⚙️ Maintenance | Mise à jour plus facile d’une seule définition |
| 🔍 Lisibilité | Des tables de décision plus simples et plus propres |
| 🚀 Performance | Les fonctions FEEL sont légères et rapides |
🧩 3️⃣ Exemple de scénario
Prenons un exemple : on veut calculer une prime de performance pour les employés selon leur salaire et leur note d’évaluation.
Nous allons créer :
-
Une fonction
CalculateBonus -
Une table de décision
BonusDecisionqui appelle cette fonction
🧱 4️⃣ Étape 1 : Créer une fonction dans le modèle DMN
Dans Business Central → Design → Create → DMN,
ajoutez une décision (ou un Business Knowledge Model) nommée CalculateBonus.
Dans la zone d’expression, saisissez :
Cette fonction prend deux paramètres (salary, rating) et retourne la prime calculée.
🧩 5️⃣ Étape 2 : Créer la table de décision qui appelle la fonction
Créez ensuite une autre décision appelée BonusDecision.
Données d’entrée :
-
salary -
rating
Table de décision :
| Rating | Résultat (Bonus) | Description |
|---|---|---|
"A" | CalculateBonus(salary, rating) | "Excellent" |
"B" | CalculateBonus(salary, rating) | "Bon" |
"C" | CalculateBonus(salary, rating) | "Moyen" |
✅ Exemple d’expression FEEL :
Ainsi, la table appelle directement la fonction définie précédemment.
🧩 6️⃣ Étape 3 : Définir la fonction dans un Contexte (optionnel)
Vous pouvez aussi définir la fonction dans un contexte :
✅ Ici, la clé FinalResult appelle directement la fonction CalculateBonus.
💻 7️⃣ Étape 4 : Appeler le DMN depuis jBPM ou Java
Exemple d’exécution du modèle DMN depuis une application Java :
✅ Sortie console :
🧠 8️⃣ Réutiliser la fonction dans plusieurs décisions
Une fois définie, la fonction peut être utilisée dans :
-
Des tables de décision
-
Des expressions FEEL
-
D’autres fonctions
-
Des contextes DMN
Exemple :
🧰 9️⃣ Astuces et erreurs courantes
| Problème | Cause | Solution |
|---|---|---|
❌ Function not found | Fonction non liée ou non importée | Relier la décision fonction à la table de décision |
⚠️ Valeur null | Variables non mappées | Vérifier la correspondance des variables d’entrée |
| 🧮 Mauvais calcul | Erreur de syntaxe FEEL | Vérifier le modèle DMN XML |
🧩 🔟 Exemple DMN simplifié
🏁 Conclusion
🚀 En créant des fonctions DMN, vous pouvez structurer vos modèles de décision de manière plus claire et réutilisable.
Elles permettent de séparer la logique des calculs du reste de la table, tout en rendant vos modèles plus professionnels et évolutifs.
💬 BPMN gère le flux du processus.
DMN gère les décisions.
Les fonctions DMN apportent la modularité et la réutilisabilité.
💼 Support professionnel disponible
Si vous rencontrez des problèmes sur des projets réels liés au développement backend d’entreprise ou à l’automatisation des workflows, je propose des services de conseil payants, de débogage en production, de support projet et de formations ciblées.
Les technologies couvertes incluent Java, Spring Boot, PL/SQL, Azure, ainsi que l’automatisation des workflows (jBPM, Camunda BPM, RHPAM).
📧 Contact: ishikhanirankari@gmail.com | info@realtechnologiesindia.com
🌐 Website: IT Trainings | Digital lectern | Digital rostrum | Digital metal podium
Comments
Post a Comment