Actualmente en todo desarrollo se encuentran involucrados componentes de Acceso a Datos, Presentación y Reglas de negocio, en este post abordaremos el tema de Reglas de negocio con el motor que nos provee el servidor BizTalk.
Conceptos Clave:
· Regla de Negocio: Son aquellas condiciones, validaciones y normas que deben cumplirse y controlarse dentro de una organización. Son el componente fundamental de la operación de la organización y el pilar fundamental del éxito de nuestra aplicación.
· Política de Negocio: Conjunto de reglas de negocio.
BizTalk Rule Engine
El motor de reglas de negocio de BizTalk es una herramienta que nos ayuda a centralizar las reglas de negocio de nuestra aplicación y modificarlas sin necesidad de realizar un deploy nuevamente de la aplicación.
El motor de reglas de negocio de BizTalk se basa en el uso de Vocabulario (Vocabulary), Políticas (Bussines Rule Policy), Reglas de Negocio (Bussines Rule), Predicados (Predicates), Condiciones (Conditions) y Acciones (Actions).
Hecho: Es un dato especificado por el usuario, este será el insumo de la regla de negocio, estos pueden ser:
· Campo en base de datos
· Campo en documento XML
· Valor Constante
· Valor de un assembly NET
Vocabulario: Se le conoce así dentro de BizTalk Rule Engine a una colección de Hechos.
Predicado: Dentro del motor de reglas de negocio de BizTalk se definen como un conjunto de operadores y funciones que evalúan los hechos, estos son utilizados para manejar condiciones con los hechos.
Por mencionar algunos:
· Equals
· Exists
· GreaterThan
· GreaterThanEqual
Política: Es una colección lógica de reglas de negocio.
Regla de Negocio: Es la definición de una evaluación sobre los hechos, dado un valor True como resultado de alguna evaluación se ejecutarán las acciones definidas.
Con el propósito de dejar más claros los anteriores puntos realicemos un ejemplo que consuma una regla de negocio de BizTalk.
El ejemplo consiste en manejar un descuento en el precio de una compra en una tienda, que tiene como política de descuentos:
“Si la compra es mayor a 2000 se efectuará un descuento de 10%”
Comenzaremos por crear un assembly en .Net que maneje una clase llamada compra que contenga como datos miembro: Monto, Descuento (%) y Pago Final
Creamos una biblioteca de clases

Agregamos una clase llamada Compras con el siguiente código.

En la sección de propiedades del proyecto generaremos un strong name para nuestro assembly con el nombre CompraAssembly


Ahora Instalaremos en el Global Assembly Cache nuestro Assembly con el propósito de que el BizTalk Rule Engine pueda consumirlo, ya que no podemos agregar como tal una referencia desde BizTalk a una dll.

Para más información sobre la instalación:
http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx
El siguiente paso es generar nuestra política dentro del BizTalk Rule Engine, para lo cual haremos uso del Biztalk Rule Composer

Lo primero que debemos definir son los Hechos que serán usados por nuestras reglas de negocio, esto lo realizaremos creando un nuevo Vocabulario al cual llamaremos Compra.


Dentro de este definiremos nuestros hechos, los cuales serán los campos de nuestra clase Compra (Monto y Descuento), así como una constante que es nuestro límite restrictivo para ejecutar el descuento (2000)
Generamos el Hecho para leer la cantidad del monto de nuestra clase CompraAssembly

Seleccionamos la opción de crear un hecho de tipo .NET Class or Class Member
En la siguiente pantalla definimos el nombre y la descripción de nuestro hecho y damos clic en el botón Browse para agregar nuestra clase

Cabe destacar que si no se ha instalado el Assembly en el GAC no podrá verse en este punto.

Posteriormente tenemos que seleccionar que campo es el que necesitamos, en este caso es la lectura del valor del campo Monto

El último paso es finalizar esta definición

Para el campo Descuento se siguen los mismos pasos con la excepción de que en este caso necesitamos escribir un valor dentro de este campo, para lo cual tenemos la siguiente configuración

Agregamos la descripción y el nombre a nuestro hecho, posteriormente damos clic en el botón Next para revisar la inicialización de nuestro hecho y su formateo como string

Para este caso, nuestro valor inicial no será modificado, pues nos funciona bien la inicialización que trae por default (Color verde)

Ahora vamos a definir nuestro valor constante

Asignamos una descripción y nombre a nuestro Hecho

Para finalizar esta definición de Hecho, asignamos el tipo de dato y valor

Ahora tenemos que definir nuestra política y nuestras reglas de negocio, pero antes necesitamos guardar y publicar nuestro vocabulario para poder hacer uso de el en nuestra política.


Damos click derecho sobre el elemento raíz del explorador de políticas y agregamos una nueva con el nombre de CompraPolitica

Política a la cual agregaremos nuestra Regla de negocio a la que llamaremos ReglaDescuento


Para definir la regla es necesario seleccionarla en el explorador de Políticas y en el panel derecho definiremos las condiciones de la siguiente manera:
Vamos a seleccionar el predicado Mayor o igual para comparar nuestro monto con la cantidad mínima para acreditar el descuento.


Agregaremos como primer argumento el Hecho Monto arrastrándolo desde el panel de nuestro vocabulario hasta las letras Argument1, como Argument2 asignaremos el MontoMinimo quedando de la siguiente manera.

Enseguida vamos a finalizar definiendo la acción a ejecutar, asignando el valor de 10 al hecho Descuento definido en nuestro vocabulario, esto lo haremos dentro del panel THEN.

Para poder hacer uso de esta política tenemos que salvarla, publicarla e implementarla


Lo siguiente es Probar nuestra política desde .NET
Agregaremos a nuestra solución de biblioteca de clases un nuevo proyecto de consola para realizar esta prueba

Agregaremos a nuestro proyecto de consola una referencia al assembly (Microsoft.RuleEngine.dll) que nos provee los métodos para consumir nuestra regla, este archivo lo podemos encontrar en:
C:\Program Files (x86)\Common Files\Microsoft BizTalk\Microsoft.RuleEngine.dll
También agregaremos la referencia a nuestra biblioteca de clases para hacer uso de la clase de compra

Agregaremos el siguiente código

Obteniendo el siguiente resultado

La mayor ventaja del motor de reglas de negocio de BizTalk, es que para modificar una regla de negocio, no es necesario detener la aplicación ni volver a realizar la implementación nuevamente, basta con crear una nueva versión de nuestra política y realizar la implementación, con esto automáticamente el motor utilizará la última versión de la política.
Cualquier comentario Bienvenido sea, Saludos a la comunidad!!!
Posted
11-22-2010 5:13 PM
by
Mario Alberto González Hernández