11.02.2011

Aprendiendo WF parte 6: Trabajando con colecciones en WF

Siguiendo con nuestros posts acerca de WF, vamos a trabajar con colecciones en los workflows de Workflow Foundation, algo que también será muy común en nuestras aplicaciones n-layer ya que normalmente trabajamos con colecciones de entidades.

Colecciones como Parámetros

Es muy común utilizar colecciones de objetos para llevar a cabo procesos de negocios en nuestra empresa a través de los productos que día a día desarrollamos. Por ejemplo, vamos a requerir una colección de clientes cuando deseamos hacer una consulta de clientes, o una colección de productos cuando queremos ver los productos de una categoría específica. Como era de suponerse, en el workflow foundation podemos recibir, procesar y retornar colecciones de objetos.

En este post vamos a crear una colección de productos los cuales tienen la siguiente estructura.

image

En el ejemplo que estamos por construir, vamos a recibir una colección de Productos, la vamos a procesar y luego vamos a retornar todos los productos que están exonerados. Para esto vamos a crear un nuevo Workflow que se llame WfProcesarProductosExonerados y en este workflow vamos a crear dos parámetros:

  1. ProductosRecibidos: Colección de productos a procesar –> List<Producto>: Ingreso.
  2. ProductosExonerados: Colección de productos que están exonerados –> List<Producto>: Retorno.

Para crear la primera lista, seleccionamos en el tipo del argumento la opción Browse For Types. Luego nos aparecerá un diálogo en donde vamos a seleccionar – buscando – el tipo List<T>.

image

En esta lista procedemos a seleccionar el tipo que queremos asignarle a T, para esto procedemos a seleccionar de la lista desplegable la opción “Browse For Types” de nuevo. En esta opción seleccionamos la clase Producto.

image

Para la lista de retorno, solamente tenemos que expandir la lista del tipo y ya nos aparecerá disponible List<Producto> como tipo para elegir.

image

Ahora procedemos a crear el workflow. En este caso vamos a recibir la lista de productos – pProductosRecibidos – y la vamos a recorrer. Por cada producto vamos a preguntar si el producto esta exonerado, si es así procedemos a agregarlo a la nueva lista de retorno. El workflow completo se puede ver a continuación.

image

Es importante notar que para poder agregar los productos a la nueva lista, esta debe de ser instanciada antes de poder ser utilizada, tal y como se ve en la siguiente figura.

image

Igualmente es importante destacar que la estructura de ForEach debe de ser tipificada para que compile. Esto se logra cambiándole la propiedad TypeArgument del ForEach.

image

También se debe de utilizar la figura para agregar elementos a una colección. Esta figura debe de ser configurada con el ítem que se desea agregar –> en nuestro caso el item del foreach – y la colección a la que deseo agregar el ítem. También debo de agregar el tipo con el que va a trabajar la figura.

image

Ahora procedemos a trabajar en la consola. En primera instancia tenemos que crear la colección de productos que le vamos a enviar al workflow para que los procese.

image

Luego procedemos a crear la instancia del workflow y a pasarle los parámetros –> en este caso nuestra colección _productos. En la misma llamada se retorna la colección de productos ya procesados.

image

Seguidamente procedemos a convertir el parámetro de retorno en una lista y la procesamos.

image

El resultado al ejecutar el código anterior es el siguiente.

image

Etiquetas de Technorati: ,

No hay comentarios: