Combinar datos
A veces es necesario combinar datos de dos o más estructuras en base a una condición (p. ej. si el campo A de la primera estructura tiene el mismo valor que el campo B de la segunda estructura). Para este tipo de diseños puede usar un componente de combinación.
Un componente de combinación es un componente de MapForce que permite unir varias estructuras en la asignación de acuerdo con las condiciones definidas por el usuario. Devuelve la asociación (conjunto combinado) de elementos que cumplen con la condición. Las combinaciones son de gran ayuda a la hora de combinar datos de dos estructuras que tienen un campo en común (p. ej. una identidad).
Por ejemplo, en la asignación que aparece más abajo, el componente del medio es un componente de combinación. En este diseño de asignación se combinan dos estructuras XML (una lista de personas y una lista de direcciones). El objetivo es recopilar todos los datos personales de cada persona en un archivo XML de destino. Los campos FirstName y LastName hacen de claves de combinación. Es decir, si FirstName y LastName (secundarios de Person) tienen el mismo valor que FirstName y LastName (secundarios de Address), entonces los datos de la dirección pertenecen a la misma persona y, por tanto, se combinan. Los nodos de la estructura combinada se pueden seguir procesando en un componente de destino (en este caso un archivo XML). La condición de combinación propiamente dicha se define en las propiedades del componente de combinación con el botón Definir condición de combinación . Este ejemplo viene con una asignación de muestra y se explica con más detalla en el apartado Ejemplo: combinar estructuras XML.
JoinPeopleInfo.mfd
Como puede ver en la imagen, las estructuras de origen y el componente de combinación están conectadas por medio de una conexión de copia total, para reducir la acumulación de elementos en el área de diseño. En general, este tipo de conexiones se crean automáticamente en MapForce si el contexto es relevante (véase Conexiones de copia total).
Las estructuras que se deben combinar pueden ser de componentes distintos (como en el ejemplo anterior) o pueden pertenecer al mismo componente. Las estructuras que se deben combinar también pueden ser de tipos distintos (p. ej. una estructura XML y una tabla de BD). Consulte el apartado Combinar datos de base de datos para aprender cómo funciona la combinación en las bases de datos.
Para agregar un componente de combinación:
1.Active el lenguaje de transformación BUILT-IN (haciendo clic en el botón de la barra de herramientas o con el comando de menú Resultados | Motor de ejecución integrado).
2.Haga clic en el comando de menú Insertar | Combinación o en el botón Combinación de la barra de herramientas. El componente de combinación aparece en la asignación y por defecto acepta datos de dos estructuras, así que tiene dos entradas nodes/rows. Si lo necesita, puede agregar entradas nuevas en la combinación con ayuda del botón Agregar entrada (véase Combinar tres o más estructuras).
3.Conecte las estructuras que se deben combinar con las entradas nodes/rows del componente de combinación.
4.Añada la condición para la combinación (o varias condiciones). Esto se consigue haciendo clic con el botón derecho en el componente de combinación y seleccionando Propiedades. También puede añadir condiciones de combinación desde la asignación directamente: conecte el resultado booleano de una función con la entrada condition del componente de combinación. Cuando se están combinando tablas de base de datos, MapForce puede crear condiciones de combinación automáticamente (véase Agregar condiciones de combinación).
Notas:
•Se admite el uso de componentes de combinación cuando el lenguaje de destino de la asignación es el motor de ejecución integrado (BUILT-IN). No es compatible con la generación de código C#, C++ o Java.
•Cuando una estructura no es una fuente de entrada válida ni compatible para la combinación, MapForce emite sugerencias en la asignación directamente o, cuando se valide la asignación, en la ventana Mensajes (véase Validar asignaciones).
•No se deberían conectar componentes de combinación con parámetros de entrada ni resultados de funciones definidas por el usuario inline. Si existen dichas conexiones, se producirán errores de validación.
•Cuando conecte componentes de base de datos (tablas o vistas, por ejemplo) a un componente de combinación directamente, en la esquina superior derecha del componente de combinación se habilitará el botón Modo SQL . Si se activa, este botón ofrece funciones SQL especiales para trabajar con la operación de combinación (véase Combinaciones en modo SQL).
•No se puede conectar la salida del nodo joined con otro componente de combinación, pero si lo necesita puede conectar un resultado parcial de una combinación con otra.
Diferencias entre componentes de combinación y otros tipos de componentes
En algunos casos se puede conseguir el mismo resultado usando variables o filtros complejos en lugar de componentes de combinación (véase Usar variables y Filtros y condiciones). Sin embargo, a diferencia de otros componentes, los de combinación facilitan la comprensión de la asignación porque permiten distinguir a simple vista qué datos se combinan. Además, si se habilita el modo SQL en el componente de combinación, el rendimiento de la asignación aumenta considerablemente cuando se trata de combinaciones de bases de datos (véase Combinar datos de base de datos).
Agregar un contexto primario
En casos especiales para poder conseguir un resultado concreto se podrá ofrecer explícitamente un contexto de asignación (el denominado contexto primario) para los datos que están conectados con el componente de combinación. Para agregar un contexto primario haga clic con el botón derecho en el nodo joined del componente de combinación y seleccione Agregar contexto primario en el menú contextual. A partir de ese momento, el componente de combinación incluirá una entrada nueva llamada parent-context donde podrá conectar el nodo de origen correspondiente. Consulte Reemplazar el contexto de la asignación para obtener más información.