Directiva de procesamiento de orden
El ejemplo de directiva de procesamiento de orden muestra algunas de las características clave introducidas en .NET Framework versión 3.5 de Windows Workflow Foundation (WF). La funcionalidad siguiente es nueva para el motor de reglas de WF:
Admisión de sobrecarga del operador.
Compatibilidad para el operador new, permitiendo a los usuarios crear nuevos objetos y matrices a partir de las reglas de WF.
Compatibilidad para los métodos de extensión para que el usuario experimente llamando a métodos de extensión desde las reglas de WF compatibles con los estilos de codificación C#.
Nota
Para generar y ejecutar este ejemplo, es necesario que esté instalado .NET Framework versión 3.5. Para abrir los archivos de solución y proyecto se necesita Visual Studio 2008.
El ejemplo muestra un proyecto OrderProcessingPolicy donde se introduce una orden de cliente, que está compuesta de una lista numerada de elementos disponibles, y un código postal. La orden se procesa correctamente si ambas entradas son correctas; de lo contrario, la directiva crea los objetos de error, utilizando un operador +
sobrecargado y un método de extensión predefinido para informar al usuario de los errores.
Nota
Para métodos de extensión Para obtener más información acerca de , vea C# Especificación de versión 3.0.
El ejemplo consta de los proyectos siguientes:
OrderErrorLibrary
OrderErrorLibrary es una biblioteca de clases que define las clases
OrderError
yOrderErrorCollection
. Se crea una instanciaOrderError
cuando se escribe una entrada no válida. La biblioteca también proporciona un método de extensión en la claseOrderErrorCollection
que genera la propiedadErrorText
en todos los objetosOrderError
enOrderErrorCollection
.OrderProcessingPolicy
El proyecto OrderProcesssingPolicy es una aplicación de consola de WF que define una actividad
PolicyFromFile
única. La actividad tiene tres reglas:invalidItemNum
Esta regla valida que el número del elemento esté entre 1 y 6, incluido. Si el número del elemento está dentro del intervalo válido, la regla no hace nada (excepto imprimir en la consola). Si el número del elemento no está entre 1 y 6, la regla invalidItemNum hace lo siguiente:
Crea un nuevo objeto
OrderError
, pasándole el número del elemento introducido y establece las propiedadesErrorText
yCustomerName
en el objeto.Crea un objeto
invalidItemNumErrorCollection
.Agrega la instancia creada recientemente
OrderError
ainvalidItemNumErrorCollection
.Esto muestra la compatibilidad para el operador new, con el que puede crear instancias de los objetos dentro de las reglas.
invalidZip
Esta regla valida que el código postal tenga 5 dígitos, y esté dentro del intervalo 600 a 99998. Si el código postal está dentro del intervalo válido, la regla no hace nada (excepto imprimir en la consola). Si la longitud del código postal es menor que 5 y no está entre 00600 y 99998, la regla invalidZip hace lo siguiente:
Crea un objeto
OrderError
, pasándole el código postal introducido y establece las propiedadesErrorText
y lCustomerName
en el objeto.Crea un objeto
invalidZipCodeErrorCollection
.Agrega la instancia creada recientemente
OrderError
a lainvalidZipCodeErrorCollection
creada recientemente.Esta regla muestra de nuevo la compatibilidad para el operador new, que le permite crear instancias de los objetos dentro de las reglas.
displayErrors
Esta regla comprueba si las dos reglas anteriores han agregado errores en los dos objetos
OrderErrorCollection``invalidItemNumErrorCollection
yinvalidIZipCodeErrorCollection
. Si hay errores (invalidItemNumErrorCollection
oinvalidZipCodeErrorCollection
no es null), la regla hace lo siguiente:
Llama al operador
+
sobrecargado para copiar el contenido deinvalidItemNumErrorCollection
yinvalidZipCodeErrorCollection
en una instanciainvalidOrdersCollection``OrderErrorCollection
.Llama al método de extensión
PrintOrderErrors
eninvalidOrdersCollection
y genera la propiedadErrorText
en todos los objetosorderError
eninvalidOrdersCollection
.
El operador +
sobrecargado en OrderErrorCollection
se define en la clase OrderErrorCollection
, en el proyecto OrderErrorLibrary
. Toma dos objetos OrderErrorCollection
y los combina en un objeto OrderErrorCollection
.
El método de extensión PrintOrderErrors
también se define en el proyecto OrderErrorLibrary
. Los métodos de extensión son una nueva característica de C# que permite a los programadores agregar nuevos métodos al contrato público de un tipo CLR existente, sin tener que crear subclases o volver a compilar el tipo original.
Al ejecutar el ejemplo se le pide que escriba un nombre, el número del elemento del elemento que se va a comprar y un código postal. Las reglas definidas en la actividad de directiva comprueban a continuación esta información. Lo siguiente es un resultado de ejemplo del programa:
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
Para configurar, generar y ejecutar el ejemplo
Abra el archivo de proyecto OrderProcessingPolicy.sln en Visual Studio.
Hay dos proyectos diferentes en la solución: OrderErrorLibrary y OrderProcessingPolicy. El proyecto OrderProcessingPolicy utiliza clases y métodos definidos en OrderErrorLibrary.
Genere todos los proyectos.
Haga clic en Ejecutar.
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.