Exécution du plan d'exécution d'un jeu de règles métier
La génération du plan d'exécution d'un jeu de règles métier implique les opérations suivantes :
1. Une instance RuleValidation spécifique est créée en fonction du sélecteur défini dans la règle métier.
2. L'instance RuleValidation sera utilisée pour déterminer si la configuration de la règle métier est valide à l'aide de la méthode isConfigurationValid. Si la configuration n'est pas valide, l'instance RuleValidation sera ignorée pour le plan d'exécution du jeu de règles métier, et l'erreur sera journalisée.
3. Pour chaque règle métier, l'instance RuleValidation est appelée avec les éléments suivants :
a. Collection d'objets que les règles doivent évaluer.
b. Critères propres au contexte (tels que la référence de conteneur) qui peuvent être utilisés par une instance RuleValidation pour configurer son exécution.
4. L'instance RuleValidation est ajoutée au plan d'exécution.
Tous les validateurs de règles métier implémenteront l'interface RuleValidation. Une règle métier standard peut être classée en deux catégories principales :
Validation simple : la vérification des règles est effectuée sur l'objet métier proprement dit ou sur les objets initiaux configurés par la relation. Cette vérification porte par exemple sur la validation d'attribut ou sur un état du cycle de vie de l'objet avant son officialisation.
Validation structurée : les règles peuvent ou non être exécutées sur les objets métier, mais comprennent certains contrôles de validation sur leurs objets associés, tels que les enfants de l'article ou du document. Dans ce type de validation, un jeu d'algorithmes plus complexes peut généralement être nécessaire pour calculer les règles de validation métier et renseigner le résultat de la validation avec le drapeau approprié. Une règle de validation structurée correspond par exemple à un contrôle de validation permettant de s'assurer que tous les objets résultants et toutes les dépendances de premier niveau présentent l'état adéquat.
Les implémentations de RuleValidation prises en charge qui sont fournies sont les suivantes :
Sélecteur de règle métier
RuleValidation
Description
CHECKOUT_RULE
com.ptc.core.businessRules.validation.CheckoutRuleValidator
Vérifie que les objets ne sont pas récupérés ni récupérés dans un projet.
RELEASE_TARGET
com.ptc.core.businessRules.validation.ReleaseTargetValidator
Vérifie que tous les objets résultants présentent un état approprié pour l'officialisation et disposent d'une transition de gestion des modifications définie appropriée en accord avec les règles de transition de cycle de vie affectées.
ATTRIBUTE_RULE
com.ptc.core.businessRules.validation.AttributeRuleValidator
Vérifie que la configuration de règle d'attribut spécifiée pour un type d'objet est valide.
BOM_RELEASE_RULE
com.ptc.core.businessRules.validation.BOMReleaseRuleValidator
Vérifie que tous les objets résultants et tous leurs enfants de premier niveau présentent un état approprié.
* 
La demande de promotion prend en charge la règle d'attribut et la règle de récupération. L'avis de modification prend en charge n'importe quelle règle.
L'instanciation de RuleValidation sera basée sur le sélecteur défini dans la règle métier. Les services d'application seront utilisés pour rechercher la classe d'implémentation du sélecteur défini. Si aucune classe d'implémentation n'est définie ou que la classe ne peut pas être instanciée, une erreur sera journalisée.
Avant toute validation, le moteur appellera RuleValidation.isConfigurationValid qui déterminera si la configuration de règle métier est valide. Cette validation de la configuration de règle métier est également appelée lors du chargement de la règle métier, mais puisqu'il est possible de modifier l'instance RuleValidation enregistrée, la validation de la configuration est aussi appelée avant l'exécution de la validation de règle métier.
La méthode d'initialisation TheRuleValidation appelée prepare est utilisée pour effectuer le prétraitement initial du jeu complet d'objets initiaux qui sera validé par rapport au jeu de règles métier. Cela permet d'effectuer une pré-validation sur le serveur Windchill (par exemple, la récupération du modèle de cycle de vie qui serait commun à de nombreux éléments). Il est préférable d'appeler des API multi-objet à partir de la méthode RuleValidation.prepare. Il est déconseillé d'utiliser la méthode RuleValidation.peformValidation pour effectuer des appels multi-objet.
Si la méthode RuleValidation.isConfigurationValid renvoie la valeur true, la méthode RuleValidation performValidation est appelée pour chaque objet initial. L'objet initial est transmis dans le RuleValidationObject. Le RuleValidationObject contient l'objet cible (l'objet initial s'il ne s'agit pas d'un lien ou le rôle A ou B si l'objet initial est un lien) et le lien (si l'objet initial est un lien). Lorsque la règle métier est un RuleValidation de type structuré, le RuleValidationObject contient également les enfants collectés ainsi qu'un mappage des enfants collectés aux liens avec lesquels ils ont été collectés. Le performValidation doit toujours renvoyer un nouveau RuleValidationResult comportant une référence à l'objet cible et non au lien.
Diagramme de séquence du moteur des règles métier
Diagramme des interactions de validation du moteur des règles métier
Les implémentations RuleValidation sont enregistrées dans service.properties. Pour créer ou remplacer une implémentation RuleValidation, insérez le code suivant dans un fichier service.properties xconf personnalisé :
<Service context="default" name="com.ptc.core.businessRules.validation.
RuleValidation">
<Option serviceClass="com.ptc.core.businessRules.validation.
CheckoutRuleValidator"
selector="CHECKOUT_RULE"
cardinality="singleton"
requestor="null"/>
</Service>
Dans la mesure du possible, la cardinalité de RuleValidation doit être définie sur "singleton" afin de réduire le nombre d'instances d'une implémentation de RuleValidation spécifique. La méthode addToProcessingMap() de la classe RuleValidationKey peut être utilisée pour stocker les données de pré-validation afin de prendre en charge le traitement "thread-safe" (verrouillé par un fil d'exécution) des implémentations de RuleValidation lorsque la cardinalité est définie sur "singleton".
Est-ce que cela a été utile ?