Enriquecimiento de mensaje complejo

Visión general

Los nombres y valores utilizados para flujos de mensajes, conjuntos de mensajes, elementos y atributos, y las expresiones y ejemplos de código son sólo con fines ilustrativos.
Este escenario utiliza una manipulación de mensajes compleja y requiere las siguientes funciones de correlación:
  • MRM in, MRM out (espacio de nombres)
  • Otros nodos necesarios para completar el mensaje
  • Correlación condicional
  • Correlación de caso (CASE) (ambos formatos de sintaxis)
  • Si/condición
  • Combinación de varios campos de origen en un único campo de destino (entre espacios de nombres)
  • Elementos simples y complejos de repetición anidados
  • Datos de destino derivados de la base de datos
  • Funciones de serie de caracteres, numéricas y de fecha y hora
  • Procedimientos y funciones ESQL definidos por usuario
  • Rutinas Java definidas por usuario

Utilice las herramientas de Message Broker para crear flujos de mensajes y conjuntos de mensajes y para crear y desplegar archivos archivadores de intermediario (bar). También debe crear un gestor de configuración y un intermediario. En las herramientas de Message Broker, cree una conexión de dominio con el gestor de configuración y cree un intermediario en el dominio. También se requiere un método para entrar mensajes de instancia que pueden contener (opcionalmente) cabeceras MQRFH2, por ejemplo argoput, rfhutil.

Paso 1. Desarrollar flujo que contenga otros nodos (por ejemplo Filter) y utilizar correlaciones con condiciones, desarrollar modelos de mensaje (utilizando todos los tipos de datos principales) y mensajes de instancia correspondientes

  1. Desde la perspectiva Desarrollo de aplicaciones, cree un proyecto de conjunto de mensajes y un conjunto de mensajes MAPPING3_COMPLEX_messages (espacio de nombres habilitado con formato físico XML) y un archivo de definición de mensajes COMPLEX con espacio de nombres de destino www.complex.net, prefijo comp.
  2. Cree los mensajes addev1, addev1s y addev1n con las estructuras:
    addev1
       bool      (xsd:boolean) local element
       bin        (xsd:hexBinary) local element
       dat        (xsd:dateTime) local element
       dec       (xsd:decimal) local element
       dur        (xsd:duration) local element
       flt          (xsd:float) local element
       int         (xsd:int) local element
       str         (xsd:string) local element   
    addev1s
       bin        (xsd:hexBinary) local element
       dat        (xsd:dateTime) local element
       dur        (xsd:duration) local element
       str         (xsd:string) local element
    addev1n
       dec       (xsd:decimal) local element
       flt          (xsd:float) local element
       int         (xsd:int) local element
  3. Cree el proyecto de flujo de mensajes MAPPING3_COMPLEX_flows.
  4. Cree un flujo de mensajes, addev1, que contenga:
    MQInput ->Filter -> Mapping -> Compute
                         \                       \ --> RCD -> MQOutput
                          \-> Mapping1-----------/ 
  5. En el nodo Filter establezca el siguiente ESQL:
    IF Body.bool THEN
                RETURN TRUE;
            ELSE
                RETURN FALSE;
            END IF;
  6. En el nodo de correlación conectado al terminal verdadero de Filter (Mapping1), abra la correlación y seleccione addev1 como origen y addev1s como destino.
  7. Enlace el origen con el destino de la siguiente manera:
    bin --- bin
    dat --- dat
    dur --- dur
    str --- str
  8. En el panel de hoja de cálculo, expanda Propiedades y establezca:
    MessageType   |     'addev1s'
  9. Seleccione el dat de destino, pulse el botón derecho del ratón y seleccione Si.
  10. Sustituya la condición fn:true() por $source/comp:addev1/str = 'dat'.
  11. Establezca el valor para dat en $source/comp:addev1/dat + xs:duration("P3M").
  12. Seleccione la condición, pulse el botón derecho del ratón y, en el menú, seleccione Si no.
  13. Seleccione el dur de destino, pulse el botón derecho del ratón y seleccione Si.
  14. Sustituya la condición fn:true() por $source/comp:addev1/str = 'dur'.
  15. Establezca el valor para dur en $source/comp:addev1/dur + xs:duration("P1Y").
  16. Seleccione la condición, pulse el botón derecho del ratón y, en el menú, seleccione Si no.
  17. Abra la correlación para el nodo conectado al terminal falso del nodo Filter (Mapping) y seleccione addev1 como origen y addev1n como destino.
  18. Enlace el origen con el destino de la siguiente manera:
    dec --- dec
    flt --- flt
    int --- int
  19. En el panel de hoja de cálculo, expanda Propiedades y establezca:
    MessageType     |     'addev1n'
  20. Establezca el ESQL en el nodo Compute en:
    CALL CopyMessageHeaders();
            SET OutputRoot.MRM.dec = InputBody.dec * 10;
            SET OutputRoot.MRM.flt = InputBody.flt * 10;
            SET OutputRoot.MRM.int = InputBody.int * 10;
  21. En el nodo ResetContentDescriptor, establezca el Dominio de mensajes en XMLNS y seleccione el recuadro Restablecer dominio de mensaje.
  22. Cree tres mensajes de instancia con las cabeceras RFH2 adecuadas:
    <comp:addev1 xmlns:comp="http://www.complex.net">
    <bool>1</bool>
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00+00:00</dat>
    <dec>19.34</dec>
    <dur>P2Y4M</dur>
    <flt>3.245E+2</flt>
    <int>2104</int>
    <str>dat</str>
    </comp:addev1>
    <comp:addev1 xmlns:comp="http://www.complex.net">
    <bool>1</bool>
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00+00:00</dat>
    <dec>19.34</dec>
    <dur>P2Y4M</dur>
    <flt>3.245E+2</flt>
    <int>2104</int>
    <str>dur</str>
    </comp:addev1>
    <comp:addev1 xmlns:comp="http://www.complex.net">
    <bool>0</bool>
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00+00:00</dat>
    <dec>19.34</dec>
    <dur>P2Y4M</dur>
    <flt>3.245E+2</flt>
    <int>2104</int>
    <str>dat</str>
    </comp:addev1>
