Elaborazione di ordini con criteriOrder Processing with Policy

Nell’esempio dei Criteri di elaborazione degli ordini vengono illustrate alcune delle funzionalità principali introdotte nel .NET Framework versione 3.5.NET Framework version 3.5 di Windows Workflow Foundation (WF).The Order Processing Policy sample demonstrates some of the key features introduced in the .NET Framework versione 3.5.NET Framework version 3.5 of the Windows Workflow Foundation (WF). Di seguito viene esposta una nuova funzionalità per il motore di regole WF:The following functionality is new for the WF rules engine:

  • supporto per l’overload degli operatori.Support for operator overloading.

  • Il supporto per l'operatore new consente agli utenti di creare nuovi oggetti e matrici dalle regole WF.Support for the new operator, allowing users to create new objects and arrays from WF rules.

  • Supporto per i metodi di estensione per migliorare l’esperienza utente nel chiamare metodi di estensione dalle regole WF compatibili con gli stili di codifica C#.Support for extension methods to make the user experience in calling extension methods from WF rules compatible with C# coding styles.

Nota

Questo esempio richiede che .NET Framework versione 3.5.NET Framework version 3.5 sia installato e pronto per la compilazione e l'esecuzione.This sample requires that .NET Framework versione 3.5.NET Framework version 3.5 is installed to build and run. Per aprire i file del progetto e della soluzione è richiesto Visual Studio 2012Visual Studio 2012.Visual Studio 2012Visual Studio 2012 is required to open the project and solution files.

Nell’esempio viene illustrato un progetto OrderProcessingPolicy nel quale viene immesso un ordine del cliente, costituito da un elenco numerato di elementi disponibili e un codice postale.The sample demonstrates an OrderProcessingPolicy project in which a customer order, which consists of a numbered list of available items and a zip code, is entered. L'ordine viene elaborato correttamente se entrambi le voci sono corrette; in caso contrario, i criteri creano oggetti di errore, usando un operatore + di overload e un metodo di estensione predefinito per informare l'utente degli errori.The order is processed successfully if both entries are correct; otherwise, the policy creates error objects, utilizing an overloaded + operator and a predefined extension method to inform the user of the errors.

Nota

Per ulteriori informazioni sui metodi di estensione, vedere c# versione 3.0 Specification.For more information about extension methods, see C# Version 3.0 Specification.

