Partager via


Contrôle de chaînage avant

Le chaînage avant est une notion très puissante qui permet aux règles atomiques d'être assemblées dans des rulesets sans que les dépendances parmi les règles soient définies, ni même connues. Toutefois, dans certains scénarios, le writer de règles peut nécessiter de fournir davantage de contrôle sur le comportement du chaînage, en particulier pour restreindre le chaînage se produisant. Cela permet au modeleur de règles d'effectuer les opérations suivantes :

  • Limiter l'exécution répétitive des règles, qui peut donner des résultats incorrects.

  • Améliorer les performances.

  • Empêcher les boucles fugitives.

Windows Workflow Foundation fournit deux propriétés pour simplifier ce niveau de contrôle :

Ces deux valeurs peuvent être définies dans RuleSet Editor.

Propriété ChainingBehavior

La propriété ChainingBehavior sur l'objet RuleSet peut avoir trois valeurs possibles : Full, UpdateOnlyou None.

  • L'option Full est la valeur par défaut et fournit le comportement décrit jusqu'à ce point.

  • L'option UpdateOnly désactive le chaînage implicite et basé sur l'attribut et prescrit que le chaînage se produise uniquement pour les instructions Update explicites. Cela donne le contrôle complet sur les règles provoquant la réévaluation. En général, vous devriez utiliser cette option pour éviter les dépendances circulaires qui provoquent des réexécutions de règles excessives (ou même fugitives) ou pour renforcer la performance en éliminant les réévaluations de règles qui ne sont pas requises pour fournir fonctionnement parfait de RuleSet.

  • La dernière option est None. Cette option impose au moteur d'évaluer les règles de manière strictement linéaire. Chaque règle ne devra être évaluée qu'une fois et dans l'ordre de priorité. Les règles avec une priorité plus haute pourraient affecter des règles avec une priorité plus basse, mais l'inverse ne pourrait être vrai parce qu'aucun chaînage ne se produirait. Par conséquent, cette option devrait être utilisée avec les assignations de priorité explicites à moins qu'il n'existe aucune dépendance parmi les règles.

Propriété ReevaluationBehavior

La propriété ReevaluationBehavior sur l'objet Rule a deux valeurs possibles : Always et Never.

  • Always est la valeur par défaut et fournit le comportement précédemment évoqué, à savoir que la règle est toujours réévaluée selon le chaînage provoqué par les actions d'autres règles.

  • Never, comme son nom l'indique, désactive cette réévaluation. La règle est évaluée une fois, mais n'est pas réévaluée si elle a exécuté précédemment des actions. En d'autres termes, si la règle a été évaluée précédemment, et par conséquent a exécuté ses actions Then ou Else, elle n'est pas réévaluée. Toutefois, l'exécution d'une collection d'actions vide dans les actions Then ou Else n'indique pas qu'une règle a été exécutée.

En général, cette propriété est utilisée, au niveau de la règle, pour empêcher une boucle sans fin provoquée par les dépendances entre la règle et ses propres actions ou d'autres règles. Par exemple, la règle suivante devrait créer sa propre boucle sans fin et la réévaluation n'est pas requise pour accomplir les exigences fonctionnelles de la règle :

IF this.shippingCharge < 2.5 AND this.orderValue > 100
THEN this.shippingCharge = 0

De plus, s'il est prévu que la règle soit réévaluée, mais uniquement si le champ OrderValue est modifié, l'utilisateur peut définir le comportement de chaînage sur le RuleSet de sorte qu'il créé un chaînage uniquement sur les instructions Update explicites (puis ajoute ces instructions Update aux actions de règle pertinentes). Bien sûr, l'utilisateur pourrait ajouter un prédicat supplémentaire à cette règle qui vérifie que la valeur de ShippingCost n'est pas déjà à 0. Mais les contrôles de chaînage ne nécessitent pas que les utilisateurs définissent leurs règles en fonction des détails d'évaluation plutôt que leurs besoins professionnels.

Fonction Halt

En guise de contrôle final, une fonction Halt peut être ajoutée en tant qu'action de la règle (tapez « Halt » dans les zones d'action Then ou Else de l'éditeur). Cela arrête immédiatement l'exécution RuleSet et renvoie le contrôle au code appelant. L'utilité de cette fonction n'est, bien sûr, pas limitée nécessairement aux scénarios de contrôle du chaînage. Un RuleSet ayant un but fonctionnel spécifique, par exemple, peut utiliser une fonction Halt pour court-circuiter l'exécution lorsque le but a été atteint.

Voir aussi

Référence

ChainingBehavior
ReevaluationBehavior
RuleHaltAction
RuleUpdateAction
RuleSet

Concepts

Utilisation de RuleSets dans les workflows
Évaluation des règles dans des RuleSets

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.