Resultados del paso 1: Se ha creado el conjunto de mensajes MAPPING3_COMPLEX_messages y se ha llenado con los mensajes addev1, addev1s y addev1n. Se ha creado el flujo de mensajes addev1 en el proyecto MAPPING3_COMPLEX_flows que contiene los archivos de correlación addev1_Mapping.msgmap y addev1._Mapping1.msgmap. Archivos que contienen mensajes de instancia para prueba.

Paso 2. Desplegar conjunto de mensajes y flujo de mensajes y ejecutar mensajes de instancia mediante el intermediario

  1. Cree un archivo bar, addev1.
  2. Añada el conjunto de mensajes MAPPING3_COMPLEX_messages y el flujo de mensajes addev1 al archivo bar.
  3. Despliegue el archivo bar en el intermediario.
  4. Coloque los documentos de instancia en la cola de entrada.
Resultados del paso 2: Los mensajes de salida deberían tener el formato:
<comp:addev1s xmlns:comp="http://www.complex.net">
<bin><![CDATA[010203]]></bin>
<dat>2005-08-06T00:00:00-01:00</dat>
<dur>P2Y4M</dur>
<str>dat</str>
</comp:addev1s>

Paso 3. Desarrollar flujo para correlacionar campos de destino desde otros muchos campos, desarrollar modelos de mensaje y documentos de instancia correspondientes

  1. En la definición de mensaje COMPLEX, en el espacio de nombres www.complex.net, cree un mensaje addev2 con la estructura:
    addev2
       firstname             (xsd:string) local element
       lastname              (xsd:string) local element
       branch                 (xsd:string) local element
       accountno            (xsd:string) local element
       balance                (xsd:decimal) local element
       transvalue             local complex element, base type xsd:decimal
          transdir             (xsd:string) local attribute
  2. En el conjunto de mensajes 'MAPPING3_COMPLEX_messages', cree un nuevo archivo de definición de mensajes COMP2 con espacio de nombres de destino www.comp2.net, prefijo c2.
  3. En la definición de mensaje COMP2, cree un mensaje addev2out con la estructura:
    addev2out
        accountdetails      (xsd:string) local element
        transvalue            (xsd:decimal) local element
        balance                (xsd:decimal) local element
  4. Cree un flujo de mensajes, addev2, que contenga: MQInput -> Mapping -> MQOutput.
  5. Abra la correlación y seleccione addev2 como el origen y addev2out como el destino.
  6. Enlace el origen con el destino de la siguiente manera:
    accountno --- accountdetails
    balance --- balance
    transvalue --- transvalue
  7. En el panel de hoja de cálculo, expanda Propiedades y establezca:
    MessageType   |     'addev2out'
  8. Establezca el destino accountdetails en fn:concat($source/comp:addev2/accountno, $source/comp:addev2/branch, $source/comp:addev2/lastname, $source/comp:addev2/firstname).
  9. Seleccione el transvalue de destino, pulse el botón derecho del ratón y seleccione Si en el menú.
  10. Cambie la condición fn:true() por $source/comp:addev2/transvalue/@transdir = 'DEBIT'.
  11. Seleccione transvalue y establezca su Valor en $source/comp:addev2/transvalue * (-1).
  12. Seleccione la condición, pulse el botón derecho del ratón y, en el menú, seleccione Si no.
  13. Seleccione el balance de destino, pulse el botón derecho del ratón y seleccione Si en el menú.
  14. Cambie la condición fn:true() por $source/comp:addev2/transvalue/@transdir = 'DEBIT'.
  15. Seleccione balance y establezca su Valor en $source/comp:addev2/balance - $source/comp:addev2/transvalue.
  16. Seleccione la condición, pulse el botón derecho del ratón y, en el menú, seleccione Condición.
  17. Cambie la condición fn:true() por $source/comp:addev2/transvalue/@transdir = 'CREDIT'.
  18. Seleccione balance después de la segunda condición y establezca su Valor en $source/comp:addev2/balance + $source/comp:addev2/transvalue.
  19. Cree dos mensajes de instancia con las cabeceras RFH2 adecuadas:
    <comp:addev2 xmlns:comp="http://www.complex.net">
    <firstname>Brian</firstname>
    <lastname>Benn</lastname>
    <branch>52-84-02</branch>
    <accountno>567432876543</accountno>
    <balance>1543.56</balance>
    <transvalue transdir="DEBIT">25.28</transvalue>
    </comp:addev2>
    <comp:addev2 xmlns:comp="http://www.complex.net">
    <firstname>Brian</firstname>
    <lastname>Benn</lastname>
    <branch>52-84-02</branch>
    <accountno>567432876543</accountno>
    <balance>1543.56</balance>
    <transvalue transdir="CREDIT">25.28</transvalue>
    </comp:addev2>
Resultados del paso 3: Se ha creado el mensaje addev2 en la definición de mensaje COMPLEX y se ha creado el mensaje addev2out en la definición de mensaje COMP2. Se ha creado el flujo de mensajes addev2, que contiene el archivo de correlación addev2_Mapping.msgmap. Archivos que contienen mensajes de instancia para prueba.