L’esempio comprende i progetti seguenti:The sample is comprised of the following projects:

  • OrderErrorLibrary

    OrderErrorLibrary è una libreria di classi che definisce le classi OrderError e OrderErrorCollection.The OrderErrorLibrary is a class library that defines OrderError and OrderErrorCollection classes. Un'istanza OrderError viene creata quando viene immesso un input non valido.An OrderError instance is created when an invalid input is entered. La libreria fornisce anche un metodo di estensione sulla classe OrderErrorCollection che restituisce la proprietà ErrorText su tutti gli oggetti OrderError in OrderErrorCollection.The library also provides an extension method on the OrderErrorCollection class that outputs the ErrorText property on all OrderError objects in the OrderErrorCollection.

  • OrderProcessingPolicy

    Il progetto OrderProcessingPolicy è un'applicazione console di WF che definisce una sola attività PolicyFromFile.The OrderProcessingPolicy project is a WF console application that defines a single PolicyFromFile activity. L'attività dispone delle regole seguenti:The activity has the following rules:

    • invalidItemNum

      Questa regola convalida che il numero dell'elemento è compreso tra 1 e 6, incluso.This rule validates that the item number is between 1 and 6, inclusive. Se il numero dell'elemento rientra nell'intervallo valido, la regola non esegue alcuna operazione (ad eccezione della stampa alla console).If the item number is within the valid range, the rule does nothing (other than printing to the console). Se il numero dell'elemento non rientra tra 1 e 6, la regola invalidItemNum esegue le operazioni seguenti:If the item number is not between 1 and 6, the invalidItemNum rule does the following:

      1. Crea un oggetto OrderError nuovo, passando a quest’ultimo il numero dell'elemento immesso, e imposta le proprietà ErrorText e CustomerName sull'oggetto.Creates a new OrderError object, passing it the item number entered, and sets the ErrorText and CustomerName properties on the object.

      2. Crea un oggetto invalidItemNumErrorCollection.Creates an invalidItemNumErrorCollection object.

      3. Aggiunge l’istanza OrderError di recente creazione a invalidItemNumErrorCollection.Adds the newly-created OrderError instance to the invalidItemNumErrorCollection.

      In questo modo viene illustrato il supporto per l'operatore new con il quale è possibile creare un'istanza di oggetti nelle regole.This demonstrates support for the new operator, with which you can instantiate objects inside rules.

    • invalidZip

      Questa regola convalida che il CAP dispone di 5 cifre ed è compreso nell'intervallo da 600 a 99998.This rule validates that the zip code has 5 digits, and is within the range 600 to 99998. Se il numero del CAP rientra nell'intervallo valido, la regola non esegue alcuna operazione (ad eccezione della stampa nella console).If the zip code is within the valid range, the rule does nothing (other than printing to the console). Se il codice postale è costituito da meno di 5 cifre o non rientra nell'intervallo compreso tra 00600 and 99998, la regola invalidZip esegue le operazioni seguenti:If the length of the zip code is less than 5, or the zip code is not between 00600 and 99998, the invalidZip rule does the following:

      1. Crea un oggetto OrderError, passando a quest’ultimo il codice postale immesso, e imposta le proprietà ErrorText e CustomerName sull'oggetto.Creates an OrderError object, passing it the zip code entered, and sets the ErrorText and CustomerName properties on the object.

      2. Crea un oggetto invalidZipCodeErrorCollection.Creates an invalidZipCodeErrorCollection object.

      3. Aggiunge l’istanza OrderError di recente creazione a invalidZipCodeErrorCollection di recente creazione.Adds the newly-created OrderError instance to the newly-created invalidZipCodeErrorCollection.

      In questa regola viene nuovamente illustrato il supporto per l'operatore new che consente di creare un'istanza di oggetti nelle regole.This rule again demonstrates support for the new operator, which allows you to instantiate objects inside rules.

    • displayErrors

      Questa regola consente di controllare la presenza di eventuali errori aggiunti dalle due regole precedenti nei due oggetti OrderErrorCollection``invalidItemNumErrorCollection e invalidIZipCodeErrorCollection.This rule checks to see if there were any errors added by the previous two rules in the two OrderErrorCollection objects invalidItemNumErrorCollection and invalidIZipCodeErrorCollection. Se sono stati rilevati errori ( invalidItemNumErrorCollection o invalidZipCodeErrorCollection non è null), la regola esegue le operazioni seguenti:If there were errors (either invalidItemNumErrorCollection or invalidZipCodeErrorCollection is not null), the rule does the following:

      1. Chiama il metodo di overload + operatore per copiare il contenuto di invalidItemNumErrorCollection e invalidZipCodeErrorCollection per un invalidOrdersCollection``OrderErrorCollection istanza.Calls the overloaded + operator to copy the contents of invalidItemNumErrorCollection and invalidZipCodeErrorCollection to an invalidOrdersCollection``OrderErrorCollection instance.

      2. Chiama il metodo di estensione PrintOrderErrors su invalidOrdersCollection e restituisce la proprietà ErrorText su ogni orderError oggetto in invalidOrdersCollection.Calls the PrintOrderErrors extension method on invalidOrdersCollection and outputs the ErrorText property on all orderError objects in invalidOrdersCollection.

L'operatore + di overload su OrderErrorCollection è definito nella classe OrderErrorCollection, nel progetto OrderErrorLibrary.The overloaded operator + on the OrderErrorCollection is defined in the OrderErrorCollection class, in the OrderErrorLibrary project. Prende due oggetti OrderErrorCollection e li combina in un oggetto OrderErrorCollection.It takes two OrderErrorCollection objects and combines them into one OrderErrorCollection object.

Il metodo di estensione PrintOrderErrors è definito anche nel progetto OrderErrorLibrary.The PrintOrderErrors extension method is also defined in the OrderErrorLibrary project. I metodi di estensione rappresentano una nuova funzionalità C# che consente agli sviluppatori di aggiungere nuovi metodi al contratto pubblico di un tipo CLR esistente, senza che sia necessario derivarne una classe o ricompilare il tipo originale.Extension methods are a new C# feature that enables developers to add new methods to the public contract of an existing CLR type, without having to derive a class from it or recompile the original type.

Quando si esegue l'esempio viene richiesto di immettere un nome, il numero dell'elemento da acquistare e un codice postale.When you run the sample you are prompted to enter a name, the item number of the item to be purchased, and a zip code. Queste informazioni vengono quindi verificate dalle regole definite nell'attività dei criteri.This information is then verified by the rules defined in the policy activity. Di seguito è riportato un esempio di output generato dal programma.The following is sample output from the program.

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  

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Aprire il file di progetto OrderProcessingPolicy.sln in Visual Studio 2010Visual Studio 2010.Open the OrderProcessingPolicy.sln project file in Visual Studio 2010Visual Studio 2010.

  2. Esistono due progetti diversi nella soluzione: OrderErrorLibrary e OrderProcessingPolicy.There are two different projects in the solution: OrderErrorLibrary and OrderProcessingPolicy. Il progetto OrderProcessingPolicy usa classi e metodi definiti in OrderErrorLibrary.The OrderProcessingPolicy project uses classes and methods defined in the OrderErrorLibrary.

  3. Compilare tutti i progetti.Build all projects.

  4. Fai clic su Esegui.Click Run.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing:

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory:

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Rules\Policy\OrderProcessingPolicy