Règle d’action (rule)
Les règles d'action sont des règles déclencheable par les points de déclenchement interne du framework utilisés par le moteur de règle, elles permettent une implémentation des comportements d'une manière très flexible.
Il est possible de simuler le comportement des autres règles avec des règles d'action mais ceci n’est pas conseillé.
Points de déclenchement
On choisit les évènements qui peuvent déclencher la règle d’action dans la section Evènements du dialogue de propriété de la règle.
On peut choisir un ou plusieurs évènements qui peuvent déclencher l’exécution du programme.
Evènements déclencheurs | Usage | Remarque |
---|---|---|
Peut-on créer un objet ? | Le code de la règle sera exécuté avant la création de l’objet. | |
Initialisation des attributs de l’objet | Le code de la règle sera exécuté après la création de l’objet. | |
L’objet est initialisé | Le code de la règle sera exécuté après l’initialisation des attributs de l’objet. | |
Peut-on modifier l’objet ? | Le code de la règle sera exécuté à la tentative de modification d’un attribut de cet objet. | |
Peut-on supprimer l’objet ? | Le code de la règle sera exécuté avant la suppression de l’objet. | |
Une création d'objet est annulée. | Le code de la règle sera exécuté lorsque un objet à été créé puis supprimé avant qu'une transaction ne le sauvegarde. | |
L’objet est supprimé | Le code de la règle sera exécuté après la suppression de l’objet. | |
Peut-on modifier l’attribut ? | Le code de la règle sera exécuté avant de la modification de l’attribut qui doit avoir le rôle de déclencheur pour cette règle. | Le déclenchement de cette règle est uniquement par l’intermédiaire des déclencheurs. |
L’attribut est modifié | Le code de la règle sera exécuté après la modification de l’attribut qui doit avoir le rôle de déclencheur pour cette règle. | Le déclenchement de cette règle est uniquement par l’intermédiaire des déclencheurs. |
L’objet a été chargé de la base de données | Le code de la règle sera exécuté après le chargement de l’objet. | |
La transaction va créer l’objet | Le code de la règle sera exécuté avant la validation d’un objet en création. | |
La transaction va sauvegarder l’objet | Le code de la règle sera exécuté avant l'enregistrement de l’objet dans la base de données. | |
La transaction va supprimer l’objet | Le code de la règle sera exécuté avant la suppression de l’objet. | |
Peut-on valider la transaction (<=> règle d’erreur) ? | Le code de la règle sera exécuté avant la validation d’un objet. | On doit faire la différence entre cet évènement et « La transaction va créer l’objet ». Les deux sont déclenchés avant la validation de l’objet, mais le dernier est déclenché uniquement pour les objets qui sont en création. |
La transaction a créé l’objet | Le code de la règle sera exécuté après la validation d’un objet en création. | |
La transaction a sauvegardé l’objet | Le code de la règle sera exécuté après l'enregistrement de l’objet dans la base de données. | |
La transaction a supprimé l’objet | Le code de la règle sera exécuté après la suppression de l’objet. | |
Peut-on ajouter un objet dans le rôle liste ? | Le code de la règle sera exécuté avant d’ajouter un objet dans le rôle liste. Le rôle doit être déclencheur pour cette règle. | |
Un objet a été ajouté dans le rôle liste | Le code de la règle sera exécuté après l'ajout d'un objet dans le rôle liste. Le rôle doit être déclencheur pour cette règle. | |
Peut-on retirer un objet du rôle liste ? | Le code de la règle sera exécuté avant de retirer un objet du rôle liste. Le rôle doit être déclencheur pour cette règle. | |
L’objet a été retiré du rôle liste. | Le code de la règle sera exécuté après qu'un objet ait été retiré du rôle liste. Le rôle liste doit être déclencheur pour cette règle. | |
Un objet référencé par le rôle a été modifié | Le script de la règle sera exécuté après la modification d'un objet du rôle liste. | Cette règle d’action est déclenchée par des attributs de l’objet référencé par le rôle. |
Un rôle va ajouter ses objets dans la transaction | On utilise la règle d’action déclenchée par ce type d’évènement pour les classes qui ont une relation de composition avec une autre classe.
La transaction objet traite les deux classes participant à la composition comme un ensemble unitaire. Chaque fois un objet de type A qui se trouve dans une transaction est modifié, tous les objets de type B qui sont dans le rôle liste seront ajoutés dans la transaction. Une modification sur un objet B qui se trouve dans rôle entraîne par défaut la mise en transaction de l’objet A. Pour optimiser les traitements on peut, dans des cas très précis, empêcher les objets du rôle d'entrer en transaction. Si Result = False après le déclenchement de la règle, les objets du rôle liste ne sont pas mis en transaction. |
|
Avant importation | L'objet est insérer dans la transaction alors que le contexte est en mode importation. | |
Après importation. | L'objet va être validé alors que le contexte est en mode importation. |
Exemple
{TEcriture.Action_ModifEcritureRegularisee} var vPieceRegul : TPiece; begin if (ProfilTVAAvecProrata) and (typeEcriture.value <> typeEcriture_Simulation) and (compteGeneral.natureCompte.value = natureCompte_HT) and (Assigned(Piece)) and (not piece.historique) then begin vPieceRegul := ClassManager.FindObject('TPiece','(Lot.OrigineLot.value=%1) and (historique=%2) and (pDate=%3)', '',False,[OrigineLot_RegularisationTVA, False, GetLastDayOfYear(Date2Year(eDate))]); if assigned(vPieceRegul) then if assigned(vPieceRegul.Lot) then vPieceRegul.Lot.modifie := True; end; end;