Compartir a través de


Kit de herramientas de RuleSet externo

Normalmente, cuando se usan reglas dentro de una aplicación de flujo de trabajo, las reglas forman parte del ensamblado. En algunos escenarios, es posible que desee mantener ruleSets por separado del ensamblado para que se puedan actualizar sin volver a generar e implementar el ensamblado de flujo de trabajo. Este ejemplo le permite administrar y editar RuleSets en una base de datos y acceder a esos Conjuntos de reglas desde un flujo de trabajo en tiempo de ejecución. Esto permite que las instancias de flujo de trabajo en ejecución incorporen automáticamente los cambios de RuleSet.

El Ejemplo de External RuleSet Toolkit contiene una herramienta basada en Windows Forms que se puede usar para administrar y editar versiones del RuleSet en una base de datos. También incluye una actividad y un servicio host para ejecutar esas reglas.

Nota:

Este ejemplo requiere Microsoft SQL Server.

Visual Studio proporciona un editor RuleSet como parte de Windows Workflow Foundation (WF). Para iniciar este editor, haga doble clic en la Policy actividad de un flujo de trabajo; serializa el objeto RuleSet definido en el archivo .rules asociado al flujo de trabajo (una Policy actividad ejecuta una instancia de RuleSet en el flujo de trabajo). El archivo .rules se compila en el ensamblado como un recurso al compilar el proyecto de flujo de trabajo.

Los componentes de este ejemplo incluyen:

  • Una herramienta de interfaz gráfica de usuario RuleSet que puede usar para editar y administrar versiones de RuleSet en la base de datos.

  • Un servicio RuleSet configurado en la aplicación host y accede a RuleSets desde la base de datos.

  • Actividad ExternalPolicy que solicita un RuleSet desde el servicio RuleSet y ejecuta el RuleSet contra el flujo de trabajo.

La interacción de los componentes se muestra en la imagen siguiente. Las secciones siguientes describen cada componente.

Diagrama que muestra una vista general del ejemplo del conjunto de reglas externas del Toolkit.

Herramienta RuleSet

La imagen siguiente es una captura de pantalla de la herramienta RuleSet. En el menú Almacén de reglas , puede cargar los Conjuntos de reglas disponibles desde la base de datos y guardar conjuntos de reglas modificados de nuevo en el almacén. Un archivo de configuración de aplicación proporciona una cadena de conexión de base de datos para la base de datos RuleSet. Al iniciar la herramienta, carga automáticamente RuleSets desde la base de datos configurada.

Captura de pantalla que muestra el explorador RuleSet.

La herramienta RuleSet aplica números de versión principales y secundarias a ruleSets, lo que le permite mantener y almacenar simultáneamente varias versiones (la herramienta no proporciona bloqueos ni otras características de administración de configuración además de la funcionalidad de control de versiones). Con la herramienta, puede crear nuevas versiones de RuleSet o eliminar versiones existentes. Al hacer clic en Nuevo, la herramienta crea un nuevo nombre RuleSet y aplica la versión 1.0. Al copiar una versión, la herramienta crea una copia de la versión de RuleSet seleccionada, incluidas las reglas contenidas, y asigna números de versión nuevos y únicos. Estos números de versión se basan en los números de versión de conjuntos de reglas existentes. Puede cambiar el nombre de RuleSet y los números de versión mediante los campos asociados en el formulario.

Al hacer clic en Editar reglas, se inicia el editor RuleSet, como se muestra en la siguiente imagen:

Captura de pantalla que muestra el Editor de conjuntos de reglas.

Se trata de un nuevo hospedaje del cuadro de diálogo del editor que forma parte del complemento de Visual Studio de Windows Workflow Foundation. Proporciona la misma funcionalidad, incluida la compatibilidad con IntelliSense. Las reglas se crean en un tipo de destino (por ejemplo, un flujo de trabajo) que está asociado a RuleSet en la herramienta; al hacer clic en Examinar en el cuadro de diálogo de la herramienta principal, aparece el cuadro de diálogo Selector de flujo de trabajo/tipo , como se muestra en la figura 4.

Workflow /Type Selection

Figura 4: Selector de flujo de trabajo/tipo

Puede usar el cuadro de diálogo Workflow/Type Selector para especificar un ensamblado y un tipo específico dentro de ese ensamblado. Este tipo es el tipo de destino con el que se crean las reglas (y se ejecutan). En muchos casos, el tipo de destino es un flujo de trabajo o algún otro tipo de actividad. Sin embargo, puede ejecutar un RuleSet contra cualquier tipo de .NET.

