Servicios web
En asignaciones que contienen llamadas a servicios web, si el contexto lo permite, se puede llamar al mismo servicio web varias veces, que no suele ser el resultado deseado. Considere estos casos:
•Si la conexión con el elemento Request del componente del servicio web incluye una secuencia de valores, entonces se llamará varias veces al servicio web, una por cada elemento de la secuencia.
•Si un servicio web está dentro de una función definida por el usuario y si se llama varias veces a la función definida por el usuario durante el tiempo que dure la ejecución de la asignación, entonces se llamará al menos el mismo número de veces al servicio web. Para evitar esto debe cambiar las opciones de la configuración de la función definida por el usuario. Para más detalles consulte Funciones definidas por el usuario.
•Normalmente querrá conectar el elemento Response de un servicio web con un elemento de destino que:
ose espera que se haya creado una sola vez (por ejemplo, un componente simple de salida o el elemento de nivel superior de algún componente complejo de destino)
ono esté en un contexto de nivel superior que requiera varias iteraciones del elemento (y, por tanto, potencialmente también varias llamadas al servicio web)
Con respecto al tercer caso de los que hemos mencionado antes, esto podría llevar a que se llamara varias veces a un servicio web, aunque el resultado de la asignación sea el esperado. Por ejemplo, en la imagen siguiente se llama dos veces al servicio web porque falta la conexión entre Response y Rows.
Como es habitual, la ejecución de la asignación empieza por el elemento raíz de destino (Rows, en este caso). Rows no tiene ninguna conexión, por lo que MapForce empieza a recorrer el resto de la estructura jerárquica. Para rellenar el elemento de destino statusCode se hace la primera llamada al servicio web. A continuación, la asignación debe rellenar el elemento body, por lo que hace una segunda llamada al servicio web. Si hubiera más elementos secundarios de Row conectados al servicio web se haría una nueva llamada por cada uno de ellos.
El motivo es que, en la asignación anterior, ni statusCode ni body tienen un contexto matriz explícito (en otras palabras, su elemento de nivel superior no está conectado a un elemento de origen). En consecuencia no pueden reutilizar ningún dato de su contexto matriz y deben obtenerlo de forma individual del componente de origen, que en este caso es un servicio web. Este problema se resuelve fácilmente trazando una conexión entre Response y Rows, como mostramos a continuación:
Gracias a la conexión entre Response y Rows, ahora solo se llama una vez al servicio web. Después de la primera llamada, todos los datos del servicio web está en el contexto actual, por lo que también está disponibles para los elementos secundarios de Rows, lo que significa que ya no se efectúan llamadas redundantes al servicio web.