Moteur de règle

De Wiki1000

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.

Info-20px.png 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.

image1.png

Cette commande ouvre une fenêtre de dialogue où l’utilisateur peut paramétrer une règle :

image3.png

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.

Info-20px.png 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 :

image5.png

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 :

image4.png

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.

Info-20px.png 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 :

image6.png

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 ».

image7.png

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.

Info-20px.png 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 :

image9.png

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 :

image8.png

Info-20px.png 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.

Développement DSM

Outils personnels