Ejemplo: filtrar y numerar nodos
El diseño de asignación que aparece más abajo corresponde al archivo PositionInFilteredSequence.mfd situado en la carpeta <Documentos>\Altova\MapForce2025\MapForceExamples\.
Esta asignación lee un archivo XML que contiene datos de contacto de varias persona, los filtra y los escribe en un archivo XML de destino. El objetivo del diseño es filtrar datos del archivo XML de origen de las personas cuyo apellido empiece a partir de la letra M. Además, los contactos extraídos deben estar numerados en el XML de destino. Este número hará de identificador único en el XML de destino.
PositionInFilteredSequence.mfd
Para conseguir este objetivo se añadieron varios componentes al diseño de asignación:
•Un filtro (véase Filtros y condiciones)
•Una variable compleja (véase Agregar variables)
•Las funciones greater y position (véase Agregar una función)
•Una constante (para agregar una constante seleccione el comando de menú Insertar | Constante).
La variable usa el mismo esquema que el componente de origen. Si hacemos clic con el botón derecho en la variable y seleccionamos Propiedades en el menú contextual, veremos que el nodo raíz que está seleccionado para esta estructura de variable es BranchOffices/Office/Contact.
Primero se pasan al filtro los datos del componente de origen. Después el filtro pasa a la variable los registros que cumplan la condición de filtrado. Es decir, el filtro está configurado para obtener los nodos Contact cuyo nombre sea igual o mayor que "M". Para ello se usa la función greater que compara cada elemento last con el valor de constante "M".
La variable tiene la entrada compute-when conectada con el elemento raíz del componente de origen (BranchOffices). En tiempo de ejecución esto hace que la variable se vuelva a evaluar cada vez que se lea un elemento nuevo de la secuencia del componente de origen. Sin embargo, en esta asignación no influye en modo alguno el conectar o no conectar el elemento compute-when. El motivo es que la variable está conectada al elemento de origen Contact (de forma indirecta a través del filtro) y se calcularía tantas veces como instancias de Contact cumplan la condición de filtrado.
La función position devuelve (por cada iteración de la variable) el número de la secuencia actual. Sólo ocho contactos cumplen la condición. Por tanto, si consultamos la vista previa del resultado de la asignación, veremos que se escribieron los identificadores 1 - 8 en el elemento ID del componente de destino.
La variable se necesita porque necesitamos numerar todos los registros. Si se hubiera conectado el resultado del filtro al componente de destino directamente, no habría manera de numerar cada instancia de Contact. La función de la variable es, por tanto, almacenar temporalmente cada instancia de Contact para poder numerarlas antes de escribirlas en el destino.