Paso 4. Desplegar conjunto de mensajes y flujo de mensajes y ejecutar mensajes de instancia mediante el intermediario

  1. Cree un archivo bar, addev2.
  2. Añada el conjunto de mensajes MAPPING3_COMPLEX_messages y el flujo de mensajes addev2 al archivo bar.
  3. Despliegue el archivo bar en el intermediario.
  4. Coloque los documentos de instancia en la cola de entrada.
Resultados del paso 4: Los mensajes de salida deberían tener el formato:
<c2:addev2out xmlns:c2="http://www.comp2.net"  xmlns:comp="http://www.complex.net">
<accountdetails>567432876543 52-84-02 Benn Brian</accountdetails>
<transvalue>-25.28</transvalue>
<balance>1518.28</balance>
</c2:addev2out>

Paso 5. Desarrollar flujo de mensajes y modelos de mensaje para correlacionar mensaje de repetición anidado complejo, desarrollar documentos de instancia correspondientes

  1. En la definición de mensaje COMPLEX, en el espacio de nombres 'www.complex.net', cree un mensaje 'addev3' con la estructura:
      addev3
       choice
          sstr                     (xsd:string) local element
          intrep                  (xsd:int) local element, minOcc=2, maxOcc=6
          dur                      (xsd:duration) local element
       choice
          comp1                local complex element
             dat1                 (xsd:date) local element
             sval                  (xsd:string) local element
          comp2                local complex element
             bool1               (xsd:boolean) local element
             dat2                 (xsd:date) local element
          comprep             local complex element, minOcc=1, maxOcc=4
             int1                  (xsd:int) local element
             dec1                (xsd:decimal) local element
       binel                       (xsd:hexBinary) local element
       lelem                      local complex element, base type xsd:string
          latt                      (xsd:int) local attribute
       lcomp                     local complex element
          head                    (xsd:string) local element
          incomp                local complex element
             count                (xsd:int) local element
             comp:gcompel   global complex element, minOcc=0, maxOcc=-1
                fstr                 (xsd:string) local element
                multel             local complex element
                   in1              (xsd:boolean) local element
                   in2              (xsd:string) local element
                   in3              (xsd:float) local element
          footer                  (xsd:string) local element
       repstr                      (xsd:string) local element, minOcc=1, maxOcc=-1
  2. Cree un flujo de mensajes, addev3, que contenga: MQInput > Mapping > MQOutput.
  3. Abra la correlación y seleccione addev3 como el origen y el destino.
  4. Correlacione cada elemento de origen con su elemento de destino correspondiente:
    sstr --- sstr
    intrep --- intrep
    dur --- dur
    dat1 --- dat1
    sval --- sval
    bool1 --- bool1
    dat2 --- dat2
    int1 --- int1
    dec1 --- dec1
    binel --- binel
    lelem --- lelem
    latt --- latt
    head --- head
    count --- count
    fstr --- fstr
    multel --- multel
    footer --- footer
    repstr --- repstr
  5. En el panel de hoja de cálculo, para la primera condición, cambie fn:true() por fn:exists($source/comp:addev3/sstr).
  6. Para la segunda condición, cambie fn:true() por fn:exists($source/comp:addev3/intrep).
  7. Para la tercera condición, cambie fn:true() por fn:exists($source/comp:addev3/dur)
  8. Para la primera condición de elección compleja, cambie fn:true() por fn:exists($source/comp:addev3/comp1).
  9. Para la segunda condición de elección compleja, cambie fn:true() por fn:exists($source/comp:addev3/comp2).
  10. Para la tercera condición de elección compleja, cambie fn:true() por fn:exists($source/comp:addev3/comprep).
  11. Cree los siguientes mensajes de instancia (con las cabeceras RFH2 adecuadas):
    1. <comp:addev3 xmlns:comp="http://www.complex.net">
      <sstr>first</sstr>
      <comp1>
      <dat1>2005-06-24</dat1>
      <sval>date value</sval>
      </comp1>
      <binel><![CDATA[3132333435]]></binel>
      <lelem latt="24">twenty four</lelem>
      <lcomp>
      <head>nesting start</head>
      <incomp>
      <count>3</count>
      <comp:gcompel>
      <fstr>first</fstr>
      <multel>
      <in1>1</in1>
      <in2>C</in2>
      <in3>2.45E+1</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>second</fstr>
      <multel>
      <in1>1</in1>
      <in2>D</in2>
      <in3>7.625E+3</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>third</fstr>
      <multel>
      <in1>0</in1>
      <in2>C</in2>
      <in3>4.9E+0</in3>
      </multel>
      </comp:gcompel>
      </incomp>
      <footer>nesting end</footer>
      </lcomp>
      <repstr>abc</repstr>
      <repstr>def</repstr>
      <repstr>ghi</repstr>
      <repstr>jkl</repstr>
      <repstr>mno</repstr>
      </comp:addev3>
    2. <comp:addev3 xmlns:comp="http://www.complex.net">
      <intrep>45</intrep>
      <intrep>12</intrep>
      <intrep>920</intrep>
      <comp2>
      <bool1>1</bool1>
      <dat2>2005-06-24</dat2>
      </comp2>
      <binel><![CDATA[3132333435]]></binel>
      <lelem latt="24">twenty four</lelem>
      <lcomp>
      <head>nesting start</head>
      <incomp>
      <count>5</count>
      <comp:gcompel>
      <fstr>first</fstr>
      <multel>
      <in1>1</in1>
      <in2>C</in2>
      <in3>2.45E+1</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>second</fstr>
      <multel>
      <in1>1</in1>
      <in2>D</in2>
      <in3>7.625E+3</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>third</fstr>
      <multel>
      <in1>0</in1>
      <in2>C</in2>
      <in3>4.9E+0</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>fourth</fstr>
      <multel>
      <in1>1</in1>
      <in2>F</in2>
      <in3>2.98E+1</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>fifth</fstr>
      <multel>
      <in1>0</in1>
      <in2>D</in2>
      <in3>8.57E-2</in3>
      </multel>
      </comp:gcompel>
      </incomp>
      <footer>nesting end</footer>
      </lcomp>
      <repstr>abc</repstr>
      </comp:addev3>
    3. <comp:addev3 xmlns:comp="http://www.complex.net">
      <dur>P2Y2M</dur>
      <comp3>
      <int1>6</int1>
      <dec1>2821.54</dec1>
      </comp3>
      <comp3>
      <int1>41</int1>
      <dec1>0.02</dec1>
      </comp3>
      <binel><![CDATA[3132333435]]></binel>
      <lelem latt="24">twenty four</lelem>
      <lcomp>
      <head>nesting start</head>
      <incomp>
      <count>0</count>
      </incomp>
      <footer>nesting end</footer>
      </lcomp>
      <repstr>abc</repstr>
      <repstr>def</repstr>
      <repstr>ghi</repstr>
      <repstr>jkl</repstr>
      <repstr>mno</repstr>
      <repstr>pqr</repstr>
      <repstr>stu</repstr>
      <repstr>vwx</repstr>
      </comp:addev3>
