Cambiar el contexto y ámbito de las variables
Todas las variables tienen un elemento de entrada compute-when que sirve para controlar el ámbito de la variable, es decir, en qué momento y con qué frecuencia se calcula el valor de la variable cuando se ejecuta la asignación. En muchos casos este elemento de entrada puede dejarse sin conectar, pero en ocasiones puede ser imprescindible a la hora de reemplazar el contexto predeterminado o para optimizar el rendimiento de la asignación de datos.
El término subestructura utilizado en esta documentación hace referencia al conjunto de elementos/nodos de un componente de destino y a todos sus descendientes (p. ej. un elemento <Persona> con sus elementos secundarios <Nombre> y <Apellido>.
El término valor de variable sirve para denominar los datos disponibles en el lado saliente del componente de variable.
•En el caso de las variables simples se trata de una secuencia de valores atómicos cuyo tipo de datos está especificado en las propiedades del componente.+
•En el caso de las variables complejas se trata de una secuencia de nodos raíz (del tipo especificado en las propiedades del componente), cada uno de ellos con sus nodos descendientes.
La secuencia de valores atómicos (o nodos) puede contener un elemento e incluso cero. Esto depende de cómo esté conectado el lado entrante de la variable y de con qué elementos principales del componente de origen/destino esté conectado.
Si Compute-when no está conectado (configuración predeterminada)
Si el elemento de entrada compute-when no está conectado (a ningún nodo de salida de un componente de origen), entonces el valor de la variable se calcula cuando se use por primera vez en una subestructura de destino (ya sea por conexión directa entre el componente de variable y un nodo del componente de destino o por conexión indirecta a través de funciones). El mismo valor de variable se utiliza después para todos los nodos secundarios de destino incluidos dentro de la subestructura.
El valor real de la variable dependerá de las conexiones que existan entre los elementos principales del componente de origen y de destino. Este comportamiento predeterminado es idéntico al de los resultados complejos de funciones definidas por el usuario y de llamadas a función de servicio web. Si el resultado de la variable se conecta a varios nodos de destino que no guardan relación entre sí, el valor de la variable se calcula por separado para cada uno de ellos. Esto puede dar lugar a resultados distintos porque las distintas conexiones principales influyen en el contexto en el que se evalúa el valor de la variable.
Si Compute-when está conectado
Si se conecta un conector de salida de un componente de origen con el elemento compute-when, el valor de la variable se calcula cuando dicho elemento de origen se use por primera vez en una subestructura de destino.
En realidad la variable hace las veces de elemento secundario del elemento que está conectado a compute-when (imagen siguiente). Esto permite vincular la variable con un elemento de origen concreto. Es decir, en tiempo de ejecución la variable se vuelve a evaluar cada vez que se lea un elemento nuevo de la secuencia del componente de origen. Se trata de la regla general que rige las conexiones en MapForce: por cada elemento de origen, se crea uno de destino. En el caso del elemento de entrada compute-when esto significa que por cada elemento de origen, se calcula el valor de variable (véase Reglas y estrategias de asignación de datos).
Compute-once
Si fuera necesario, puede solicitar que el valor de variable se calcule una sola vez antes de cada componente de destino, lo cual convierte a la variable en una constante global para el resto de la asignación. Esto se consigue haciendo clic con el botón derecho en el elemento compute-when y seleccionando el comando Calcular una vez en el menú contextual (imagen siguiente).
Cuando se cambia el ámbito de una variable por compute-when=once, el conector de entrada se elimina del elemento compute-when (porque dicha variable solamente se evaluará una vez). En funciones definidas por el usuario la variable compute-when=once se evalúa cada vez que se llama a la función y antes de que el resultado de la función se evalúe.
Contexto primario
En ocasiones puede ser necesario agregar un contexto primario. Por ejemplo, si la asignación usa varios filtros y necesita recorrer un nodo primario adicional (véase Reemplazar el contexto de la asignación).
Para agregar un contexto primario a una variable basta con hacer clic con el botón derecho en el nodo raíz (p. ej. "PersonList") y seleccionar el comando b en el menú contextual. Como resultado se añade un nodo nuevo llamado parent-context a la jerarquía de la variable.
El contexto primario añade un nodo primario virtual a la jerarquía del componente, lo cual permite recorrer otro nodo más en el mismo componente de origen o en otro distinto.