Moteur de règle
Sommaire |
Introduction
Règles métiers
Les objets métiers doivent respecter un ensemble de contraintes pour garantir la cohérence du système d’information. On appelle « règles métiers » l’ensemble des contraintes qui s’appliquent sur un objet métier. Dans l’architecture Ligne 1000 les règles métiers sont explicitement définies dans le modèle métier ; cette approche permet une gestion déclarative centralisée et standardisée des règles métiers.
Note : Les règles métiers sont essentiellement des règles d'intégrité du modèle métier, ce ne sont pas des règles destinées à mettre en oeuvre une politique d'Entreprise. |
Moteur de règle
Pour garantir la cohérence des objets métiers, les règles métiers doivent être exécutées au cours du cycle de vie des objets métiers. Dans l’architecture Ligne 1000 l’exécution des règles métiers est prise en charge par le framework ; ce service est appelé le « moteur de règle ».
Elément constituants une règle métier
Une règle métier est une description précise d’une contraintes portant sur un objet métier ; cette description est standardisée et comporte les éléments suivants :
- Le type de règle – obligatoire.
- L’attribut associé – pour les règles portant sur un attribut.
- Déclenchement - la condition de validation pour cette règle.
- Déclencheurs – éléments qui peuvent déclencher la vérification de la règle.
- Invalideurs – éléments qui invalident cette règle.
Les conditions de déclenchement sont généralement implicitement définies par le type de la règle.
Création de règle métier
Les règles métiers sont définies dans le concepteur de modèle au niveau des classes ; la fonction Ajouter une règle métier est accessible sur le menu droit associé à un nœud classe.
Cette commande ouvre une fenêtre de dialogue où l’utilisateur peut paramétrer une règle :
Toutes les règles ont un ensemble de propriétés communes. La définition d’une règle est réalisée par le dialogue de propriété d’une règle, accessible dans le concepteur de modèle.
Les règles sont caractérisées par :
- Nom
- Le nom est l’identifiant de la règle. Il est unique dans une même classe.
- Type de règle
- Le type de règle détermine le comportement d'une règle. Les types des règles sont prédéfinis en Ligne 1000. L’utilisateur peut choisir dans une liste déroulante le type de règle parmi les types prédéfinis.
- Attribut associé (porte sur)
- Une règle peut concerner un attribut ou l’objet dans son ensemble. Dans le premier cas, cette information désigne l’attribut en question.
- Message
- Le déclenchement d'une règle peut émettre un message. Cette information est le texte du message émis. Le message peut comporter des références à des attributs de l’objet ; celles-ci doivent être encadrées par le caractère « @ »
- Surcharge de règle
- Si cette règle est ajoutée à une classe dérivée, on peut surcharger une règle de même type associée à la classe de base. Dans la liste déroulante associée au label « Surcharge de » se trouvent toutes les règles disponibles.
- Case à cocher « ne pas exécuter cette règle en contrôle d’intégrité »
- Certaines règles peuvent empêcher le fonctionnement correct de l'outil de vérification d'intégrité ou sont sans intérêt dans ce contexte. Utilisez cette option pour désactiver la règle pendant le contrôle d'intégrité.
- Description
- Une description en français décrivant la règle à un niveau compréhensible à l’utilisateur. Cette description est reprise dans la génération automatique de la documentation du système.
- Code
- C’est le programme en script qui est exécuté automatiquement après le déclenchement de la règle.
- Déclenchement
- La liste des attributs ayant le rôle de déclencheur. Le changement de valeur de ces attributs va déclencher l'évaluation de la règle.
- Invalidants
- La liste des attributs ayant le rôle d’invalidant. La règle sera exécutée seulement si un attribut avec rôle d’invalidant a été modifié.
- Historique
- Contient l'historique des modifications d'une règle.
Points de déclenchement
En général les règles métiers sont déclenchées automatiquement par le moteur de règle en fonction de leur type et d’événements techniques internes au framework. Ces évènements techniques sont appelés les « points de déclenchement ». Pour les règles d’action, l’utilisateur défini explicitement les « points de déclenchement » qui vont provoquer l’exécution de la règle.
Les évènements « points de déclenchement » sont :
- évènements liés aux objets
- Création objet
- Initialisation objet
- Modification objet
- Validation objet (commit)
- Affichage objet
- Chargement objet
- Suppression objet
- évènements liés aux attributs
- Modification valeur attribut
- évènements lies aux rôles
- Création rôle
- Suppression rôle
- Modification d’un objet dans un rôle liste
- Ajouter un objet dans un rôle liste
- Retirer un objet dans un rôle liste
- Un rôle va ajouter ses objets dans la transaction
Règles par famille
Règle attribut non modifiable | rlNonModifiable |
Règle d'interface attribut non modifiable | rlIHMNonModifiable |
Règle attribut non saisissable | rlNonSaisissable |
Règle attribut non défini | rlNonDefini |
Règle d'interface attribut non définie | rlIHMNonDefini |
Règle attribut valeur obligatoire | rlValeurObligatoire |
Règle objet non instanciable | rlObjetNonInstanciable |
Règle objet non modifiable | rlObjetNonModifiable |
Règle objet non supprimable | rlObjetNonSupprimable |
Règle objet non saisissable | rlObjetNonSaisissable |
Règle d’erreur | rlRegleErreur |
Règle d'interface d’erreur | rlIHMRegleErreur |
Règle d’information | rlRegleInformation |
Règle d'interface d’information | rlIHMRegleInformation |
Règle d’alerte | rlRegleAlerte |
Règle d'interface d’alerte | rlIHMRegleAlerte |
Règle valeur initiale | rlValeurInitiale |
Règle valeur par défaut | rlValeurParDefaut |
Règle d'interface valeur par défaut | rlIHMValeurParDefaut |
Règle d’action | rlAction |
Règles de dérivation | rlDerivation |
Règles d'état | rlRegleEtat |
Déclencheurs
Le déclencheur est un élément optionnel d’une règle qui provoque l’exécution de celle-ci au moment de la modification du déclencheur. Les éléments déclencheurs sont des attributs, des rôles ou des signaux de la classe.
Une règle peut avoir aucun, un ou plusieurs déclencheurs.
Note : On peut définir comme déclencheur un attribut d'un rôle de la classe, pour des raisons de performances cette possibilité est limitée au premier niveau de rôle. |
Exemple
On peut imaginer deux attributs d’une classe : Ville et Code Postal. Pour que Ville soit obligatoire uniquement si CodePostal est renseigné, il faut définir une règle obligatoire pour Ville avec, comme déclencheur, CodePostal.
Pour ajouter un déclencheur, dans la fenêtre Règle / Déclenchement, cliquez sur le bouton indiqué ci-dessous :
Dans la fenêtre auxiliaire l’utilisateur peut choisir l’attribut qui va jouer le rôle de déclencheur de règle. Les déclencheurs permettent de détailler le comportement d’une règle associée à une propriété de l’objet en fonction des états des autres propriétés de l’objet à l’exécution.
L’application permet d’ajouter directement un déclencheur à une règle dans l’arbre de conception du modèle : clic droit sur la règle et sélectionner Ajouter un déclencheur :
Double-cliquez sur l'attribut ou le rôle que vous voulez définir comme déclencheur de la règle.
Invalideurs
L’invalideur est un élément optionnel d’une règle qui provoque l’invalidation de celle-ci au moment de la modification de l’invalideur. Les éléments invalideurs sont des attributs, des rôles ou des signaux de la classe.
L’invalidation est le marquage d’une règle comme étant « invalide ».
Une règle peut avoir aucun, un ou plusieurs invalideurs.
Les invalideurs permettent de contrôler l’état « valide » ou « invalide » d’une règle. Lorsqu’une règle possède des invalideurs, le moteur de règle ne l’exécute que si elle se trouve dans un état « invalide », c’est à dire si un ou plusieurs invalideurs de cette règle se sont déclenchés depuis sa dernière exécution.
Note : On peut définir comme invalideur un attribut d'un rôle de la classe, pour des raisons de performances cette possibilité est limitée au premier niveau de rôle. |
Pour ajouter un invalideur, dans la fenêtre Règle / Invalidation cliquez sur le bouton indiqué ci-dessous :
Double-cliquez sur l'attribut ou le rôle que vous voulez définir comme invalideur de la règle.
Exemple
On peut imaginer un attribut dérivé Solde qui est calculé comme la différence entre la valeur de l’attribut Débit et la valeur de l’attribut Crédit. Chaque fois que l’attribut Solde sera utilisé dans application, la règle de dérivation est évaluée et la différence Débit – Crédit sera recalculée. Mais cette réévaluation n’est pas nécessaire si les valeurs de Crédit et de Débit ne sont pas modifiées depuis la dernière évaluation de la règle. La solution est d’ajouter les invalideurs Débit et Crédit à la règle de dérivation.
Exemple de succession des opérations | Comportement sans invalideur | Comportement avec invalideurs |
---|---|---|
1. Après création objet | Evaluation Solde | Evaluation Solde |
2. Affichage Solde | Evaluation Solde | Sans évaluation |
3. Modification Débit | Evaluation Solde | Evaluation Solde |
4. Modification Crédit | Evaluation Solde | Evaluation Solde |
5. Affichage Solde en Euro | Evaluation Solde | Sans évaluation |
6. Affichage Solde en USD | Evaluation Solde | Sans évaluation |
L’application permet d’ajouter directement un invalideur à une règle dans l’arbre de conception de modèles : clic droit sur la règle et « ajouter un invalideur ».
Double-cliquez sur l'attribut ou le rôle que vous voulez définir comme invalideur de la règle.
Signaux
Un signal est un événement déclenché par le code métier. Un signal est associé à une classe et il peut avoir le rôle de déclencheur ou d’invalideur seulement pour les règles de cette classe. Par contre, le signal peut être déclenché dans une section de code associé à une autre classe.
Ajout de signaux
Pour ajouter un signal à une classe, dans le concepteur de modèles / l’arbre de conception : clic droit sur la classe et ensuite sur Ajouter un signal :
Renseigner dans la boîte de dialogue les éléments constituants d’un signal : l’identifiant du signal et une description du signal.
On définit un signal comme déclencheur ou comme invalideur par la même interface que pour les attributs et les rôles.
Déclenchement d’un signal
La procédure « Signal » disponible au niveau de l’objet permet de déclencher un signal :
procedure Signal(const Nom_Signal:string);
Le déclenchement d’un signal n’a aucune restriction d’utilisation. On peut émettre un signal dans n’importe quelle ligne de code associé aux opérations ou aux règles d’une classe.
Exemple – déclenchement d’un signal de la classe
begin Result := FALSE; if (credit.TCValue<>0) and (debit.TCValue<>0) then debit.value :=0; if (credit.TCRate<>debit.TCRate) then debit.AssignQuotationList(Credit); Signal('MontantEcriture'); end;
Exemple – déclenchement d’un signal d'une autre classe
Dans la règle d’action CalculerPourcentage associée à la classe VentilationSection on déclenche deux signaux qui sont situés dans une autre classe référencé par le rôle ModeleVentilation.
{Action_CalculerPourcentage} begin if oidModeleVentilation <> '' then begin ModeleVentilation.Signal('RecalculMontant'); ModeleVentilation._CalculerPourcentage; ModeleVentilation.Signal('RecalculPourcentage'); end; end;
Surcharge de règle
Dans une hiérarchie de classes, les règles peuvent être surchargées. Lorsqu'une règle surchargée est exécutée, la classe de l'objet est utilisée pour déterminer l'implémentation à activer. Le framework détermine dynamiquement, à l'exécution, la classe de l’objet et l'implémentation de la règle qui doit être exécutée.
Note : Une règle définie dans une classe dérivée peut surcharger une règle associée à la clase de base ayant le même type et portant sur le même attribut. |
Pour surcharger une règle, choisissez dans la liste Surcharge de la règle que vous voulez surcharger :
Dans ce cas la nouvelle Règle Valeur Initiale SitePrivilégier peut remplacer la règle de type Valeur Initiale associée à la classe de base TRoleTiers portant sur l’attribut SitePrivilégier.
Il n’est pas possible de surcharger une règle qui porte sur un attribut différent que la règle qui la surcharge.
Dans le concepteur de modèle on peut visualiser les règles qui sont surchargées :
Note : La surcharge de règles est applicable uniquement pour les classes dérivées. On ne peut pas utiliser la surcharge dans les classes d’extension. |