Altova MapForce 2024 Professional Edition

Los elementos de una asignación son estructuras jerárquicas que pueden contener muchos niveles de profundidad. Por otro lado, una asignación puede tener varios elementos de entrada y componentes, además de otros componentes intermedios como funciones, filtros, pares valor-asignación, etc. Esto añade complejidad al algoritmo de la asignación, especialmente si se conectan varios componentes no relacionados. Para poder ejecutar una asignación por partes, es decir, un paso cada vez, se debe estableces un contexto actual para cada conexión.

 

También se podría decir que se establecen varios "contextos actuales" para la duración de la ejecución de la asignación, ya que el contexto actual va cambiando según se van procesando las conexiones.

 

MapForce siempre establece el contexto actual empezando por el (nodo) elemento raíz de destino. Ese es el punto en el que empieza la ejecución de la asignación. La conexión con el elemento raíz de destino se traza de vuelta a todos los elementos de origen que están directa o indirectamente conectados a él, también mediante funciones u otros componentes intermedios. Todos los elementos de origen y los resultados producidos por las funciones se añaden al contexto actual.

 

Una vez se ha terminado de procesar el nodo de destino, MapForce empieza a avanzar por la estructura jerárquica. Más concretamente, procesa todos los elementos asignados del componente de destino de arriba a abajo. Por cada elemento nuevo se establece un contexto nuevo que inicialmente contiene todos los elementos del contexto matriz.Por lo tanto, todos los elementos asignados del mismo nivel que haya en un componente de destino son independientes unos de otros pero tienen acceso a todos los datos de origen de los elementos correspondientes de nivel superior.

 

Ahora vamos a ver cómo funciona en la práctica lo que acabamos de explicar; para ello usaremos la asignación de ejemplo PersonListByBranchOffice.mfd, que puede encontrar en el directorio <Documentos>\Altova\MapForce2024\MapForceExamples\.

mf_udf_19

En la asignación anterior, tanto el componente de origen como el de destino son archivos XML. El archivo XML de origen contiene dos elementos Office.

 

Como hemos mencionado previamente, la ejecución de la asignación siempre empieza por el nodo raíz de destino (PersonList en este ejemplo). Al trazar de vuelta la conexión (con el filtro y la función) a un elemento de origen, se puede concluir que el elemento de origen es Office. (La otra ruta de conexión lleva a un parámetro de entrada cuyo propósito se explica más abajo).

 

Si hubiera habido una conexión directa entre Office y PersonList, entonces, conforme a la regla general de asignación, la asignación habría creado tantos elementos de instancia PersonList como elementos Office hay en el archivo de origen. Sin embargo, esto no es lo que ocurre aquí porque hay un filtro entre medias. El filtro solo pasa al componente de destino datos que cumplen con la condición booleana que hay conectada al elemento de entrada bool del filtro. La función equal devuelve true si el nombre de la oficina es igual a "Nanonull, Inc.". Esta condición se cumple una sola vez porque solo existe un nombre así en el archivo XML de origen.

 

En consecuencia, la conexión entre Office y PersonList define una única oficina como el contexto para todo el documento de destino. Esto significa que todos los elementos secundarios de Personlist tienen acceso a los datos de la oficina "Nanonull, Inc." y que no existe ninguna otra oficina en el contexto actual.

 

La siguiente conexión es entre Contact y Person. Según la regla general de asignación se crea un elemento Person de destino por cada elemento Contact de origen. En cada iteración esta conexión establece un contexto actual nuevo; por lo tanto, las conexiones secundarias (first a First, last a Last) suministran datos del elemento de origen al de destino en el contexto de cada elemento Person.

 

Si omite la conexión entre Contact y Person, entonces la asignación crearía solamente un elemento Person con varios nodos First, Last y Details. En estos casos, MapForce emite un mensaje de advertencia y una sugerencia en la ventana Mensajes, por ejemplo:

mf_semantics_01

Finalmente, la asignación incluye una función definida por el usuario, LookupPerson. La función definida por el usuario también se ejecuta en el contexto de cada elemento Person debido a la conexión primaria entre Contact y Person. Más concretamente, cada vez que un elemento Person nuevo se crea en el lado de destino, se llama a la función para que rellene el elemento Details de esa persona. Esta función toma tres parámetros de entrada. El primero (OfficeName) está definido para que lea datos del parámetro de entrada de la asignación. Los datos de origen para este parámetro también los podría suministrar el elemento de origen Name sin que eso cambiara el resultado de la asignación. En ambos casos el valor de origen es el mismo y se toma de un contexto de nivel superior. A nivel interno, la función de búsqueda concatena los valores recibidos como argumentos y produce un valor único. Para más información sobre cómo funciona la función LookupPerson consulte Ejemplo: búsqueda y concatenación.

© 2017-2023 Altova GmbH