Traitement des commandes avec une stratégie
Cette rubrique s'applique à Windows Workflow Foundation 4.
L'exemple de stratégie du traitement des commandes présente quelques-unes des fonctionnalités clés contenues dans le .NET Framework version 3.5 de Windows Workflow Foundation (WF). Les fonctionnalités suivantes du moteur de règles WF sont nouvelles :
Prise en charge de la surcharge d'opérateur
Prise en charge de l'opérateur new permettant aux utilisateurs de créer de nouveaux objets et tableaux à partir de règles WF.
Prise en charge des méthodes d'extension permettant aux utilisateurs d'appeler ces méthodes à partir de règles WF compatibles avec les styles d'encodage C#.
Remarque : |
---|
Cet exemple requiert l'installation de .NET Framework version 3.5 pour être généré et exécuté. Visual Studio 2010 est nécessaire pour l'ouverture des fichiers projet et solution. |
L'exemple présente un projet OrderProcessingPolicy contenant une commande client composée d'une liste numérotée d'éléments disponibles et d'un code postal. Le traitement de cette commande aboutit si les deux entrées sont correctes ; dans le cas contraire, la stratégie crée des objets d'erreur en utilisant un opérateur +
surchargé et une méthode d'extension prédéfinie afin d'informer l'utilisateur de ces erreurs.
Remarque : |
---|
Pour plus d'informations sur le sujet suivant les méthodes d'extension, consultez Spécification C# version 3.0 (page pouvant être en anglais). |
Cet exemple est composé des projets suivants :
OrderErrorLibrary
La bibliothèque OrderErrorLibrary définit les classes
OrderError
etOrderErrorCollection
. Une instanceOrderError
est créée lorsqu'une entrée non valide est indiquée. La bibliothèque fournit également une méthode d'extension pour la classeOrderErrorCollection
qui génère la propriétéErrorText
sur tous les objetsOrderError
deOrderErrorCollection
.OrderProcessingPolicy
Le projet OrderProcesssingPolicy est une application console WF qui définit une activité
PolicyFromFile
unique. L'activité contient les règles suivantes :invalidItemNum
Cette règle assure que le numéro d'élément est compris entre 1 et 6 (inclus). Si le numéro est compris dans cette fourchette, la règle ne fait rien (excepté des impressions dans la console). Dans le cas contraire, elle effectue les opérations suivantes :
Elle crée un objet
OrderError
en lui transmettant le numéro d'élément indiqué et définit les propriétésErrorText
etCustomerName
dans cet objet.Elle crée un objet
invalidItemNumErrorCollection
.Elle ajoute l'instance
OrderError
nouvellement créée à l'objetinvalidItemNumErrorCollection
.Cette opération prouve la prise en charge de l'opérateur new, qui permet d'instancier des objets à l'intérieur de règles.
invalidZip
Cette règle valide que le code postal comporte 5 chiffres, et qu'il est compris dans la plage 600 à 99998. Si le code postal est compris dans cette plage, la règle ne fait rien (excepté l'impression sur la console). S'il contient moins de 5 chiffres et n'est pas compris entre 00600 et 99998, la règle invalidZip effectue les opérations suivantes :
Elle crée un objet
OrderError
en lui transmettant le code postal indiqué et définit les propriétésErrorText
etCustomerName
dans cet objet.Elle crée un objet
invalidZipCodeErrorCollection
.Elle ajoute l'instance
OrderError
créée au nouvel objetinvalidZipCodeErrorCollection
.Cette règle prouve à nouveau la prise en charge de l'opérateur new, qui permet d'instancier des objets à l'intérieur de règles.
displayErrors
Cette règle vérifie si les deux règles précédentes ont ajouté des erreurs dans les deux objets de
OrderErrorCollection
,invalidItemNumErrorCollection
et deinvalidIZipCodeErrorCollection
. Si c'est le cas (invalidItemNumErrorCollection
ouinvalidZipCodeErrorCollection
n'a pas la valeur Null), la règle effectue les opérations suivantes :Elle appelle l'opérateur
+
surchargé pour copier le contenu des objetsinvalidItemNumErrorCollection
etinvalidZipCodeErrorCollection
dans une instanceinvalidOrdersCollection
OrderErrorCollection
.Elle appelle la méthode d'extension
PrintOrderErrors
dans l'instanceinvalidOrdersCollection
et génère la propriétéErrorText
dans tous les objetsorderError
de l'instanceinvalidOrdersCollection
.
L'opérateur +
surchargé de OrderErrorCollection
est défini dans la classe OrderErrorCollection
, au sein du projet OrderErrorLibrary
. Il utilise deux objets OrderErrorCollection
et les fusionne en un seul objet OrderErrorCollection
.
La méthode d'extension PrintOrderErrors
est également définie dans le projet OrderErrorLibrary
. Les méthodes d'extension constituent une nouvelle fonctionnalité C# qui permet aux développeurs d'ajouter de nouvelles méthodes au contrat public d'un type CLR existant, sans avoir à dériver une classe ou à recompiler le type d'origine.
Lorsque vous exécutez l'exemple vous êtes invité à entrer un nom, le numéro de l'élément à acheter, ainsi qu'un code postal. Ces informations sont ensuite vérifiées par les règles définies dans l'activité de stratégie. L'exemple suivant illustre une sortie du programme.
Please enter your name: John
What would you like to purchase?
(1) Vista Ultimate DVD
(2) Vista Ultimate Upgrade DVD
(3) Vista Home Premium DVD
(4) Vista Home Premium Upgrade DVD
(5) Vista Home Basic DVD
(6) Vista Home Basic Upgrade DVD
Please enter an item number: 1
Please enter your 5-Digit zip code: 98102
Executing Rule: invalidItemNum
Executing Rule: invalidZip
Executing Rule: displayErrors
Thank you for your order, it has been processed.
Workflow Completed
Another Order? (Y/N): y
Please enter your name: Joel
What would you like to purchase?
(1) Vista Ultimate DVD
(2) Vista Ultimate Upgrade DVD
(3) Vista Home Premium DVD
(4) Vista Home Premium Upgrade DVD
(5) Vista Home Basic DVD
(6) Vista Home Basic Upgrade DVD
Please enter an item number: 8
Please enter your 5-Digit zip code: 0000
Executing Rule: invalidItemNum
Executing Rule: invalidZip
Executing Rule: displayErrors
Your order contains the following error(s)
Error: No item number found. Please choose an available item.
Error: Invalid zip code. Please choose a zip code between 00600 and 99998.
Workflow Completed
Another Order? (Y/N): n
Pour configurer, générer et exécuter l'exemple
Ouvrez le fichier projet OrderProcessingPolicy.sln dans Visual Studio.
La solution contient deux projets différents : OrderErrorLibrary et OrderProcessingPolicy. Le projet OrderProcessingPolicy utilise les classes et les méthodes définies dans le projet OrderErrorLibrary.
Générez tous les projets.
Cliquez sur Exécuter.
Remarque : |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WF\Basic\Rules\Policy\OrderProcessingPolicy
|