5.13.2016

Mapas en BizTalk: Obteniendo solo el primer registro de una colección

Uno de los problemas mas comunes que enfrentamos cuando desarrollamos en BizTalk se da cuando recibimos una colección de elementos, pero solo requerimos el primer elemento de la colección. Existen varias formas de obtener ese elemento, pero la forma mas sencilla de llevarlo a cabo es utilizando un mapa. En este post vamos a ver como solucionar este problema utilizando mapas en BizTalk.

El problema

En una aplicación BizTalk recibimos una colección de registros desde una base de datos y debemos procesar el primero registro únicamente. El mensaje recibido se presenta en la siguiente figura:


La Solución


Vamos a obtener el primer registro utilizando un mapeo y lo vamos a manera a otra estructura. En este caso la estructura destino es la que se muestra en la siguiente imagen.

Como se ve en la figura anterior, el esquema de persona espera únicamente una persona y requiere el nombre concatenado; es decir, el nombre debe de quedar como "Nombre Apellido1 Apellido2".
Para lograr esto vamos a utiilzar un mapa con una combinación de functoids que nos van a permitir obtener convertido el primero nodo. El mapa se puede ver en la siguiente figura:


Como se puede ver en la figura anterior, estamos utilizando un mapa con 4 tipos de functoids. Vamos a detallar cada uno de los functoids a continuación.

(1) Iteración

El primer functoid que vamos a utilizar es la iteración. Este functoid nos da el indice actual del registro en una operación cíclica iniciando el contador en 1. 

Para nuestro ejemplo, necesitamos procesar el registro cuando el indice que nos devuelve el functoid es igual a 1. 

(2) Equal

El segundo functoid nos permite hacer una comparación entre dos parámetros y nos retorna "true" si la comparación es verdadera o "false" si la comparación es falsa.

En nuestro caso, cuando el functoid de iteración nos retorna uno, entonces la condición será  verdadera, con lo cual vamos a proceder a copiar el valor en el nuevo nodo.


(3) Value Mapping (Flattening)

Este functoid copia registros de una estructura repetitiva a una estructura destino plana. En nuestro caso estamos copiando de una lista de personas a una única persona, esta acción se ejecuta si el primer parámetro que recibe el functoid es verdadero. 









La configuración de este functoid se ve en la siguiente figura. Como se ve en la figura, inicialmente se recibe el resultado del functoid "equal", si este es verdadero, entonces el valor de la concatenación del mapeo (nombre + apellido1 + apellido2) se copiara en la estructura destino.



Resultado

El resultado al aplicar el mapa al archivo mostrado al final del articulo se puede ver en la siguiente figura.