Secuencias
Comprender las secuencias es esencial para dominar las técnicas de asignación de datos en MapForce. La regla principal para las secuencias es la siguiente:
Si se conecta una secuencia de más de un nodo a un nodo de destino, se crea un bucle que genera tantos nodos de destino como nodos de origen haya.
Si hay un filtro a mitad de camino, MapForce comprueba si hay al menos una condición booleana en la secuencia que dé como resultado true y asigna los datos que cumplen esta condición al destino.
Si la secuencia está vacía no se genera nada en el lado de destino. Por ejemplo, si el componente de destino es un documento XML y la secuencia de origen está vacía, entonces no se crearía ningún elemento XML en el componente de destino.
Excepciones
La regla sobre secuencias tiene algunas excepciones (ver más abajo).
Excepción 1
Si el elemento de destino es un elemento raíz XML, se crea una sola vez. Si conecta a él una secuencia, el resultado puede no ser válido según el esquema. Si también se conectan a él atributos del elemento raíz, entonces la serialización XML fallará en tiempo de ejecución. Esto quiere decir que debe evitar conectar secuencias a elementos XML raíz.
Excepción 2
Si el elemento de destino acepta solamente un valor, se crea una sola vez. Los ejemplos de elementos que solo aceptan un valor son: atributos XML, campos de base de datos y componentes de salida simples. Por ejemplo, la asignación siguiente genera una secuencia de tres números enteros (1, 2, 3) con ayuda de la función generate-sequence. Sin embargo, el resultado contendrá solamente un número entero porque el destino es un componente de salida simple que acepta solamente un valor. Los otros dos valores se ignoran.
Excepción 3
Si el esquema de origen indica que un elemento específico ocurre una sola vez, pero el archivo de instancia contiene varios, MapForce extrae el primer elemento del origen (que, de acuerdo con al esquema, debe existir) y crea un solo elemento en el componente de destino. Para deshabilitar este comportamiento, desactive la casilla Optimización de procesamiento de datos de entrada basada en minOccurs/maxOccurs de la configuración del componente.
Funciones
Si una función no secuencial recibe una secuencia como entrada, entonces se llama a la función tantas veces como se indique yla función produce tantos resultados como elementos haya en la secuencia. Si una función recibe una secuencia vacía como entrada, devuelve un resultado vacío y, en consecuencia, no produce ningún resultado.
Funciones que devuelven un valor aunque reciban una secuencia vacía
Sin embargo, hay algunas categorías o funciones que, por motivos de diseño, devuelven un valor incluso aunque reciban una secuencia vacía como entrada:
•exists, not-exists, substitute-missing
•is-null, is-not-null, substitute-null (estas tres funciones son alias de las tres anteriores)
•funciones agregadas (sum, count, etc.)
•funciones definidas por el usuario que aceptan secuencias y son funciones regulares (no inline)
Si necesita sustituir un valor ausente, añada la función substitute-missing a la asignación y sustituya el valor ausente por un valor sustituto de su elección.
Funciones con varias entradas
Las funciones pueden tener distintos elementos de entrada. Si se conecta una secuencia a cada entrada, se obtiene un producto cartesiano de todas las entradas (un conjunto de todos los pares ordenados que pueden crearse combinando elementos de dos o más conjuntos). Esto es, por lo general, un resultado no deseado. Para evitarlo, conecte solo una secuencia a una función con varios parámetros. Los demás parámetros deben conectarse a elementos «únicos» de los primarios o de otros componentes.