Camunda 7 DMN – Guide Complet avec Exemples (Tables de Décision, FEEL, Hit Policies)



DMN (Decision Model and Notation) est un standard puissant utilisé dans Camunda 7 pour automatiser les décisions métier à l’aide de tables de décision, du langage FEEL, et d’un moteur de décision performant.

Il permet de séparer clairement la logique métier de la logique de processus (BPMN) tout en rendant les règles plus lisibles pour les équipes fonctionnelles.

Ce guide explique comment créer, déployer et exécuter un modèle DMN complet dans Camunda 7 — via Modeler, Java, REST, et Spring Boot.


Qu’est-ce que le DMN ?

DMN est un langage standardisé destiné à :

✔ Externaliser les règles métier
✔ Simplifier les décisions complexes
✔ Rendre les règles compréhensibles par les utilisateurs métier
✔ Permettre l’automatisation via un moteur de décision
✔ Intégrer les décisions directement dans des workflows BPMN

Dans Camunda 7, le Decision Engine exécute les tables DMN et renvoie un résultat structuré.


1️⃣ Créer une Table de Décision dans Camunda Modeler


Une table DMN contient :

  • Des entrées (inputs)

  • Des règles

  • Un résultat (output)

  • Une hit policy

  • Des expressions FEEL

🎯 Exemple : Décision d'Approbation de Prêt

Inputs :

  • scoreCrédit

  • revenuMensuel

  • montantDemande

Table DMN :

Score CréditRevenuMontantRésultat
> 700> 50000< 1 000 000APPROUVER
600–700> 40000< 500000REVISION
< 600REJETER

2️⃣ Hit Policies dans DMN



Hit Policy


Signification
U – UniqueUne seule règle doit correspondre
F – FirstLa première règle correspondante gagne
A – AnyToute règle valide suffit
C – CollectRenvoie plusieurs résultats (sum, min, max…)
P – PriorityLa règle avec la priorité la plus élevée gagne
R – Rule OrderRésultats triés selon l'ordre des règles
O – Output OrderTriés selon la valeur de sortie

La plupart des cas utilisent Unique ou First.


3️⃣ Expressions FEEL

DMN utilise FEEL pour écrire les conditions.

Exemples FEEL :

ExpressionSignification
> 500Valeur supérieure à 500
[10..20]Entre 10 et 20
<= 1000Inférieur ou égal
"Or"Valeur Or
not("France")Différent de France
nullValeur nulle

4️⃣ Déployer un DMN dans Camunda 7

Placez votre fichier DMN dans :

src/main/resources/dmn/

Camunda déploie automatiquement tous les DMN trouvés dans resources.


5️⃣ Appeler un DMN depuis un Processus BPMN


Dans le BPMN:

1️⃣ Ajouter un Business Rule Task
2️⃣ Paramétrer :

  • Decision Ref = loan_decision

  • Result Variable = loanResult

  • Assignation des variables via input mappings

Exemple d’entrée dans le BPMN :

Variable ProcessusEntrée DMN
${score}scoreCrédit
${salaire}revenu
${montant}montant

6️⃣ Exécuter un DMN via Java (DecisionService)

@Autowired DecisionService decisionService; public void evaluateDecision() { VariableMap variables = Variables.createVariables() .putValue("scoreCrédit", 720) .putValue("revenu", 60000) .putValue("montant", 800000); DmnDecisionTableResult result = decisionService.evaluateDecisionTableByKey("loan_decision", variables); System.out.println(result.getSingleResult().getEntry("Résultat")); }

7️⃣ Exécuter un DMN via REST API

POST http://localhost:8080/engine-rest/decision-definition/key/loan_decision/evaluate Content-Type: application/json { "variables": { "scoreCrédit": {"value": 720}, "revenu": {"value": 60000}, "montant": {"value": 800000} } }

8️⃣ DMN + Spring Boot

Ajouter la dépendance :

<dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter</artifactId> <version>7.21.0</version> </dependency>

Appel identique via DecisionService.


9️⃣ Exemple Réel : Classification du Risque Crédit


Inputs :

  • défauts passés

  • âge

  • revenu

  • pays

  • solde

Résultats DMN possibles :

  • RISQUE_FAIBLE

  • RISQUE_MOYEN

  • RISQUE_ELEVÉ

Le BPMN peut ensuite router automatiquement les cas selon le résultat.


🔟 Bonnes Pratiques DMN dans Camunda

✔ Utiliser FEEL au lieu de scripts
✔ Utiliser des noms d’entrées clairs
✔ Garder les tables simples et lisibles
✔ Éviter les règles qui se chevauchent
✔ Ajouter des tests unitaires DMN
✔ Organiser les DMN dans des dossiers dédiés
✔ Toujours définir une Result Variable dans BPMN
✔ Utiliser Priority (P) pour les modèles de scoring


❌ Erreurs Courantes à Éviter

❌ Mauvais mapping de variables
❌ Utilisation de scripts inutiles
❌ Hit Policy incorrecte
❌ DMN trop complexe ou trop long
❌ DecisionRef non configuré dans BPMN


🎉 Conclusion

Le DMN dans Camunda 7 permet :

✔ une automatisation claire et fiable
✔ une séparation propre des règles métier
✔ une meilleure maintenabilité
✔ une exécution rapide et évolutive
✔ une intégration fluide avec BPMN, Java, REST et Spring Boot

C’est un outil essentiel pour tout développeur ou architecte travaillant sur Camunda.

💼 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).

📧 Contactishikhanirankari@gmail.com info@realtechnologiesindia.com

🌐 WebsiteIT Trainings | Digital lectern | Digital rostrum | Digital metal podium 





Comments

Popular posts from this blog

jBPM Installation Guide: Step by Step Setup

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained