Altova MapForce 2025 Enterprise Edition

Algunos componentes de asignación de datos tienen un elemento parent-context opcional.

 

parent-context es un argumento opcional de algunas funciones de agregado de la biblioteca de funciones core de MapForce (como las funciones min, max, avg y count). En un componente de origen que tiene varias secuencias jerárquicas, el contexto primario determina en qué conjunto de nodos debe operar la función.

 

Con ayuda de este elemento puede influir en el contexto de la asignación en el que debe operar ese componente y, por tanto, cambiar el resultado de la asignación. Los componentes que tienen un elemento parent-context opcional son: las funciones agregadas, las variables y los componentes de combinación.

 

fn-count

 

Para ver un ejemplo de la utilidad de cambiar el contexto primario, abra esta asignación: <Documentos>\Altova\MapForce2025\MapForceExamples\Tutorial\ParentContext.mfd.

mf_semantics_11

En el XML de origen de la asignación anterior existe un único nodo Company que contiene dos nodos Office. Cada nodo Office contiene varios nodos Department, cada uno de los cuales contiene varios nodos Person. Si abre el archivo XML en un editor XML puede ver que la distribución de personas por oficina y departamento es esta:

 

Oficina

Departmento

Número de personas

Nanonull, Inc.

Administración

3

Marketing

2

Ingeniería

6

IT & Soporte técnico

4

Nanonull Partners, Inc.

Administración

2

Marketing

1

IT & Soporte técnico

3

 

La asignación cuenta todas las personas de todos los departamentos. Para ello usa la función count de la biblioteca core. Si hace clic en la pestaña Resultados para previsualizar la asignación verá que produce un único valor, 21, que corresponde al número total de personas del archivo XML de origen.

 

La asignación funciona así:

 

Como es habitual, la ejecución de la asignación empieza por el nodo de nivel superior del componente de destino (rows en este ejemplo). No hay ninguna conexión entrante para rows. Como resultado, el contexto implícito de asignación está establecido entre Company (elemento de nivel superior del componente de origen) y rows (elemento de nivel superior del componente de destino).

El resultado de la función es un valor único porque solo hay un elemento Company en el archivo de origen.

Para rellenar el elemento de destino col1, MapForce ejecuta la función count en el contexto primario implícito que se menciona más arriba, por lo que contará todos los nodos Person de todas las oficinas de todos los departamentos.

 

El argumento parent-context de la función permite cambiar el contexto de la asignación. Esto permite, por ejemplo, contar el número de personas de cada departamento. Para ello, trace dos o más conexiones como las de la imagen siguiente:

mf_semantics_12

En la asignación anterior la conexión A cambia el contexto primario de la función count a Department. Como resultado, la función contará el número de personas de cada departamento. Es importante recordar que la función ahora devolverá una secuencia de resultados en lugar de un solo resultado debido a que en el origen existen varios departamentos. Esta es la razón por la que existe la conexión B: por cada elemento de la secuencia resultante crea una fila nueva en el archivo de destino. Ahora, el resultado de la asignación de datos ha cambiado como corresponde (observe que los números corresponden exactamente al recuento de personas en cada departamento):

 

<rows>
  <row>
      <col1>3</col1>
  </row>
  <row>
      <col1>2</col1>
  </row>
  <row>
      <col1>6</col1>
  </row>
  <row>
      <col1>4</col1>
  </row>
  <row>
      <col1>2</col1>
  </row>
  <row>
      <col1>1</col1>
  </row>
  <row>
      <col1>3</col1>
  </row>
</rows>

 

Si tenemos en cuenta que la asignación actual crea una fila por cada departamento, puede optar por copiar también el nombre de la oficina y el del departamento en el archivo de destino; para ello debe trazar las conexiones C y D:

mf_semantics_13

De este modo, el resultado no solo mostrará el número de personas, sino también los nombres de oficina y departamento correspondientes.

 

Si quiere contar el número de personas de cada oficina, conecte el contexto primario de la función count al elemento Office del componente de origen.

mf_semantics_14

Con las conexiones de la imagen anterior, la función count devuelve un resultado por cada oficina. En el archivo de origen existen dos oficinas, por lo que la función ahora devolverá dos secuencias. En consecuencia, en el resultado existen dos filas de las que cada una corresponde al número de personas de esa oficina.

 

<rows>
  <row>
      <col1>15</col1>
      <col2>Nanonull, Inc.</col2>
  </row>
  <row>
      <col1>6</col1>
      <col2>Nanonull Partners, Inc.</col2>
  </row>
</rows>

 

© 2018-2024 Altova GmbH