Utilisation de l'activité d'interopérabilité dans un flux de travail .NET Framework 4
Cette rubrique s'applique à Windows Workflow Foundation 4.
Les activités créées à l'aide de .NET Framework 3.0 ou .NET Framework 3.5 peuvent être utilisées dans un flux de travail .NET Framework 4 en utilisant l'activité Interop. Cette rubrique propose une vue d'ensemble de l'utilisation de l'activité Interop.
Visual Basic Remarque : |
---|
L'activité Interop ne s'affiche pas dans la boîte à outils du Workflow Designer, sauf si le paramètre Framework cible du projet du flux de travail est défini sur .Net Framework 4. |
Utilisation de l'activité Interop dans les flux de travail .NET Framework 4
Cette rubrique consiste à créer une bibliothèque d'activité .NET Framework 3.5 qui contient une activité DiscountCalculator
. L'activité DiscountCalculator
calcule une remise sur la base d'un montant d'achat et se compose d'un objet SequenceActivity qui contient un objet PolicyActivity.
Remarque : |
---|
L'activité .NET Framework 3.5 créée dans cette rubrique utilise un objet PolicyActivity pour implémenter la logique de l'activité. L'utilisation d'une activité .NET Framework 3.5 personnalisée ou de l'activité Interop n'est pas obligatoire pour utiliser des règles dans un flux de travail .NET Framework 4. Pour obtenir un exemple de l'utilisation de règles dans un flux de travail .NET Framework 4 sans utiliser l'activité Interop, consultez l'exemple Activité de stratégie dans .NET Framework 4. |
Pour créer le projet de bibliothèque d'activités .NET Framework 3.5
Ouvrez Visual Studio 2010 et dans le menu Fichier, sélectionnez Nouveau, puis Projet.
Dans le volet Modèles installés, développez le nœud Autres types de projets et sélectionnez Solutions Visual Studio.
Dans la liste Solutions Visual Studio, sélectionnez Nouvelle solution. Dans la zone Nom, tapez PolicyInteropDemo et cliquez sur OK.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyInteropDemo et sélectionnez Ajouter, puis Nouveau projet.
Conseil : Si la fenêtre Explorateur de solutions n'est pas visible, dans le menu Affichage, choisissez Explorateur de solutions. Dans la liste Modèles installés, sélectionnez Visual C#, puis Workflow. Dans la liste déroulante de la version du .NET Framework, sélectionnez .NET Framework 3.5, puis dans la liste Modèles, sélectionnez Bibliothèque d'activité de workflow.
Dans la zone Nom, tapez PolicyActivityLibrary et cliquez sur OK.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Activity1.cs et sélectionnez Supprimer. Pour confirmer, cliquez sur OK.
Pour créer l'activité DiscountCalculator
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyActivityLibrary et sélectionnez Ajouter, puis Activité.
Dans la liste Éléments Visual C#, sélectionnez Activité (avec la séparation de code). Dans la zone Nom, tapez DiscountCalculator et cliquez sur OK.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur DiscountCalculator.xoml et sélectionnez Afficher le code.
Ajoutez les trois propriétés suivantes à la classe
DiscountCalculator
:public partial class DiscountCalculator : SequenceActivity { public double Subtotal { get; set; } public double DiscountPercent { get; set; } public double Total { get; set; } }
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur DiscountCalculator.xoml et sélectionnez Concepteur de vues.
Faites glisser une activité Stratégie de la section Windows Workflow v3.0 de la Boîte à outils et déposez-la dans l'activité DiscountCalculator.
Conseil : Si la fenêtre Boîtes à outils n'est pas visible, dans le menu Affichage, choisissez Boîtes à outils.
Pour configurer les règles
Cliquez sur l'activité Stratégie récemment ajoutée pour la sélectionner, si ce n'est pas déjà fait.
Dans la fenêtre Propriétés, cliquez sur la propriété RuleSetReference pour la sélectionner, puis sur le bouton de sélection situé à droite de la propriété.
Conseil : Si la fenêtre Propriétés n'est pas visible, dans le menu Affichage, choisissez Fenêtre Propriétés. Sélectionnez Cliquer sur Nouveau.
Cliquez sur Ajouter une règle.
Dans la zone Condition, tapez l'expression suivante :
this.Subtotal >= 50 && this.Subtotal < 100
Dans la zone Actions THEN, tapez l'expression suivante :
this.DiscountPercent = 0.075
Cliquez sur Ajouter une règle.
Dans la zone Condition, tapez l'expression suivante :
this.Subtotal >= 100
Dans la zone Actions THEN, tapez l'expression suivante :
this.DiscountPercent = 0.15
Cliquez sur Ajouter une règle.
Dans la zone Condition, tapez l'expression suivante :
this.DiscountPercent > 0
Dans la zone Actions THEN, tapez l'expression suivante :
this.Total = this.Subtotal - this.Subtotal * this.DiscountPercent
Dans la zone Actions ELSE, tapez l'expression suivante :
this.Total = this.Subtotal
Pour fermer la boîte de dialogue Éditeur d'ensemble de règles, cliquez sur OK.
Assurez-vous que l'objet RuleSet que vous venez de créer est sélectionné dans la liste Nom, puis cliquez sur OK.
Appuyez sur F6 pour générer la solution.
L'exemple de code suivant indique les règles ajoutées à l'activité DiscountCalculator
lors de cette procédure.
Rule1: IF this.Subtotal >= 50 && this.Subtotal < 100
THEN this.DiscountPercent = 0.075
Rule2: IF this. Subtotal >= 100
THEN this.DiscountPercent = 0.15
Rule3: IF this.DiscountPercent > 0
THEN this.Total = this.Subtotal - this.Subtotal * this.DiscountPercent
ELSE this.Total = this.Subtotal
Lors de l'exécution de l'objet PolicyActivity, ces trois règles évaluent et modifient les valeurs de propriété Subtotal
, DiscountPercent
et Total
de l'activité DiscountCalculator
pour calculer la remise souhaitée.
Utilisation de l'activité DiscountCalculator avec l'activité Interop
Pour utiliser l'activité DiscountCalculator
dans un flux de travail .NET Framework 4, l'activité Interop est utilisée. Dans cette section, deux flux de travail sont créés, l'un à l'aide du code et l'autre à l'aide du Workflow Designer. Ces flux de travail indiquent comment utiliser l'activité Interop avec l'activité DiscountCalculator
. La même application hôte est utilisée pour les deux flux de travail.
Pour créer l'application hôte
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyInteropDemo et sélectionnez Ajouter, puis Nouveau projet.
Dans la liste déroulante de la version du .NET Framework, vérifiez que .NET Framework 4 est sélectionné et, dans la liste Éléments Visual C#, sélectionnez Application console de workflow.
Dans la zone Nom, tapez PolicyInteropHost et cliquez sur OK.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyInteropHost et sélectionnez Propriétés.
Dans la liste déroulante Framework cible, modifiez la sélection .NET Framework 4 Client Profile en .NET Framework 4. Pour confirmer, cliquez sur Oui.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyInteropHost et sélectionnez Ajouter une référence.
Sous l'onglet Projets, sélectionnez PolicyActivityLibrary et cliquez sur OK.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyInteropHost et sélectionnez Ajouter une référence.
Sous l'onglet .NET, sélectionnez System.Workflow.Activities, System.Workflow.ComponentModel et System.Workflow.Runtime et cliquez sur OK.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyInteropHost et sélectionnez Définir comme projet de démarrage.
Appuyez sur F6 pour générer la solution.
Utilisation de l'activité Interop dans le code
Dans cet exemple, une définition de flux de travail est créée à l'aide du code qui contient les activités Interop et DiscountCalculator
. Ce flux de travail est appelé à l'aide de l'objet WorkflowInvoker et les résultats de l'évaluation de règle sont écrits dans la console à l'aide d'une activité WriteLine.
Pour utiliser l'activité Interop dans le code
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Program.cs et sélectionnez Afficher le code.
En tête du fichier, ajoutez l'instruction
using
suivante :using PolicyActivityLibrary;
Supprimez le contenu de la méthode
Main
et remplacez-le par le code suivant :static void Main(string[] args) { CalculateDiscountUsingCodeWorkflow(); }
Dans la classe
Program
, créez une méthode appeléeCalculateDiscountUsingCodeWorkflow
qui contient le code suivant :static void CalculateDiscountUsingCodeWorkflow() { Variable<double> Subtotal = new Variable<double> { Default = 75.99, Name = "Subtotal" }; Variable<double> DiscountPercent = new Variable<double> { Name = "DiscountPercent" }; Variable<double> Total = new Variable<double> { Name = "Total" }; Activity wf = new Sequence { Variables = { Subtotal, DiscountPercent, Total }, Activities = { new Interop { ActivityType = typeof(DiscountCalculator), ActivityProperties = { { "Subtotal", new InArgument<double>(Subtotal) }, { "DiscountPercentOut", new OutArgument<double>(DiscountPercent) }, { "TotalOut", new OutArgument<double>(Total) } } }, new WriteLine { Text = new InArgument<string>(env => string.Format("Subtotal: {0:C}, Discount {1}%, Total {2:C}", Subtotal.Get(env), DiscountPercent.Get(env) * 100, Total.Get(env))) } } }; WorkflowInvoker.Invoke(wf); }
Remarque : Les propriétés Subtotal
,DiscountPercent
etTotal
de l'activitéDiscountCalculator
sont signalées en tant qu'arguments de l'activité Interop et liées à des variables de flux de travail locales dans la collection ActivityProperties de l'activité Interop.Subtotal
est ajoutée en tant qu'argument In, car les donnéesSubtotal
s'acheminent vers l'activité Interop, etDiscountPercent
etTotal
sont ajoutées en tant qu'arguments Out, car leurs données s'acheminent depuis l'activité Interop. Notez que les deux arguments Out sont ajoutés avec les nomsDiscountPercentOut
etTotalOut
pour indiquer qu'ils représentent des arguments Out. Le typeDiscountCalculator
est spécifié comme l'objet ActivityType de l'activité Interop.Appuyez sur CTRL+F5 pour générer et exécuter l'application. Remplacez la valeur
Subtotal
par des valeurs différentes pour tester les différents niveaux de remise fournis par l'activitéDiscountCalculator
.Variable<double> Subtotal = new Variable<double> { Default = 75.99, // Change this value. Name = "Subtotal" };
Utilisation de l'activité Interop dans le Workflow Designer
Dans cet exemple, un flux de travail est créé à l'aide du Workflow Designer. Ce flux de travail a les mêmes fonctionnalités que l'exemple précédent, sauf qu'au lieu d'utiliser une activité WriteLine pour afficher la remise, l'application hôte récupère et affiche les informations de remise à la fin du flux de travail. De plus, au lieu d'une utilisation des variables de flux de travail locales pour contenir les données, les arguments sont créés dans le Workflow Designer et les valeurs sont passées à partir de l'hôte lors de l'appel du flux de travail.
Pour héberger l'activité PolicyActivity à l'aide d'un flux de travail créé par le Workflow Designer
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Workflow1.xaml et sélectionnez Supprimer. Pour confirmer, cliquez sur OK.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur PolicyInteropHost et sélectionnez Ajouter, puis Nouvel élément.
Développez le nœud Éléments Visual C# et sélectionnez Workflow. Dans la liste Éléments Visual C#, sélectionnez Activité.
Dans la zone Nom, tapez DiscountWorkflow et cliquez sur Ajouter.
Pour afficher le volet Arguments, dans la partie inférieure gauche du Workflow Designer, cliquez sur le bouton Arguments.
Cliquez sur Créer un argument.
Tapez Subtotal dans la zone Nom, sélectionnez In dans l'élément déroulant Direction, sélectionnez Double dans l'élément déroulant Type d'argument, puis appuyez sur ENTRÉE pour enregistrer l'argument.
Remarque : Si Double ne figure pas dans la liste déroulante Type d'argument, sélectionnez Rechercher des types..., tapez System.Double dans la zone Nom de type et cliquez sur OK. Cliquez sur Créer un argument.
Tapez DiscountPercent dans la zone Nom, sélectionnez Out dans l'élément déroulant Direction, sélectionnez Double dans l'élément déroulant Type d'argument, puis appuyez sur ENTRÉE pour enregistrer l'argument.
Cliquez sur Créer un argument.
Tapez Total dans la zone Nom, sélectionnez Out dans l'élément déroulant Direction, sélectionnez Double dans l'élément déroulant Type d'argument, puis appuyez sur ENTRÉE pour enregistrer l'argument.
Pour fermer le volet Arguments, dans la partie inférieure gauche du Workflow Designer, cliquez sur le bouton Arguments.
Faites glisser une activité Sequence de la section Flux de contrôle de la Boîte à outils et déposez-la sur l'aire du Workflow Designer.
Faites glisser une activité Interop de la section Migration de la Boîte à outils et déposez-la dans l'activité Sequence.
Cliquez sur l'activité Interop dans l'étiquette Cliquer pour parcourir, tapez DiscountCalculator dans la zone Nom de type et cliquez sur OK.
Remarque : Lorsque l'activité Interop est ajoutée au flux de travail et que le type DiscountCalculator
est spécifié comme sa propriété ActivityType, l'activité Interop expose trois arguments In et trois arguments Out qui représentent les trois propriétés publiques de l'activitéDiscountCalculator
. Les arguments In ont le même nom que les trois propriétés publiques et les trois arguments Out ont les mêmes noms avec Out ajouté au nom de propriété. Dans les étapes suivantes, les arguments de flux de travail créés dans les étapes précédentes sont liés aux arguments de l'activité Interop.Tapez DiscountPercent dans la zone Entrer une expression VB à droite de la propriété DiscountPercentOut et appuyez sur TAB.
Tapez Subtotal dans la zone Entrer une expression VB à droite de la propriété Sous-total et appuyez sur TAB.
Tapez Total dans la zone Entrer une expression VB à droite de la propriété TotalOut et appuyez sur TAB.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Program.cs et sélectionnez Afficher le code.
En tête du fichier, ajoutez l'instruction
using
suivante :using System.Collections.Generic;
Supprimez l'appel à la méthode
CalculateDiscountInCode
dans la méthodeMain
et ajoutez le code suivant :Remarque : Si vous n'avez pas suivi la procédure précédente et si le code Main
par défaut est présent, remplacez le contenu deMain
par le code suivant :static void Main(string[] args) { CalculateDiscountUsingDesignerWorkflow(); //CalculateDiscountUsingCodeWorkflow(); }
Dans la classe
Program
, créez une méthode appeléeCalculateDiscountUsingDesignerWorkflow
qui contient le code suivant :static void CalculateDiscountUsingDesignerWorkflow() { double SubtotalValue = 125.99; Dictionary<string, object> wfargs = new Dictionary<string, object> { {"Subtotal", SubtotalValue} }; Activity wf = new DiscountWorkflow(); IDictionary<string, object> outputs = WorkflowInvoker.Invoke(wf, wfargs); Console.WriteLine("Subtotal: {0:C}, Discount {1}%, Total {2:C}", SubtotalValue, (double)outputs["DiscountPercent"] * 100, outputs["Total"]); }
Pour générer et exécuter l'application, appuyez sur CTRL+F5. Pour spécifier un montant
Subtotal
différent, modifiez la valeur deSubtotalValue
dans le code suivant :double SubtotalValue = 125.99; // Change this value.
Vue d'ensemble des fonctionnalités des règles
Le moteur de règles WF fournit un support pour le traitement des règles dans l'ordre de priorité à l'aide du chaînage avant. Les règles peuvent être évaluées pour un seul élément ou pour les éléments d'une collection. Pour obtenir une vue d'ensemble des règles, ainsi que des informations sur des fonctionnalités particulières des règles, veuillez vous reporter au tableau suivant :
Fonctionnalité des règles | Documentation |
---|---|
Vue d'ensemble des règles |
Présentation du moteur de règles Windows Workflow Foundation |
RuleSet |
Utilisation de RuleSets dans les workflows et objet RuleSet |
Évaluation des règles |
|
Chaînage des règles |
|
Traitement des collections dans les règles |
|
Utilisation de l'activité PolicyActivity |
Utilisation de l'activité PolicyActivity et objet PolicyActivity |
Les flux de travail créés dans .NET Framework 4 n'utilisent pas toutes les fonctionnalités de règles fournies par WF, telles que les conditions d'activité déclaratives et les activités conditionnelles comme ConditionedActivityGroup et ReplicatorActivity. Si nécessaire, ces fonctionnalités sont disponibles pour les flux de travail créés à l'aide de .NET Framework 3.0 et .NET Framework 3.5. Pour plus d'informations, consultez Migration de workflows.