Resultados del paso 5: Se ha creado el mensaje addev3 en la definición de mensaje COMPLEX y se ha creado el flujo de mensajes addev3, que contiene el archivo de correlación addev3_Mapping.msgmap. Archivos que contienen mensajes de instancia para prueba.

Paso 6. Desplegar conjunto de mensajes y flujo de mensajes y ejecutar mensajes de instancia mediante el intermediario

  1. Cree un archivo bar, addev3.
  2. Añada el conjunto de mensajes MAPPING3_COMPLEX_messages y el flujo de mensajes addev3 al archivo bar.
  3. Despliegue el archivo bar en el intermediario.
  4. Coloque los documentos de instancia en la cola de entrada.
Resultados del paso 6: Los mensajes de salida deberían tener el formato:
<comp:addev3 xmlns:comp="http://www.complex.net">
<sstr>first</sstr>
<comp1>
<dat1>2005-06-24</dat1>
<sval>date value</sval>
</comp1>
<binel><![CDATA[3132333435]]></binel>
<lelem latt="24">twenty four</lelem>
<lcomp>
<head>nesting start</head>
<incomp>
<count>3</count>
<comp:gcompel>
<fstr>first</fstr>
<multel>
<in1>1</in1>
<in2>C</in2>
<in3>2.45E+1</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>second</fstr>
<multel>
<in1>1</in1>
<in2>D</in2>
<in3>7.625E+3</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>third</fstr>
<multel>
<in1>0</in1>
<in2>C</in2>
<in3>4.9E+0</in3>
</multel>
</comp:gcompel>
</incomp>
<footer>nesting end</footer>
</lcomp>
<repstr>abc</repstr>
<repstr>def</repstr>
<repstr>ghi</repstr>
<repstr>jkl</repstr>
<repstr>mno</repstr>
</comp:addev3>
<comp:addev3 xmlns:comp="http://www.complex.net">
<intrep>45</intrep>
<intrep>12</intrep>
<intrep>920</intrep>
<comp2>
<bool1>1</bool1>
<dat2>2005-06-24</dat2>
</comp2>
<binel><![CDATA[3132333435]]></binel>
<lelem latt="24">twenty four</lelem>
<lcomp>
<head>nesting start</head>
<incomp>
<count>5</count>
<comp:gcompel>
<fstr>first</fstr>
<multel>
<in1>1</in1>
<in2>C</in2>
<in3>2.45E+1</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>second</fstr>
<multel>
<in1>1</in1>
<in2>D</in2>
<in3>7.625E+3</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>third</fstr>
<multel>
<in1>0</in1>
<in2>C</in2>
<in3>4.9E+0</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>fourth</fstr>
<multel>
<in1>1</in1>
<in2>F</in2>
<in3>2.98E+1</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>fifth</fstr>
<multel>
<in1>0</in1>
<in2>D</in2>
<in3>8.57E-2</in3>
</multel>
</comp:gcompel>
</incomp>
<footer>nesting end</footer>
</lcomp>
<repstr>abc</repstr>
</comp:addev3>
<comp:addev3 xmlns:comp="http://www.complex.net">
<dur>P2Y2M</dur>
<comp3>
<int1>6</int1>
<dec1>2821.54</dec1>
</comp3>
<comp3>
<int1>41</int1>
<dec1>0.02</dec1>
</comp3>
<binel><![CDATA[3132333435]]></binel>
<lelem latt="24">twenty four</lelem>
<lcomp>
<head>nesting start</head>
<incomp>
<count>0</count>
</incomp>
<footer>nesting end</footer>
</lcomp>
<repstr>abc</repstr>
<repstr>def</repstr>
<repstr>ghi</repstr>
<repstr>jkl</repstr>
<repstr>mno</repstr>
<repstr>pqr</repstr>
<repstr>stu</repstr>
<repstr>vwx</repstr>
</comp:addev3>