La ruta de acceso al archivo de ensamblado y el tipo name are stored with the se almacenan junto con el RuleSet en la base de datos, para que cuando este se recupere de la base de datos, la herramienta intente cargar automáticamente el tipo de destino.

Al hacer clic en Aceptar en el cuadro de diálogo Selector de flujo de trabajo/tipo, valida el tipo seleccionado contra el RuleSet para asegurarse de que el tipo de destino tiene todos los miembros a los que hacen referencia las reglas. Los errores se muestran en un cuadro de diálogo Errores de validación . Puede optar por continuar con el cambio a pesar de los errores o hacer clic en Cancelar. En el menú Herramientas del cuadro de diálogo principal de la herramienta, puede hacer clic en Validar para volver a validar la versión de RuleSet en la actividad de destino.

Captura de pantalla que muestra el cuadro de diálogo Errores de validación.

En el menú Datos de la herramienta, puede importar y exportar RuleSets. Al hacer clic en Importar, aparece un cuadro de diálogo del selector de archivos, desde el que puede seleccionar un archivo .rules. Esto puede o no ser un archivo creado inicialmente en Visual Studio. El archivo .rules debe contener una instancia serializada RuleDefinitions que contenga una colección de condiciones y una colección de RuleSets. La herramienta no usa la colección de condiciones, pero usa el RuleDefinitions formato .rules para permitir la interacción con el entorno de Visual Studio.

Después de seleccionar un archivo .rules, aparece un cuadro de diálogo Selector de conjunto de reglas. Puede usar el cuadro de diálogo para seleccionar ruleSets en el archivo que desea importar (el valor predeterminado especifica todos los conjuntos de reglas). Los conjuntos de reglas del archivo .rules no tienen números de versión, ya que su control de versiones dentro de un proyecto WF es el mismo que la versión del ensamblado. Durante el proceso de importación, la herramienta asigna automáticamente el siguiente número de versión principal disponible (que puede cambiar después de importar); Puede ver los números de versión asignados en la lista Selector de Conjunto de reglas .

Para cada RuleSet que importa, la herramienta intenta localizar el tipo asociado en la carpeta bin\Debug bajo la ubicación del archivo .rules (si existe), basándose en los miembros utilizados en el RuleSet. Si la herramienta encuentra varios tipos coincidentes, intenta elegir un tipo basado en una coincidencia entre el nombre de archivo .rules y el nombre de tipo (por ejemplo, el Workflow1 tipo corresponde a Workflow1.rules). Si existen varias coincidencias, se le pedirá que seleccione el tipo. Si este mecanismo de identificación automática no encuentra un ensamblado o tipo coincidente, después de importar puede hacer clic en Examinar en el cuadro de diálogo de la herramienta principal para ir al tipo asociado. En la imagen siguiente se muestra el selector RuleSet.

Captura de pantalla que muestra el cuadro de diálogo Selector RuleSet.

Al hacer clic en Data-Export en el menú de herramientas principal, el cuadro de diálogo Selector de conjunto de reglas aparece de nuevo, desde el que puede determinar los Conjuntos de reglas de la base de datos que se deben exportar. Al hacer clic en Aceptar, aparece un cuadro de diálogo Guardar archivo , en el que puede especificar el nombre y la ubicación del archivo .rules resultante. Dado que el archivo .rules no contiene información de versión, solo puede seleccionar una versión ruleSet con un nombre ruleSet determinado.

Actividad PolicyFromService

El código de la PolicyFromService actividad es sencillo. Funciona de forma muy similar a la Policy actividad proporcionada con WF, pero en lugar de recuperar el RuleSet de destino desde el archivo .rules, llama a un servicio host para obtener la instancia de RuleSet. A continuación, ejecuta ruleSet en la instancia de actividad de flujo de trabajo raíz.

Para usar la actividad en un flujo de trabajo, agregue una referencia a los ensamblados PolicyActivities y RuleSetService de su proyecto de flujo de trabajo. Consulte el procedimiento al final de este tema para obtener una explicación sobre cómo agregar la actividad al cuadro de herramientas.

Después de colocar la actividad en su flujo de trabajo, debe proporcionar el nombre del RuleSet que se va a ejecutar. Puede escribir el nombre como un valor literal o enlazar a una variable de flujo de trabajo o a una propiedad de otra actividad. Opcionalmente, puede escribir números de versión para el conjunto de reglas específico que se debe ejecutar. Si deja el valor predeterminado de 0 para los números de versión principal y secundaria, el número de versión más reciente de la base de datos se proporciona automáticamente para la actividad.

