Altova MapForce 2023 Enterprise Edition

Algunos componentes de asignación tienen un elemento parent-context opcional. 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: funciones agregadas, variables y componentes Join.

 

fn-count

 

Para ver un ejemplo de la utilidad de cambiar el contexto matriz, abra esta asignación: <Documentos>\Altova\MapForce2023\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.

 

La asignación funciona así:

 

Como es habitual, 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 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 matriz 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 matriz 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. El resultado de la asignación ahora cambia en consecuencia (tenga en cuenta que los números corresponden exactamente al número de personas de 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 nombre de personas de cada oficina, conecte el contexto matriz de la función count al elemento Office del componente de destino.

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>

© 2017-2023 Altova GmbH