Paso 7. Desarrollar flujo de mensajes para llenar un destino desde una base de datos, desarrollar modelo de mensaje y documentos de instancia correspondientes

  1. Cree una base de datos, por ejemplo MAPDB, y cree una tabla TRANSACTION con las columnas:
    ACCOUNT        VARCHAR(12)
    TDATE                DATE
    VALUE               DECIMAL(8,2)
  2. Llene la base de datos con los valores:
    '12345678901', '2005-04-25', -14.25
    '12345678901', '2005-04-25', 100.00
    '12345678901','2005-05-15', 2891.30
    '12345678901','2005-06-11', -215.28
  3. Cree un Nombre de origen de datos ODBC de Windows para la base de datos y luego registre la base de datos con el gestor de configuración (pulse Archivo >Nuevo >Archivos de definición RDB).
  4. En la definición de mensaje COMPLEX, en el espacio de nombres www.complex.net, cree un mensaje addev4in con la estructura:
    addev4in
       account             (xsd:string) local element
       tdate                 (xsd:date) local element
  5. En la definición de mensaje COMP2, en el espacio de nombres www.comp2.net, cree un mensaje addev4out con la estructura:
    addev4out
       account             (xsd:string) local element
       tdate                 (xsd:date) local element
       value                 (xsd:decimal) local element, minOcc=0, maxOcc=-1
  6. Cree un flujo de mensajes, addev4, que contenga: MQInput > Mapping > MQOutput.
  7. Abra la correlación y seleccione addev4in como el origen y addev4out como el destino.
  8. Correlacione la entrada con las salidas como se indica a continuación:
    account --- account
    tdate --- tdate
  9. En la hoja de cálculo, seleccione el valor de destino, pulse el botón derecho del ratón y elija Seleccionar origen de datos en el menú, seleccione MAPDB en el diálogo y pulse Finalizar.
  10. En el panel superior, expanda el árbol MAPDB y enlace:VALUE --- value.
  11. En el panel de hoja de cálculo, seleccione el destino $db:select y cambie fn:true() por: $db:select.MAPDB.SCHEMA.TRANSACTION.ACCOUNT=$source/comp:addev4in/account y $db:select.MAPDB.SCHEMA.TRANSACTION.TDATE=$source/comp:addev4in/tdate
  12. Expanda el árbol Propiedades y establezca:MessageType | 'addev4out'
  13. Establezca la propiedad Origen de datos para el nodo de correlación en MAPDB.
  14. Cree los siguientes mensajes de instancia (con las cabeceras RFH2 adecuadas):
    <comp:addev4in xmlns:comp="http://www.complex.net">
    <account>12345678901</account>
    <tdate>2005-05-15</tdate>
    </comp:addev4in>
    <comp:addev4in xmlns:comp="http://www.complex.net">
    <account>12345678901</account>
    <tdate>2005-04-25</tdate>
    </comp:addev4in>
Resultados del paso 7: Se ha creado el mensaje addev4in en la definición de mensaje COMPLEX y se ha creado el mensaje addev4out en la definición de mensaje COMP. Se ha creado el flujo de mensajes addev4, que contiene el archivo de correlación addev4_Mapping.msgmap. Archivos que contienen mensajes de instancia.

Paso 8. Desplegar conjunto de mensajes y flujo de mensajes y ejecutar mensajes de instancia mediante el intermediario

  1. Cree un archivo bar, addev4.
  2. Añada el conjunto de mensajes MAPPING3_COMPLEX_messages y el flujo de mensajes addev4 al archivo bar.
  3. Despliegue el archivo bar en el intermediario.
  4. Coloque los documentos de instancia en la cola de entrada.
Resultados del paso 8: Los mensajes de salida deberían tener el formato:
<c2:addev4out xmlns:c2="http://www.comp2.net" xmlns:comp="http://www.complex.net" >
<account>12345678901</account>
<tdate>2005-05-15</tdate>
<value>2891.3</value>
</c2:addev4out>

Paso 9. Desarrollar un flujo utilizando una función ESQL definida por el usuario, desarrollar los modelos de mensaje y los documentos de instancia correspondientes

  1. En la definición de mensaje COMPLEX, en el espacio de nombres www.complex.net, cree los mensajes addev5in y addev5out con las estructuras:
    addev5in
       value1                    (xsd:decimal) local element
       operator                 (xsd:string) local element
       value2                    (xsd:decimal) local element
       rate                        (xsd:decimal) local element
    addev5out
       grossvalue               (xsd:decimal) local element
       netvalue                   (xsd:decimal) local element
  2. Cree un flujo de mensajes, addev5, que contenga: MQInput > Mapping > MQOutput.
  3. Abra la correlación y seleccione addev5in como el origen y addev5out como el destino.
  4. En el proyecto MAPPING3_COMPLEX_flows, cree un archivo ESQL llamado addev5 y coloque estas funciones en dicho archivo:
    CREATE FUNCTION calcGrossvalue(IN value1 DECIMAL, IN operator CHAR,
                                                                                          IN value2 DECIMAL) RETURNS DECIMAL
              BEGIN
                  DECLARE outval DECIMAL;
                  CASE operator
                  WHEN 'PLUS' THEN
                      SET outval = value1 + value2;
                  WHEN 'MINUS' THEN
                      SET outval = value1 - value2;
                  WHEN 'MULTIPLY' THEN
                      SET outval = value1 * value2;
                  WHEN 'DIVIDE' THEN
                      SET outval = value1 / value2;
                  ELSE
                      THROW USER EXCEPTION MESSAGE 2949 VALUES('Invalid Operator', operator);
                      SET outval = -999999;
                  END CASE;
                RETURN outval;
              END;
    CREATE FUNCTION calcNetvalue(IN value1 DECIMAL, IN operator CHAR, IN value2 DECIMAL,
                                                                                     IN rate DECIMAL) RETURNS DECIMAL
        BEGIN
            DECLARE grossvalue DECIMAL;
            SET grossvalue=calcGrossvalue(value1, operator, value2);
            RETURN (grossvalue * rate );
        END;
  5. En el panel de hoja de cálculo del Editor de correlaciones de mensajes, expanda el mensaje y seleccione grossvalue.
  6. En el panel de expresión, escriba: sql:calcGrossvalue($source/comp:addev5in/value1, $source/comp:addev5in/operator, $source/comp:addev5in/value2).
  7. Seleccione el netvalue de destino y, en el panel de expresión, escriba: esql:calcNetvalue($source/comp:addev5in/value1, $source/comp:addev5in/operator, $source/comp:addev5in/value2, $source/comp:addev5in/rate).
  8. Expanda el árbol Propiedades y establezca:MessageType | 'addev5out'.
  9. Cree los siguientes mensajes de instancia (con las cabeceras RFH2 adecuadas):
    1. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>125.32</value1>
      <operator>PLUS</operator>
      <value2>25.86</value2>
      <rate>0.60</rate>
      </comp:addev5in>
    2. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>118.00</value1>
      <operator>MINUS</operator>
      <value2>245.01</value2>
      <rate>0.30</rate>
      </comp:addev5in>
    3. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>254.02</value1>
      <operator>MULTIPLY</operator>
      <value2>3.21</value2>
      <rate>0.75</rate>
      </comp:addev5in>
    4. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>1456.33</value1>
      <operator>DIVIDE</operator>
      <value2>18.58</value2>
      <rate>0.92</rate>
      </comp:addev5in>
    5. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>254.02</value1>
      <operator>MOD</operator>
      <value2>3.21</value2>
      <rate>0.75</rate>
      </comp:addev5in>