Servicio RuleSet

El servicio es responsable de recuperar la versión de RuleSet especificada de la base de datos y devolverla a la actividad de llamada. Como se explicó anteriormente, si los valores de versión principal y secundaria pasados en la GetRuleSet llamada son 0, el servicio recupera la versión más reciente. En este momento, no hay almacenamiento en caché de las definiciones o instancias de RuleSet; de forma similar, no hay ninguna característica para marcar las versiones de RuleSet como "implementadas" para diferenciarlas de RuleSets en curso.

La base de datos a la que accede el servicio debe ser configurada en el host mediante un archivo de configuración de aplicación.

Para ejecutar la herramienta

  1. La carpeta que configura la tabla RuleSet utilizada por la herramienta y el servicio contiene un archivo Setup.sql. Puede ejecutar el archivo por lotes Setup.cmd para crear la base de datos Rules en SQL Express y configurar la tabla RuleSet.

  2. Si edita el archivo por lotes o Setup.sql y especifica no usar SQL Express o colocar la tabla en una base de datos denominada de otra forma a Rules, los archivos de configuración de la aplicación en la herramienta RuleSet y los proyectos UsageSample deben editarse con la misma información.

  3. Después de ejecutar el script de Setup.sql, puede compilar la ExternalRuleSetToolkit solución e iniciar la herramienta RuleSet desde el proyecto ExternalRuleSetTool.

  4. La solución de aplicación de la consola de flujo de trabajo secuencial RuleSetToolkitUsageSample incluye un flujo de trabajo de ejemplo. El flujo de trabajo consta de una PolicyFromService actividad y dos variables, orderValue y discount, contra las cuales se ejecuta el conjunto de reglas de destino.

  5. Para usar el ejemplo, compile la RuleSetToolkitUsageSample solución. A continuación, en el menú principal de la herramienta RuleSet, haga clic en Importar datos y seleccione el archivo DiscountRuleSet.rules en la carpeta RuleSetToolkitUsageSample. Haga clic en la opción de menú Almacén de reglas Guardar para guardar el conjunto de reglas importado en la base de datos.

  6. Dado que se hace referencia al ensamblado PolicyActivities desde el proyecto de flujo de trabajo de ejemplo, la actividad PolicyFromService aparece en el flujo de trabajo. Sin embargo, no aparece en el cuadro de herramientas de forma predeterminada. Para agregarlo al cuadro de herramientas, haga lo siguiente:

    • Haga clic con el botón derecho en el cuadro de herramientas y seleccione Elegir elementos (esto puede tardar un tiempo).

    • Cuando aparezca el cuadro de diálogo Elegir elementos del cuadro de herramientas , haga clic en la pestaña Actividades .

    • Vaya al ensamblado PolicyActivities en la solución ExternalRuleSetToolkit y haga clic en Abrir.

    • Asegúrese de que la PolicyFromService actividad está seleccionada en el cuadro de diálogo Elegir elementos del cuadro de herramientas y, a continuación, haga clic en Aceptar.

    • La actividad debería aparecer ahora en el cuadro de herramientas en la categoría RuleSetToolkitUsageSample Components ( Componentes de RuleSetToolkitUsageSample).

  7. El servicio RuleSet ya está configurado en el host de la aplicación de consola mediante la siguiente instrucción en Program.cs.

    workflowRuntime.AddService(new RuleSetService());
    
  8. También puede configurar el servicio en el host mediante un archivo de configuración; Consulte la documentación del SDK para obtener más información.

  9. Se agrega un archivo de configuración de aplicación al proyecto de flujo de trabajo para especificar la cadena de conexión para que el servicio use la base de datos. Debe ser la misma cadena de conexión que usa la herramienta RuleSet, que apunta a la base de datos que contiene la tabla RuleSet.

  10. Ahora puede ejecutar el RuleSetToolkitUsageSample proyecto como lo haría con cualquier otra aplicación de consola de flujo de trabajo. Presione F5 o Ctrl+F5 en Visual Studio o ejecute el archivo RuleSetToolkitUsageSample.exe directamente.

    Nota:

    Debe cerrar la herramienta RuleSet para volver a compilar el ejemplo de uso, ya que la herramienta carga el ensamblado de ejemplo de uso.