Elaborazione di ordini con criteri

Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.

Nell’esempio dei Criteri di elaborazione degli ordini vengono illustrate alcune delle funzionalità principali introdotte nel .NET Framework versione 3.5 di Windows Workflow Foundation (WF). Di seguito viene esposta una nuova funzionalità per il motore di regole WF:

  • supporto per l’overload degli operatori.

  • Il supporto per l'operatore new consente agli utenti di creare nuovi oggetti e matrici dalle regole WF.

  • 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#.

Ee960217.note(it-it,VS.100).gifNota:
Per poter essere compilato ed eseguito, l'esempio richiede che sia installato .NET Framework versione 3.5. Per aprire il progetto e i file della soluzione è necessario Visual Studio 2010.

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. L'ordine viene elaborato correttamente se entrambi le voci sono corrette; in caso contrario, i criteri creano oggetti di errore, utilizzando un operatore + di overload e un metodo di estensione predefinito per informare l'utente degli errori.

Ee960217.note(it-it,VS.100).gifNota:
Per ulteriori informazioni su metodi di estensione, vedere C# Version 3.0 Specification.

L’esempio comprende i progetti seguenti:

  • OrderErrorLibrary

    OrderErrorLibrary è una libreria di classi che definisce le classi OrderError e OrderErrorCollection. Un'istanza OrderError viene creata quando viene immesso un input non valido. La libreria fornisce anche un metodo di estensione sulla classe OrderErrorCollection che restituisce la proprietà ErrorText su tutti gli oggetti OrderError in OrderErrorCollection.

  • OrderProcessingPolicy

    Il progetto OrderProcesssingPolicy è un'applicazione console di WF che definisce una sola attività PolicyFromFile. L'attività dispone delle regole seguenti:

    invalidItemNum

    Questa regola convalida che il numero dell'elemento è compreso tra 1 e 6, incluso. Se il numero dell'elemento rientra nell'intervallo valido, la regola non esegue alcuna operazione (ad eccezione della stampa alla console). Se il numero dell'elemento non rientra tra 1 e 6, la regola invalidItemNum esegue le operazioni seguenti:

  • Crea un oggetto OrderError nuovo, passando a quest’ultimo il numero dell'elemento immesso, e imposta le proprietà ErrorText e CustomerName sull'oggetto.

  • Crea un oggetto invalidItemNumErrorCollection.

  • Aggiunge l’istanza OrderError di recente creazione a invalidItemNumErrorCollection.

  • In questo modo viene illustrato il supporto per l'operatore new con il quale è possibile creare un'istanza di oggetti nelle regole.

  • invalidZip

    Questa regola convalida che il CAP dispone di 5 cifre ed è compreso nell'intervallo da 600 a 99998. Se il numero del CAP rientra nell'intervallo valido, la regola non esegue alcuna operazione (ad eccezione della stampa nella console). Se il codice postale è costituito da meno di 5 cifre e non rientra nell'intervallo compreso tra 00600 and 99998, la regola invalidZip eseguirà le operazioni seguenti:

  • Crea un oggetto OrderError, passando a quest’ultimo il codice postale immesso, e imposta le proprietà ErrorText e CustomerName sull'oggetto.

  • Crea un oggetto invalidZipCodeErrorCollection.

  • Aggiunge l’istanza OrderError di recente creazione a invalidZipCodeErrorCollection di recente creazione.

  • In questa regola viene nuovamente illustrato il supporto per l'operatore new che consente di creare un'istanza di oggetti nelle regole.

  • displayErrors

    Questa regola consente di controllare la presenza di eventuali errori aggiunti dalle due regole precedenti nei due oggetti OrderErrorCollection invalidItemNumErrorCollection e invalidIZipCodeErrorCollection. Se sono stati rilevati errori ( invalidItemNumErrorCollection o invalidZipCodeErrorCollection non è null), la regola esegue le operazioni seguenti:

  • chiama l'operatore + di overload per copiare il contenuto di invalidItemNumErrorCollection e invalidZipCodeErrorCollection in un'istanza invalidOrdersCollection``OrderErrorCollection.

  • Chiama il metodo di estensione PrintOrderErrors su invalidOrdersCollection e restituisce la proprietà ErrorText su ogni orderError oggetto in invalidOrdersCollection.

L'operatore + di overload su OrderErrorCollection è definito nella classe OrderErrorCollection, nel progetto OrderErrorLibrary. Prende due oggetti OrderErrorCollection e li combina in un oggetto OrderErrorCollection.

Il metodo di estensione PrintOrderErrors è definito anche nel progetto OrderErrorLibrary. 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.

Quando si esegue l'esempio viene richiesto di immettere un nome, il numero dell'elemento da acquistare e un codice postale. Queste informazioni vengono quindi verificate dalle regole definite nell'attività dei criteri. Di seguito è riportato un esempio di output generato dal programma.

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'esempio

  1. Aprire il file di progetto OrderProcessingPolicy.sln in Visual Studio.

  2. Esistono due progetti diversi nella soluzione: OrderErrorLibrary e OrderProcessingPolicy. Il progetto OrderProcessingPolicy utilizza classi e metodi definiti in OrderErrorLibrary.

  3. Compilare tutti i progetti.

  4. Scegliere Esegui.

Ee960217.Important(it-it,VS.100).gif Nota:
È possibile che gli esempi siano già installati nel computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.

<UnitàInstallazione>:\WF_WCF_Samples

Se questa directory non esiste, visitare la pagina relativa agli esempi di Windows Communication Foundation (WCF) e Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti gli esempi di Windows Communication Foundation (WCF) e WF. Questo esempio si trova nella directory seguente.

<UnitàInstallazione>:\WF_WCF_Samples\WF\Basic\Rules\OrderProcessingPolicy