Resultados del paso 9: Se han creado los mensajes addev5in y addev5out en la definición de mensaje COMPLEX. Se ha creado el flujo de mensajes addev5, que contiene el archivo de correlación addev5_Mapping.msgmap y el archivo ESQL addev5.esql. Archivos que contienen mensajes de instancia.

Paso 10. Desplegar conjunto de mensajes y flujo de mensajes y ejecutar mensajes de instancia mediante el intermediario

  1. Cree un archivo bar, addev5.
  2. Añada el conjunto de mensajes 'MAPPING3_COMPLEX_messages' y el flujo de mensajes 'addev5' al archivo bar.
  3. Despliegue el archivo bar en el intermediario.
  4. Coloque los documentos de instancia en la cola de entrada.
Resultados del paso 10: Los mensajes de salida deberían tener el formato:
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>151.18</grossvalue>
<netvalue>90.708</netvalue>
</comp:addev5out>
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>-127.01</grossvalue>
<netvalue>-38.103</netvalue>
</comp:addev5out>
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>815.4042</grossvalue>
<netvalue>611.55315</netvalue>
</comp:addev5out>
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>78.38159311087190527448869752421959</grossvalue>
<netvalue>72.11106566200215285252960172228202</netvalue>
</comp:addev5out>
Ninguna salida de mensaje, pero el registro de sucesos debería contener una entrada:
BIP2949 ( BRK.default ) Se ha emitido una excepción ESQL generada por el usuario. La información adicional proporcionada con esta excepción es: ''Invalid Operator'' ''MOD'' 'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11' 
Esta excepción ha sido emitida por una sentencia THROW EXCEPTION. Este es el comportamiento normal de la sentencia THROW. Puesto que se trata de una excepción generada por el usuario, la acción del usuario la determina el flujo de mensajes y el tipo de excepción generada.

Paso 11. Desarrollar un flujo utilizando un procedimiento Java definido por el usuario, desarrollar los modelos de mensaje y los documentos de instancia correspondientes

  1. En la definición de mensaje COMPLEX, en el espacio de nombres www.complex.net, cree los mensajes addev6in y addev6out con las estructuras:
    addev6in
        hexdata                (xsd:hexBinary) local element
    addev6out
        decval                  (xsd:decimal) local element
        fltval                     (xsd:float) local element
        intval                    (xsd:int) local element
  2. Cree un flujo de mensajes, addev6, que contenga: MQInput > Mapping > MQOutput.
  3. Abra la correlación y seleccione addev6in como el origen y addev6out como el destino.
  4. En el proyecto MAPPING3_COMPLEX_flows, cree un archivo ESQL llamado addev6 y coloque estas funciones en dicho archivo:
    CREATE PROCEDURE decFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.decFromBinary";
    CREATE PROCEDURE fltFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.fltFromBinary";
    CREATE PROCEDURE intFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.intFromBinary";
  5. Cree un archivo fuente Java, addev6.java, con el contenido siguiente:
    import java.lang.*;
    import java.math.*;
    
    public class addev6 {
        //
        // Devolver elemento decimal de serie binaria
        //
        public static BigDecimal decFromBinary( byte[] hexval) {
        // Buscar elemento llamado decval
        String search = "decval";
        String snval = findElement(hexval ,search );
        // Convertir el valor a tipo decimal
        BigDecimal numval = new BigDecimal(snval);
        return numval;
        }
        //
        // Devolver elemento flotante de serie binaria
        //
        public static Double fltFromBinary( byte[] hexval) {
        // Buscar elemento llamado fltval
        String search = "fltval";
        String snval = findElement(hexval ,search );
        // Convertir el valor a tipo flotante
        Double numval = new Double(snval);
        return numval;
        }
        //
        // Devolver elemento entero de serie binaria
        //
        public static Long intFromBinary( byte[] hexval) {
        // Buscar elemento llamado intval
        String search = "intval";
        String snval = findElement(hexval ,search );
        // Convertir el valor a tipo entero
        Long numval = new Long(snval);
        return numval;
        }
        //
        // Localizar el elemento especificado y su valor en los datos binarios
        //
        private static String findElement( byte[] hexval, String search ) {
        // Convertir bytes en serie
        String hexstr = new String(hexval);
        // Parejas etiqueta/valor de longitud fija (longitud=14)
        int nvals = hexstr.length() / 14;
        String numval = "";
        String[] label = new String[nvals];
        String[] value = new String[nvals];
        // Ejecutar bucle por varias parejas etiqueta/valor
        for ( int i=0; i < nvals; i ++ ) {
            // obtener posición inicial
            int st = i * 14;
            // la etiqueta es longitud 6
            int endl = st + 6;
            // el valor es longitud 8
            int endv = endl + 8;
            // extraer etiqueta y valor de la serie
            label[i] = hexstr.substring( st, endl);
            value[i] = hexstr.substring( (endl+1), endv);
            // Comprobar si la pareja actual tiene la etiqueta solicitada
            if ( label[i].compareTo( search) == 0 ) {
            // ajustar relleno del valor
            numval = value[i].trim();
            }
        }
        return numval;
        }
    }
  6. Compile el código java y añada la ubicación del archivo de clase a la classpath del sistema (es posible que tenga que reiniciar Windows si edita la variable CLASSPATH).
  7. En el panel de hoja de cálculo del Editor de correlaciones de mensajes, expanda el mensaje de destino y establezca el decval de destino en el Valor: esql:decFromBinary($source/comp:addev6in/bval).
  8. Establezca el fltval de destino en: esql:fltFromBinary($source/comp:addev6in/bval).
  9. Establezca el intval de destino en: esql:intFromBinary($source/comp:addev6in/bval).
  10. Expanda el destino Propiedades y establezca:MessageType | 'addev6out
  11. Cree el siguiente mensaje de instancia (con las cabeceras RFH2 adecuadas):
    <comp:addev6in xmlns:comp="http://www.complex.net">
    <bval>
    <![CDATA[64656376616c20202031342e3238666c7476616c2020312e34452b32696e7476616c2020202020313230]]>
    </bval>
    </comp:addev6in>
