Tutoriel jBPM DMN – Utiliser les Fonctions DMN (Fonctions FEEL)

 🚀 Introduction

Dans jBPM, DMN (Decision Model and Notation) est utilisé pour modéliser les règles métier, les calculs, et la logique de décision.
L’un des éléments les plus puissants dans DMN est l’utilisation des fonctions, écrites en :

  • FEEL (Friendly Enough Expression Language)

  • Java (via intégration avancée)

  • Fonctions externes exposées au modèle

Dans ce blog, nous allons nous concentrer sur les fonctions FEEL, les plus utilisées et les plus simples à maintenir dans jBPM.


🧩 Qu’est-ce qu’une Fonction DMN ?

Une fonction DMN est un bloc logique réutilisable qui peut :

✔ recevoir des paramètres
✔ exécuter un calcul
✔ retourner un résultat

Les fonctions peuvent être utilisées dans :

  • les expressions littérales,

  • les tables de décisions,

  • les contexts,

  • ou comme fonctions nommées dans le modèle.

jBPM supporte :

  • les fonctions FEEL intégrées,

  • les fonctions FEEL personnalisées,

  • les boxed functions (fonctions écrites directement dans le modèle).


🔵 1. Fonctions FEEL intégrées

Le langage FEEL inclut un très grand nombre de fonctions prêtes à l’emploi.

👉 Fonctions FEEL courantes :

FonctionUtilité
string()Convertit en texte
number()Convertit en nombre
lower(), upper()Mise en minuscule / majuscule
contains(text, substring)Vérifie une sous-chaîne
substring(text, start, length)Extrait du texte
sum(list)Somme d'une liste
min() / max()Minimum / Maximum
today() / now()Dates et heure
duration()Différence entre dates

🟢 Exemple : utiliser une fonction FEEL dans une table de décision

🧾 Cas d’usage

Calculer un prix final après remise.

Expression FEEL :

amount - (amount * discountPercent / 100)

Exemple dans une table de décision :

MontantRemise (%)Sortie
> 100010amount - (amount * 0.10)
<= 10005amount - (amount * 0.05)

🟡 2. Fonctions FEEL personnalisées

🟡 A. Boxed Function (fonction écrite dans le modèle)

Exemple : calculer un âge

function(birthYear) (year(today()) - birthYear)

Appel :

age(1990)

Résultat :

34

🟡 B. Fonction nommée réutilisable (dans un Context)

Exemple :

{ calculateTax: function(amount, taxPercent) amount * taxPercent / 100, finalAmount: amount + calculateTax(amount, 18) }

Appel :

calculateTax(1000, 18)

🔴 3. Fonctions Java dans DMN (avancé)

DMN peut appeler des méthodes Java lorsque vous exposez ces fonctions via :

  • WorkItemHandlers

  • Extensions runtime

  • Import Java dans le modèle DMN

Exemple fonction Java :

public static int doubleValue(int n) { return n * 2; }

Appel dans DMN :

myfunctions.doubleValue(5)

📘 Exemple complet : fonction DMN de calcul de remise

Fonction FEEL :

function(amount, discount) amount - (amount * discount / 100)

Table de décision utilisant la fonction :

MontantRemiseRésultat
>100010calculate(amount, discount)
<=10005calculate(amount, discount)

🔗 Utilisation d’une fonction DMN dans un workflow jBPM

Workflow BPMN :

Start → Business Rule Task (DMN) → Service Task → End

Variables récupérées depuis la décision DMN :

{ "finalPrice": 1350 }

📊 Résumé des fonctionnalités DMN

FonctionnalitéSupport jBPMDescription
Fonctions FEEL intégréesTrès utilisées
Fonctions FEEL personnaliséesLogique métier réutilisable
Boxed functionsDMN standard
Fonctions Java⚠️Avancé / nécessite intégration
Fonctions scriptNon DMN standard

👉 Regardez “DMN” en action:

démo live complète des composants DMN

🎬 YouTube: Learn IT with Shikha video 1


🎬 YouTube: Learn IT with Shikha video 2

👉 Source code: LearnITWithShikha/DMNExamples

🎯 Conclusion

Les fonctions DMN dans jBPM permettent de :

✔ Centraliser la logique métier
✔ Réduire la duplication
✔ Rendre les modèles plus lisibles
✔ Simplifier les règles complexes
✔ Améliorer la réutilisabilité

Les fonctions FEEL sont les plus puissantes pour garder un modèle DMN propre et parfaitement aligné avec les règles métier.

DMN + FEEL = une logique claire, réutilisable et professionnelle.

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


🌐 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