Altova MapForce 2025 Professional Edition

El contexto es uno de los aspectos más cruciales en la ejecución de las asignaciones de datos. Comprender el contexto es clave para lograr nuestro objetivo en el resultado. El contexto determina qué datos están disponibles para el nodo de destino actual y sus descendientes y qué elementos de origen se seleccionan realmente y se copian del componente de origen al de destino.

 

MapForce siempre establece el contexto actual empezando por el (nodo) elemento raíz de destino. Aquí es donde comienza realmente la ejecución de una asignación de datos. Tras procesar el nodo de destino, MapForce avanza por la jerarquía. Para cada nodo de destino, las conexiones se rastrean hasta los nodos de origen, a través de cualquier función intermedia.

 

Para cada nodo de destino, se establece un nuevo contexto que contiene inicialmente todos los nodos de origen actuales del nodo primario y todos los resultados de las funciones. Mientras MapForce evalúa las conexiones que conducen directa o indirectamente al nodo de destino, se agregan al contexto fuentes y resultados de funciones adicionales. De este modo, los nodos de destino del mismo nivel son independientes entre sí, pero tienen acceso a todos los orígenes de sus nodos primarios.

 

Para repasar las reglas fundamentales de la ejecución de asignaciones de datos, consulte Reglas y estrategias básicas.

 

Ejemplo

Para poner en práctica los principios descritos anteriormente, analizaremos la siguiente asignación de datos: MapForceExamples\PersonListByBranchOffice.mfd (imagen siguiente). El objetivo principal de la asignación de datos es obtener una lista de empleados con sus datos de una oficina determinada.

mf_udf_19

Estructuras de origen y de destino

En nuestro ejemplo, la asignación contiene un componente XML de origen y un componente XML de destino. Además, hay un componente de entrada simple que también actúa como origen y suministra el nombre de la oficina cuyos empleados nos interesan. La asignación de datos también incluye varios componentes de transformación, como un filtro y algunas funciones.

 

Es importante destacar que MapForce siempre muestra únicamente jerarquías de esquemas en los componentes estructurales (por ejemplo, XML). Por ejemplo, el componente BranchOffices solo muestra un elemento Contact, a pesar de que el archivo de instancia de origen BranchOffices.xml contiene varios nodos Contact con contenido diferente y en nodos primarios Office diferentes. A continuación, puede ver un extracto de BranchOffices.xml.

 

<BranchOffices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BranchOffices.xsd">

<Name>Nanonull</Name>

<Office>

<Name>Nanonull, Inc.</Name>

<EMail>office@nanonull.com</EMail>

<Fax>+1 (321) 555 5155 - 9</Fax>

<Phone>+1 (321) 555 5155</Phone>

<Address>

<city>Vereno</city>

<state>CA</state>

<street>119 Oakstreet, Suite 4876</street>

<zip>29213</zip>

</Address>

<Contact>

<first>Vernon</first>

<last>Callaby</last>

</Contact>

<Contact>...</Contact>

<Contact>...</Contact>

<Contact>...</Contact>

<...>

</Office>

<Office>

<Name>Nanonull Partners, Inc.</Name>

<EMail>nextoffice@nanonull.com</EMail>

<Fax>+1 (927) 555 1845</Fax>

<Phone>+1 (927) 555 0094</Phone>

<Address>

<city>Brenton</city>

<state>MA</state>

<street>9865 Millenium Center, Suite 456</street>

<zip>5985</zip>

</Address>

<Contact>

<first>Steve</first>

<last>Meier</last>

</Contact>

<Contact>...</Contact>

<Contact>...</Contact>

<...>

</Office>

</BranchOffices>

 

Contexto y orden de procesamiento

En nuestra asignación de datos, el procesamiento comienza a partir del nodo raíz de destino llamado PersonList. Podemos rastrear la conexión con el filtro y la función equal hasta su elemento de origen: el elemento Office.

 

Una sola oficina como contexto para el destino

Como nuestra asignación de datos tiene un filtro, solo los datos que cumplan la condición booleana se asignarán al destino. Esta condición solo se cumple una vez, porque solo hay una oficina llamada Nanonull, Inc. en el archivo XML de origen. En consecuencia, la conexión desde la lista PersonList a través del filtro hasta el nodo Office define una única oficina como contexto para todo el documento de destino. Esto significa que todas las conexiones posteriores a los descendientes del elemento raíz se verán afectadas por el filtro. Además, solo tendrán acceso a los datos de la oficina Nanonull, Inc. y no existirá ninguna otra oficina en el contexto actual.

 

Una persona por cada contacto

La siguiente conexión es entre los nodos Contact y Person. Según la regla general de asignación de datos, esta conexión creará un elemento Person de destino por cada Contact de origen. En cada iteración, esta conexión establece un Contact actual para las conexiones con los secundarios del elemento Person. Por lo tanto, las conexiones secundarias (first con First, last con Last) seleccionarán el nombre y el apellido del elemento Contact actual y los escribirán en el destino.

 

Función definida por el usuario

La asignación también incluye una función definida por el usuario llamada LookupPerson. La función definida por el usuario también se ejecuta en el contexto de cada Person, debido a la conexión primaria entre Contact y Person. 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.

 

La función toma tres parámetros de entrada. El parámetro OfficeName lee los datos del componente de entrada simple. 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 del 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 se configura la función LookupPerson, consulte Implementación de la búsqueda.

 

Si los nodos primarios no están conectados

Si no existiera una conexión entre Contact y Person, entonces la asignación crearía solamente un elemento Person con varios nodos First, Last y Details. En casos como este, MapForce muestra una advertencia en la ventana Mensajes (imagen siguiente) y sugiere conectar los nodos primarios para resolver el problema.

mf_semantics_01

 

© 2018-2024 Altova GmbH