Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Arnaud CLERET


Astuces et News : .Net, BizTalk, Team System, SQL ...

Actualités

  • BizTalk User Group


    Microsoft Most Valuable Professional

    Microsoft Certified Technology Specialist

    Microsoft Certified Solution Developer


    Exakis

    Windows Live Alerts

    View Arnaud Cleret's profile on LinkedIn

Business Rules Engine : Modifier une règle par programmation

Les moteurs de règles deviennent indispensables dans l'implémentation des processus métier d'entreprises devant rester agiles face aux différents marchés sur lesquels elles opèrent. BizTalk Server offre la possibilité de s'appuyer sur un moteur de règle permettant de modifier le comportement d’un processus en production sans modifier sa définition et d'exprimer les règles métiers dans un langage naturel sans requérir au développement.

Business Rules Engine (BRE), inclu dans les composants BizTalk Server, permet certes via son concepteur de modifier aisément le comportement d'un processus mais nécessite tout de même une bonne connaissance des flux applicatifs échangés. Dans certains cas, il peut donc être nécessaire de fournir au sein d'une interface Web ou Winform la possibilité de modifier la valeur d'une condition dans une règle métier sans pour autant donner accès à l'ensemble des fonctionnalités de conception des règles.

Prenons donc un exemple simple de règle basée sur un déclenchement en fonction d'un montant. Dans sa première version, cette règle est créée de la manière suivante via le concepteur de règle : 

A ce stade, il parait déjà évident que le test effectué ici sera amené à être modifié. Cas typique des règles métiers appliquées à la finance ...

L'implémentation par le biais du modèle objet du moteur de règle permet d'accéder simplement aux différentes règles déployées et d'en modifier leur définition. Le code présenté ci-dessous repose entièrement sur le référencement suivant :

  • Namespace : Microsoft.RuleEngine
  • Assembly    : Microsoft.RuleEngine.dll
  • Chemin       : C:\Program Files\Common Files\Microsoft BizTalk\Microsoft.RuleEngine.dll 

Le code qui suit permet d'accéder à la règle précédemment illustrée et d'en modifier la valeur de la condition : 

RuleSetDeploymentDriver driver = new RuleSetDeploymentDriver();
RuleStore ruleStore = driver.GetRuleStore();
 
RuleSetInfo ruleSetInfo = driver.GetDeployedRuleSets("RulesEngineDemo")[0];
RuleSet ruleSet = ruleStore.GetRuleSet(ruleSetInfo);
Rule rule = ruleSet.Rules["Case"];
 
rule.Conditions = new Equal(((Equal)rule.Conditions).LeftArgument, new Constant(300));

Cette dernière ligne de code permet de manipuler directement la condition et d'affecter une nouvelle valeur, ici à 300. Ce cas d'exemple reste très simple puisque ne faisant pas appel aux opérateurs logiques (AND, OR ...) et qu'il n'implique qu'une seule condition dont on connait à l'avance la définition.

Pour publier la modification de la règle et de sa condition d'exécution, deux solutions sont possibles :

  1. Modification de la règle actuellement déployée sans modification de sa version.
  2. Modification de la règle par ajout d'une nouvelle version déployée.

Le premier cas nécessite l'ajout des quelques lignes de codes suivantes :

driver.Undeploy(ruleSetInfo);
ruleStore.Remove(ruleSet); 
 
ruleStore.Add(ruleSet, true);
driver.Deploy(ruleSetInfo);

On constate donc que la version de la règle reste inchangée alors que la valeur de la condition a bien été modifiée :

 

Le second cas nécessite l'ajout des quelques lignes de codes suivantes :

ruleSet.CurrentVersion.MinorRevision += 1;
ruleStore.Add(ruleSet, true);
driver.Deploy(
new RuleSetInfo(ruleSetInfo.Name,
                              
ruleSetInfo.MajorRevision,
                              
ruleSetInfo.MinorRevision + 1));

On constate bien cette fois-ci qu'une nouvelle version a été déployée et que la valeur de la condition a bien été modifiée :

Dans la majeure partie des cas, il reste préférable d'appliquer la seconde solution qui permet d'avoir l'historique des versions déployées en production et de revenir le cas échéant à une version précédente.

Point important dans le déploiement de nouvelles règles : BizTalk Server gère en interne un cache des policies déployées et utilisées au sein des processus métier. Le service "RuleEngineUpdateService" est chargé de controler le déploiement de nouvelles versions et effectue donc un polling de la base toute les 60s (valeur par défaut).

Autre point, le code utilisé dans cette exemple fonctionne avec BizTalk Server 2006 et BizTalk Server 2006 R2 (en béta 2 pour le moment) et devrait fontionner aussi avec BizTalk Server 2004, ce qui reste intéressant en termes de compatibilité ascendante.

Ressources :
Creating and Using Business Rules : http://msdn2.microsoft.com/en-us/library/aa577691.aspx
Programming with Business Rules Framework : http://msdn2.microsoft.com/en-us/library/aa561833.aspx

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: samedi 19 mai 2007 23:05 par arno
Classé sous : ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TCB : Travailler en équipe sans réseau par The Mit's Blog le il y a 2 minutes

- Accès anonyme et les pages Forms / viewlsts.aspx... par Nicolas Humann le il y a 3 heures et 55 minutes

- l'Atelier 4 du coach C# est disponible par Bernard Fedotoff le il y a 5 heures et 30 minutes

- [WPF] Formatter l’affichage lors d’un binding, via StringFormat par Thomas Lebrun le il y a 10 heures et 32 minutes

- WSC08 : Le bilan, Les Photos, Les Webcasts à voir ou à revoir par Blog de Daniel TIZON [daniel] le il y a 19 heures et 40 minutes

- SharePoint et ses DB : Avez vous pensé à les "Tweaker" ? par The Mit's Blog le il y a 20 heures et 9 minutes

- NTttcp : Mesurer la vitesse d'un réseau par Blog d'Olivier Huet le il y a 20 heures et 33 minutes

- Un nouveau quizz par Matthieu MEZIL le il y a 23 heures et 17 minutes

- Webcast ADO.NET Data Services par Matthieu MEZIL le il y a 23 heures et 20 minutes

- edmx : mise à jour du modèle depuis la base par Matthieu MEZIL le 10-06-2008, 17:47