Sentencia For each en OSB 11g

¡Hola a todos!

Hoy me estuve peleando un rato con esta sentencia, siempre me da problemas por que se me olvida la sintaxis correcta, por eso el post de hoy será referente a como hacer una actividad For Each en un flujo del Oracle Service Bus.

Los datos de entrada en el body son:

<soapenv:Body  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <zyn1:enrolarMiembroRequest  xmlns:zyn="http://types.ejemplo.com/Proyecto" xmlns:zyn1="http://elements.ejemplo.com/Proyecto">
        <zyn:nombre>Juanita</zyn:nombre>
        <zyn:apellidos>Perez Lopez</zyn:apellidos>
        <zyn:email>correo@mail.com.mx</zyn:email>
        <zyn:grupos>
            <zyn:idGrupo>123</zyn:idGrupo>
            <zyn:idGrupo>456</zyn:idGrupo>
        </zyn:grupos>
    </zyn1:enrolarMiembroRequest>
</soapenv:Body>

Como podemos observar, el elemento que se repite es idGrupo. El plan es iterar esta colección y obtener el valor de cada registro para asignarla a una variable llamada grupo.

El primer paso es asignar el valor de la estructura xml origen  a una variable llamada grupos (aún no estoy segura de por qué es necesario hacerlo, pero sin este paso no me funcionó la solución)

Assign [ $body/zyn1:enrolarMiembroRequest ] to [ grupos ]

 El siguiente paso es la actividad For Each, aquí declaré una nueva variable llamada idGrupo, es en esta variable donde se asigna el valor del nodo de la posición actual que se especifica en la parte: ./zyn:grupos/zyn:idGrupo de la variable grupos.

For Each [ idGrupo ] in [ ./zyn:grupos/zyn:idGrupo ] of [ grupos ]

Lo siguiente es crear  un par de variables correspondientes al índice y total de registros (no es necesario inicializarlos ni manejarlos si no se requiere)

Indexed by [ i ] with total count in [ total ]

Do (

Por último asignamos en la variable grupo el valor del texto del nodo que recuperamos anteriormente

    Assign [ $idGrupo/text() ] to [ grupo ]

En la iteración 1, la variable idGrupo contiene el nodo xml:

<zyn:idGrupo>123</zyn:idGrupo>

En la iteración 2, la variable idGrupo contiene el nodo xml:

 <zyn:idGrupo>456</zyn:idGrupo>

Al usar la fucnión text() obtenemos el valor del texto del nodo, es decir, 123 y 456.


En resumen, queda así:

Hasta la próxima.


Sandy
Compartamos para trascender.

Comentarios

  1. Que bien me ha venido tu post. Después de consultar manuales y demás, al final tu explicación es la que me ha servido. Me ha funcionado a la primera.
    Eternamente agradecida.

    ResponderBorrar
    Respuestas
    1. Muchas gracias. Me da gusto que te haya sido de utilidad.

      Saludos

      Borrar
  2. Podrias postear algo parecido en 12c?

    ResponderBorrar
  3. EXCELENTE posteo colega. De veras que sin ese Assign previo no me funcionaba.

    ResponderBorrar
  4. EXCELENTE posteo colega. De veras que sin ese Assign previo no me funcionaba.

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Conceptos básicos de Servicios Web SOAP, WSDL y XSD

OWSM and WS-Security: Username Token Authentication for SOAP and REST Services in OSB 12c.

Conversión de servicios SOAP a REST/JSON usando OSB 11g