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#.
![]() |
---|
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.
![]() |
---|
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
eOrderErrorCollection
. Un'istanzaOrderError
viene creata quando viene immesso un input non valido. La libreria fornisce anche un metodo di estensione sulla classeOrderErrorCollection
che restituisce la proprietàErrorText
su tutti gli oggettiOrderError
inOrderErrorCollection
.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
eCustomerName
sull'oggetto.Crea un oggetto
invalidItemNumErrorCollection
.Aggiunge l’istanza
OrderError
di recente creazione ainvalidItemNumErrorCollection
.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
eCustomerName
sull'oggetto.Crea un oggetto
invalidZipCodeErrorCollection
.Aggiunge l’istanza
OrderError
di recente creazione ainvalidZipCodeErrorCollection
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
einvalidIZipCodeErrorCollection
. Se sono stati rilevati errori (invalidItemNumErrorCollection
oinvalidZipCodeErrorCollection
non è null), la regola esegue le operazioni seguenti:chiama l'operatore
+
di overload per copiare il contenuto diinvalidItemNumErrorCollection
einvalidZipCodeErrorCollection
in un'istanzainvalidOrdersCollection``OrderErrorCollection
.Chiama il metodo di estensione
PrintOrderErrors
suinvalidOrdersCollection
e restituisce la proprietàErrorText
su ogniorderError
oggetto ininvalidOrdersCollection
.
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
Aprire il file di progetto OrderProcessingPolicy.sln in Visual Studio.
Esistono due progetti diversi nella soluzione: OrderErrorLibrary e OrderProcessingPolicy. Il progetto OrderProcessingPolicy utilizza classi e metodi definiti in OrderErrorLibrary.
Compilare tutti i progetti.
Scegliere Esegui.
![]() |
---|
È 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
|