Stratégie de traitement des commandes
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 de codage C#.
Remarque : |
---|
Pour pouvoir générer et exécuter cet exemple, le .NET Framework version 3.5 doit avoir été préalablement installé. Visual Studio 2008 est nécessaire pour ouvrir les 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 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 trois règles :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 assure que le code postal contient 5 chiffres et qu'il est compris entre 00600 et 99998. S'il est compris dans cette fourchette, la règle ne fait rien (excepté des impressions dans la console). S'il contient moins de 5 chiffres et n'est pas compris entre 00600 et 99998, la règle 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 à le sous-classer 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
Configuration, génération et exécution de 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.
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.