Resultados del paso 11: Se han creado los mensajes addev6in y addev6out en la definición de mensaje COMPLEX. Se ha creado el flujo de mensajes addev6, que contiene el archivo de correlación addev6_Mapping.msgmap y el archivo ESQL addev6.esql. El archivo fuente Java addev6.java y el archivo de clase compilado addev6.class en un lugar donde la variable CLASSPATH del sistema lo encuentre. Archivos que contienen mensajes de instancia.

Paso 12. Desplegar conjunto de mensajes y flujo de mensajes y ejecutar mensajes de instancia mediante el intermediario

  1. Cree un archivo bar, addev6.
  2. Añada el conjunto de mensajes 'MAPPING3_COMPLEX_messages' y el flujo de mensajes addev6 al archivo bar.
  3. Despliegue el archivo bar en el intermediario.
  4. Coloque los documentos de instancia en la cola de entrada.
Resultados del paso 12: Los mensajes de salida deberían tener el formato:
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>

Resumen de los pasos 1 al 12

  1. Se ha creado el conjunto de mensajes MAPPING3_COMPLEX_messages y se ha llenado con los mensajes addev1, addev1s y addev1n. Se ha creado el flujo de mensajes addev1 en el proyecto MAPPING3_COMPLEX_flows que contiene los archivos de correlación addev1_Mapping.msgmap y addev1._Mapping1.msgmap. Archivos que contienen mensajes de instancia para prueba.
  2. Los mensajes de salida deberían tener el formato:
    <comp:addev1s xmlns:comp="http://www.complex.net">
    <bin><![CDATA[010203]]></bin>
    <dat>2005-08-06T00:00:00-01:00</dat>
    <dur>P2Y4M</dur>
    <str>dat</str>
    </comp:addev1s>
    lt;comp:addev1s xmlns:comp="http://www.complex.net">
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00-01:00</dat>
    <dur>P3Y4M</dur>
    <str>dur</str>
    </comp:addev1s>
    &<comp:addev1n xmlns:comp="http://www.complex.net">
    <dec>193.4</dec>
    <flt>3.245E+3</flt>
    <int>21040</int>
    </comp:addev1n>
  3. Se ha creado el mensaje addev2 en la definición de mensaje COMPLEX y se ha creado el mensaje addev2out en la definición de mensaje COMP2. Se ha creado el flujo de mensajes addev2, que contiene el archivo de correlación addev2_Mapping.msgmap. Archivos que contienen mensajes de instancia para prueba.
  4. Los mensajes de salida deberían tener el formato:
    <c2:addev2out xmlns:c2="http://www.comp2.net"  xmlns:comp="http://www.complex.net">
    <accountdetails>567432876543 52-84-02 Benn Brian</accountdetails>
    <transvalue>-25.28</transvalue>
    <balance>1518.28</balance>
    </c2:addev2out>
    <c2:addev2out xmlns:c2="http://www.comp2.net" xmlns:comp="http://www.complex.net">
    <accountdetails>567432876543 52-84-02 Benn Brian</accountdetails>
    <transvalue>25.28</transvalue>
    <balance>1568.84</balance>
    </c2:addev2out>
  5. Se ha creado el mensaje addev3 en la definición de mensaje COMPLEX y se ha creado el flujo de mensajes addev3, que contiene el archivo de correlación addev3_Mapping.msgmap. Archivos que contienen mensajes de instancia para prueba.
  6. Los mensajes de salida deberían tener el formato:
    <comp:addev3 xmlns:comp="http://www.complex.net">
    <sstr>first</sstr>
    <comp1>
    <dat1>2005-06-24</dat1>
    <sval>date value</sval>
    </comp1>
    <binel><![CDATA[3132333435]]></binel>
    <lelem latt="24">twenty four</lelem>
    <lcomp>
    <head>nesting start</head>
    <incomp>
    <count>3</count>
    <comp:gcompel>
    <fstr>first</fstr>
    <multel>
    <in1>1</in1>
    <in2>C</in2>
    <in3>2.45E+1</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>second</fstr>
    <multel>
    <in1>1</in1>
    <in2>D</in2>
    <in3>7.625E+3</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>third</fstr>
    <multel>
    <in1>0</in1>
    <in2>C</in2>
    <in3>4.9E+0</in3>
    </multel>
    </comp:gcompel>
    </incomp>
    <footer>nesting end</footer>
    </lcomp>
    <repstr>abc</repstr>
    <repstr>def</repstr>
    <repstr>ghi</repstr>
    <repstr>jkl</repstr>
    <repstr>mno</repstr>
    </comp:addev3>
    <comp:addev3 xmlns:comp="http://www.complex.net">
    <intrep>45</intrep>
    <intrep>12</intrep>
    <intrep>920</intrep>
    <comp2>
    <bool1>1</bool1>
    <dat2>2005-06-24</dat2>
    </comp2>
    <binel><![CDATA[3132333435]]></binel>
    <lelem latt="24">twenty four</lelem>
    <lcomp>
    <head>nesting start</head>
    <incomp>
    <count>5</count>
    <comp:gcompel>
    <fstr>first</fstr>
    <multel>
    <in1>1</in1>
    <in2>C</in2>
    <in3>2.45E+1</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>second</fstr>
    <multel>
    <in1>1</in1>
    <in2>D</in2>
    <in3>7.625E+3</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>third</fstr>
    <multel>
    <in1>0</in1>
    <in2>C</in2>
    <in3>4.9E+0</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>fourth</fstr>
    <multel>
    <in1>1</in1>
    <in2>F</in2>
    <in3>2.98E+1</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>fifth</fstr>
    <multel>
    <in1>0</in1>
    <in2>D</in2>
    <in3>8.57E-2</in3>
    </multel>
    </comp:gcompel>
    </incomp>
    <footer>nesting end</footer>
    </lcomp>
    <repstr>abc</repstr>
    </comp:addev3>
    <comp:addev3 xmlns:comp="http://www.complex.net">
    <dur>P2Y2M</dur>
    <comp3>
    <int1>6</int1>
    <dec1>2821.54</dec1>
    </comp3>
    <comp3>
    <int1>41</int1>
    <dec1>0.02</dec1>
    </comp3>
    <binel><![CDATA[3132333435]]></binel>
    <lelem latt="24">twenty four</lelem>
    <lcomp>
    <head>nesting start</head>
    <incomp>
    <count>0</count>
    </incomp>
    <footer>nesting end</footer>
    </lcomp>
    <repstr>abc</repstr>
    <repstr>def</repstr>
    <repstr>ghi</repstr>
    <repstr>jkl</repstr>
    <repstr>mno</repstr>
    <repstr>pqr</repstr>
    <repstr>stu</repstr>
    <repstr>vwx</repstr>
    </comp:addev3>
  7. Se ha creado el mensaje addev4in en la definición de mensaje COMPLEX y se ha creado el mensaje addev4out en la definición de mensaje COMP. Se ha creado el flujo de mensajes addev4, que contiene el archivo de correlación addev4_Mapping.msgmap. Archivos que contienen mensajes de instancia.
  8. Los mensajes de salida deberían tener el formato:
    <c2:addev4out xmlns:c2="http://www.comp2.net" xmlns:comp="http://www.complex.net" >
    <account>12345678901</account>
    <tdate>2005-05-15</tdate>
    <value>2891.3</value>
    </c2:addev4out>
    <c2:addev4out xmlns:c2="http://www.comp2.net" xmlns:comp="http://www.complex.net" >
    <account>12345678901</account>
    <tdate>2005-04-25</tdate>
    <value>-14.25</value>
    <value>100</value>
    </c2:addev4out>
  9. Se han creado los mensajes addev5in y addev5out en la definición de mensaje COMPLEX. Se ha creado el flujo de mensajes addev5, que contiene el archivo de correlación addev5_Mapping.msgmap y el archivo ESQL addev5.esql. Archivos que contienen mensajes de instancia.
  10. Los mensajes de salida deberían tener el formato:
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>151.18</grossvalue>
    <netvalue>90.708</netvalue>
    </comp:addev5out>
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>-127.01</grossvalue>
    <netvalue>-38.103</netvalue>
    </comp:addev5out>
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>815.4042</grossvalue>
    <netvalue>611.55315</netvalue>
    </comp:addev5out>
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>78.38159311087190527448869752421959</grossvalue>
    <netvalue>72.11106566200215285252960172228202</netvalue>
    </comp:addev5out>
    Ninguna salida de mensaje, pero el registro de sucesos debería contener una entrada:
    BIP2949 ( BRK.default ) Se ha emitido una excepción ESQL generada por el usuario. La información adicional proporcionada con esta excepción es: ''Invalid Operator'' ''MOD'' 'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11' 
    Esta excepción ha sido emitida por una sentencia THROW EXCEPTION. Este es el comportamiento normal de la sentencia THROW. Puesto que se trata de una excepción generada por el usuario, la acción del usuario la determina el flujo de mensajes y el tipo de excepción generada.
  11. Se han creado los mensajes addev6in y addev6out en la definición de mensaje COMPLEX. Se ha creado el flujo de mensajes addev6, que contiene el archivo de correlación addev6_Mapping.msgmap y el archivo ESQL addev6.esql. El archivo fuente Java addev6.java y el archivo de clase compilado addev6.class en un lugar donde la variable CLASSPATH del sistema lo encuentre. Archivos que contienen mensajes de instancia.
  12. El mensaje de salida debería tener el formato:
    <comp:addev6out xmlns:comp="http://www.complex.net">
    <decval>14.28</decval>
    <fltval>1.4E+2</fltval>
    <intval>120</intval>
    </comp:addev6out>
Tareas relacionadas
Ejemplo: Creación, configuración y despliegue de una correlación de mensajes
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2005 Última actualización: 11/11/2005
ar25251_