Directiva de procesamiento de orden

Download sample

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 y OrderErrorCollection. Se crea una instancia OrderError cuando se escribe una entrada no válida. La biblioteca también proporciona un método de extensión en la clase OrderErrorCollection que genera la propiedad ErrorText en todos los objetos OrderError en OrderErrorCollection.

  • 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 propiedades ErrorText y CustomerName en el objeto.

  • Crea un objeto invalidItemNumErrorCollection.

  • Agrega la instancia creada recientemente OrderError a invalidItemNumErrorCollection.

  • 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 propiedades ErrorText y lCustomerName en el objeto.

  • Crea un objeto invalidZipCodeErrorCollection.

  • Agrega la instancia creada recientemente OrderError a la invalidZipCodeErrorCollection 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 y invalidIZipCodeErrorCollection. Si hay errores ( invalidItemNumErrorCollection o invalidZipCodeErrorCollection no es null), la regla hace lo siguiente:

  • Llama al operador + sobrecargado para copiar el contenido de invalidItemNumErrorCollection y invalidZipCodeErrorCollection en una instancia invalidOrdersCollection``OrderErrorCollection.

  • Llama al método de extensión PrintOrderErrors en invalidOrdersCollection y genera la propiedad ErrorText en todos los objetos orderError en invalidOrdersCollection.

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

  1. Abra el archivo de proyecto OrderProcessingPolicy.sln en Visual Studio.

  2. Hay dos proyectos diferentes en la solución: OrderErrorLibrary y OrderProcessingPolicy. El proyecto OrderProcessingPolicy utiliza clases y métodos definidos en OrderErrorLibrary.

  3. Genere todos los proyectos.

  4. Haga clic en Ejecutar.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.