Aperfeiçoamento de Mensagens Complexas

Visão Geral

Os nomes e valores utilizados para fluxos de mensagens, conjuntos de mensagens, elementos e atributos e as expressões e amostras de códigos servem apenas para fins ilustrativos.
Este cenário utiliza a manipulação de mensagens complexas e requer as seguintes funções de mapeamento:
  • Entrada MRM, saída MRM (espaço de nomes)
  • Outros nós requeridos para concluir a mensagem
  • Mapeamento condicional
  • Mapeamento CASE (ambos os formatos de sintaxe)
  • Condição If/
  • Combinação de vários campos de origem em um único campo de destino (entre espaços de nomes)
  • Elementos complexos e simples de repetição aninhados
  • Dados de destino derivados do banco de dados
  • Funções de cadeia, numéricas, data/hora
  • Procedimentos e funções ESQL definidos pelo usuário
  • Rotinas Java definidas pelo usuário

Utilize as ferramentas do Message Broker para criar fluxos de mensagens e conjuntos de mensagens e para criar e implementar arquivos bar (broker archive). Também é necessário criar um gerenciador de configuração e um intermediário. Nas ferramentas Message Broker, crie uma conexão de domínio com o gerenciador de configuração e crie um intermediário no domínio. Também é requerido um método para entrada de mensagens da instância que podem (opcionalmente) conter cabeçalhos MQRFH2, por exemplo, argoput, rfhutil.

Etapa 1. Desenvolver Fluxo Contendo Outros Nós (Por exemplo, Filter) e Utilizar Mapeamentos com Condições, Desenvolver Modelos de Mensagem Correspondentes (Utilizando Todos os Tipos de Dados Principais) e Mensagens da Instância

  1. Na perspectiva Desenvolvimento de Aplicativos, crie um projeto do conjunto de mensagens e um conjunto de mensagens MAPPING3_COMPLEX_messages (espaço de nomes ativado com o formato de ligação XML) e um arquivo de definição de mensagem COMPLEX com espaço de nomes de destino www.complex.net, prefixo comp.
  2. Crie mensagens addev1, addev1s e addev1n com as estruturas:
    addev1
       bool      (xsd:boolean) elemento local
       bin        (xsd:hexBinary) elemento local
       dat        (xsd:dateTime) elemento local
       dec       (xsd:decimal) elemento local
       dur        (xsd:duration) elemento local
       flt          (xsd:float) elemento local
       int         (xsd:int) elemento local
       str         (xsd:string) elemento local 
    addev1s
       bin        (xsd:hexBinary) elemento local
       dat        (xsd:dateTime) elemento local
       dur        (xsd:duration) elemento local
       str         (xsd:string) elemento local 
    addev1n
       dec       (xsd:decimal) elemento local
       flt          (xsd:float) elemento local
       int         (xsd:int) elemento local
  3. Crie o projeto do Fluxo de mensagens MAPPING3_COMPLEX_flows.
  4. Crie um fluxo de mensagens, addev1, contendo:
    MQInput ->Filter -> Mapping -> Compute
                         \                       \ --> RCD -> MQOutput
                          \-> Mapping1-----------/ 
  5. No nó Filter, configure o seguinte ESQL:
    IF Body.bool THEN
                RETURN TRUE;
            ELSE
                RETURN FALSE;
            END IF;
  6. No nó de mapeamento conectado ao terminal Filter verdadeiro (Mapping1), abra o mapa e selecione addev1 como a origem e addev1s como o destino.
  7. Ligue a origem ao destino da seguinte forma:
    bin --- bin
    dat --- dat
    dur --- dur
    str --- str
  8. Na área de janela da planilha, expanda Propriedades e configure:
    MessageType   |     'addev1s'
  9. Selecione o destino dat, clique com o botão direito do mouse e, no menu, selecione If.
  10. Substitua a condição fn:true() por $source/comp:addev1/str = 'dat'.
  11. Configure o valor para dat como $source/comp:addev1/dat + xs:duration("P3M").
  12. Selecione a condição, clique com o botão direito do mouse e, no menu, selecione Else.
  13. Selecione o destino dur, clique com o botão direito do mouse e, no menu, selecione If.
  14. Substitua a condição fn:true() por $source/comp:addev1/str = 'dur'.
  15. Configure o valor para dur como $source/comp:addev1/dur + xs:duration("P1Y").
  16. Selecione a condição, clique com o botão direito do mouse e, no menu, selecione Else.
  17. Abra o mapa para o nó conectado ao terminal falso do nó Filter (Mapping) e selecione addev1 como a origem e addev1n como o destino.
  18. Ligue a origem ao destino da seguinte forma:
    dec --- dec
    flt --- flt
    int --- int
  19. Na área de janela da planilha, expanda Propriedades e configure:
    MessageType     |     'addev1n'
  20. Configure o ESQL no nó Compute para:
    CALL CopyMessageHeaders();
            SET OutputRoot.MRM.dec = InputBody.dec * 10;
            SET OutputRoot.MRM.flt = InputBody.flt * 10;
            SET OutputRoot.MRM.int = InputBody.int * 10;
  21. No nó ResetContentDescriptor, configure o Domínio de Mensagem como XMLNS e marque a caixa Reconfigurar Domínio de Mensagem.
  22. Crie três mensagens de instância com os cabeçalhos RFH2 apropriados:
    <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 da Etapa 1: Conjunto de mensagens MAPPING3_COMPLEX_messages criado e ocupado com as mensagens addev1, addev1s e addev1n. Fluxo de mensagens addev1 criado no projeto MAPPING3_COMPLEX_flows contendo os arquivos de mapeamento addev1_Mapping.msgmap e addev1._Mapping1.msgmap. Arquivos contendo mensagens da instância para teste.

Etapa 2. Implementar o Conjunto de Mensagens e o Fluxo e Executar Mensagens da Instância por Meio do Intermediário

  1. Crie um arquivo bar, addev1.
  2. Inclua o conjunto de mensagens MAPPING3_COMPLEX_messages e o fluxo de mensagens addev1 no arquivo bar.
  3. Implemente o arquivo bar no intermediário.
  4. Coloque os documentos da instância na fila de entrada.
Resultados da etapa 2: As mensagens de saída devem estar no 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>

Etapa 3. Desenvolver Fluxo para Mapear Campos de Destino a partir de Vários Outros Campos, Desenvolver Modelos de Mensagem e Documentos da Instância Correspondentes

  1. Na definição de mensagem COMPLEX, no espaço de nomes www.complex.net, crie uma mensagem addev2 com a estrutura:
    addev2
       firstname             (xsd:string) elemento local
       lastname              (xsd:string) elemento local
       branch                 (xsd:string) elemento local
       accountno            (xsd:string) elemento local
       balance                (xsd:decimal) elemento local
       transvalue             elemento complexo local, tipo base xsd:decimal
          transdir             (xsd:string) atributo local
  2. No conjunto de mensagens 'MAPPING3_COMPLEX_messages', crie um novo arquivo de definição de mensagem COMP2 com o espaço de nomes de destino www.comp2.net, prefixo c2.
  3. Na definição de mensagem COMP2, crie uma mensagem addev2out com a estrutura:
    addev2out
        accountdetails      (xsd:string) elemento local
        transvalue            (xsd:decimal) elemento local
        balance                (xsd:decimal) elemento local
  4. Crie um fluxo de mensagens, addev2, contendo: MQInput -> Mapping -> MQOutput.
  5. Abra o mapa e selecione 'addev2 como a origem e addev2out como o destino.
  6. Ligue a origem ao destino da seguinte forma:
    accountno --- accountdetails
    balance --- balance
    transvalue --- transvalue
  7. Na área de janela da planilha, expanda Propriedades e configure:
    MessageType   |     'addev2out'
  8. Configure o destino accountdetails como fn:concat($source/comp:addev2/accountno, $source/comp:addev2/branch, $source/comp:addev2/lastname, $source/comp:addev2/firstname).
  9. Selecione o destino transvalue, clique com o botão direito do mouse e selecione If no menu.
  10. Altere a condição de fn:true() para $source/comp:addev2/transvalue/@transdir = 'DEBIT'.
  11. Selecione transvalue e configure seu Valor como $source/comp:addev2/transvalue * (-1).
  12. Selecione a condição, clique com o botão direito do mouse e, no menu, selecione Else.
  13. Selecione o destino balance, clique com o botão direito do mouse e selecione If no menu.
  14. Altere a condição de fn:true() para $source/comp:addev2/transvalue/@transdir = 'DEBIT'.
  15. Selecione balance e configure seu Valor como $source/comp:addev2/balance - $source/comp:addev2/transvalue.
  16. Selecione a condição, clique com o botão direito do mouse e, no menu, selecione Condição.
  17. Altere a condição de fn:true() para $source/comp:addev2/transvalue/@transdir = 'CREDIT'.
  18. Selecione balance após a segunda condição e configure seu Valor como $source/comp:addev2/balance + $source/comp:addev2/transvalue.
  19. Crie duas mensagens de instância com os cabeçalhos RFH2 apropriados:
    <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 da etapa 3: Mensagem addev2 criada na definição de mensagem COMPLEX e mensagem addev2out criada na definição de mensagem COMP2. Fluxo de mensagens addev2 criado contendo o arquivo de mapeamento addev2_Mapping.msgmap. Arquivos contendo mensagens da instância para teste.

Etapa 4. Implementar o Conjunto de Mensagens e o Fluxo e Executar Mensagens da Instância por Meio do Intermediário

  1. Crie um arquivo bar, addev2.
  2. Inclua o conjunto de mensagens MAPPING3_COMPLEX_messages e o fluxo de mensagens addev2 no arquivo bar.
  3. Implemente o arquivo bar no intermediário.
  4. Coloque os documentos da instância na fila de entrada.
Resultados da etapa 4: As mensagens de saída devem estar no 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>

Etapa 5. Desenvolver o Fluxo e Modelos de Mensagem para Mapear Mensagem de Repetição Complexa Aninhada, Desenvolver Documentos da Instância Correspondentes

  1. Na definição de mensagem COMPLEX, no espaço de nomes 'www.complex.net', crie uma mensagem 'addev3' com a estrutura:
      addev3
       opção
          sstr                     (xsd:string) elemento local
          intrep                  (xsd:int) elemento local, minOcc=2, maxOcc=6
          dur        (xsd:duration) elemento local
       opção
          comp1                elemento complexo local
             dat1                 (xsd:date) elemento local
             sval                  (xsd:string) elemento local
          comp2                elemento complexo local
             bool1               (xsd:boolean) elemento local
             dat2                 (xsd:date) elemento local
          comprep             elemento complexo local, minOcc=1, maxOcc=4
             int1                  (xsd:int) elemento local
             dec1                (xsd:decimal) elemento local
       binel                       (xsd:hexBinary) elemento local
       lelem                      elemento complexo local, tipo base xsd:string
          latt                      (xsd:int) atributo local
       lcomp                     elemento complexo local
          head                    (xsd:string) elemento local
          incomp                elemento complexo local
             count                (xsd:int) elemento local
             comp:gcompel   elemento complexo global, minOcc=0, maxOcc=-1
                fstr                 (xsd:string) elemento local
                multel             elemento complexo local
                   in1              (xsd:boolean) elemento local
                   in2              (xsd:string) elemento local
                   in3              (xsd:float) elemento local
          footer                  (xsd:string) elemento local
       repstr                      (xsd:string) elemento local, minOcc=1, maxOcc=-1
  2. Crie um fluxo de mensagens, addev3, contendo: MQInput > Mapping > MQOutput.
  3. Abra o mapa e selecione addev3 como a origem e o destino.
  4. Mapeie cada elemento de origem para seu elemento de destino correspondente:
    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. Na área de janela da planilha, para a primeira condição, altere fn:true() para fn:exists($source/comp:addev3/sstr).
  6. Para a segunda condição, altere fn:true() para fn:exists($source/comp:addev3/intrep).
  7. Para a terceira condição, altere fn:true() para fn:exists($source/comp:addev3/dur)
  8. Para a primeira condição de opção complexa, altere fn:true() para fn:exists($source/comp:addev3/comp1).
  9. Para a segunda condição de opção complexa, altere fn:true() para fn:exists($source/comp:addev3/comp2).
  10. Para a terceira condição de opção complexa, altere fn:true() para fn:exists($source/comp:addev3/comprep).
  11. Crie as seguintes mensagens da instância (com os cabeçalhos RFH2 apropriados):
    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 da etapa 5: Mensagem addev3 criada na definição de mensagem COMPLEX e fluxo de mensagens addev3 criado contendo o arquivo de mapeamento addev3_Mapping.msgmap. Arquivos contendo mensagens da instância para teste.

Etapa 6. Implementar o Conjunto de Mensagens e o Fluxo e Executar Mensagens da Instância por Meio do Intermediário

  1. Crie um arquivo bar, addev3.
  2. Inclua o conjunto de mensagens MAPPING3_COMPLEX_messages e o fluxo de mensagens addev3 no arquivo bar.
  3. Implemente o arquivo bar no intermediário.
  4. Coloque os documentos da instância na fila de entrada.
Resultados da etapa 6: As mensagens de saída devem estar no 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>

Etapa 7. Desenvolver Fluxo para Ocupar um Destino de um Banco de Dados, Desenvolver Modelo de Mensagem e Documentos da Instância Correspondentes

  1. Crie um banco de dados, por exemplo, MAPDB e crie uma tabela TRANSACTION com as colunas:
    ACCOUNT        VARCHAR(12)
    TDATE                DATE
    VALUE               DECIMAL(8,2)
  2. Ocupe o banco de dados com 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. Crie um Nome de Origem de Dados ODBC do Windows para o banco de dados e, em seguida, registre o banco de dados no gerenciador de configuração (clique em Arquivo >Novo >Arquivo de Definições RDB).
  4. Na definição de mensagem COMPLEX, no espaço de nomes www.complex.net, crie uma mensagem addev4in com a estrutura:
    addev4in
       account             (xsd:string) elemento local
       tdate                 (xsd:date) elemento local
  5. Na definição de mensagem COMP2, no espaço de nomes www.comp2.net, crie uma mensagem addev4out com a estrutura:
    addev4out
       account             (xsd:string) elemento local
       tdate                 (xsd:date) elemento local
       value                 (xsd:decimal) elemento local, minOcc=0, maxOcc=-1
  6. Crie um fluxo de mensagens, addev4, contendo: MQInput > Mapping > MQOutput.
  7. Abra o mapa e selecione addev4in como a origem e addev4out como o destino.
  8. Mapeie a entrada para saídas da seguinte forma:
    account --- account
    tdate --- tdate
  9. Na planilha, selecione o valor de destino, clique com o botão direito do mouse e escolha Selecionar Origem de Dados no menu, selecione MAPDB no diálogo e clique em Concluir.
  10. Na área de janela superior, expanda a árvore MAPDB e ligue: VALUE --- value.
  11. Na área de janela da planilha, selecione o destino $db:select e altere fn:true() para: $db:select.MAPDB.SCHEMA.TRANSACTION.ACCOUNT=$source/comp:addev4in/account e $db:select.MAPDB.SCHEMA.TRANSACTION.TDATE=$source/comp:addev4in/tdate
  12. Expanda a árvore de Propriedades e configure: MessageType | 'addev4out'
  13. Configure a propriedade Origem de Dados para o nó de mapeamento como MAPDB.
  14. Crie as seguintes mensagens da instância (com os cabeçalhos RFH2 apropriados):
    <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 da etapa 7: Mensagem addev4in criada na definição de mensagem COMPLEX e mensagem addev4out criada na definição de mensagem COMP. Fluxo de mensagens addev4 criado contendo o arquivo de mapeamento addev4_Mapping.msgmap. Arquivos contendo mensagens de instâncias.

Etapa 8. Implementar o Conjunto de Mensagens e o Fluxo e Executar Mensagens da Instância por Meio do Intermediário

  1. Crie um arquivo bar, addev4.
  2. Inclua o conjunto de mensagens MAPPING3_COMPLEX_messages e o fluxo de mensagens addev4 no arquivo bar.
  3. Implemente o arquivo bar no intermediário.
  4. Coloque os documentos da instância na fila de entrada.
Resultados da etapa 8: As mensagens de saída devem estar no 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>

Etapa 9. Desenvolver um Fluxo Utilizando uma Função ESQL Definida pelo Usuário, Desenvolver Modelos de Mensagem e Documentos da Instância Correspondentes

  1. Na definição de mensagem COMPLEX, no espaço de nomes www.complex.net, crie mensagens addev5in e addev5out com as estruturas:
    addev5in
       value1                    (xsd:decimal) elemento local
       operator                 (xsd:string) elemento local
       value2                    (xsd:decimal) elemento local
       rate                        (xsd:decimal) elemento local
    addev5out
       grossvalue               (xsd:decimal) elemento local
       netvalue                   (xsd:decimal) elemento local
  2. Crie um fluxo de mensagens, addev5, contendo: MQInput > Mapping > MQOutput.
  3. Abra o mapa e selecione addev5in como a origem e addev5out como o destino.
  4. No projeto MAPPING3_COMPLEX_flows, crie um arquivo ESQL chamado addev5 e coloque estas funções nele:
    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. Na área de janela da planilha do editor de Mapeamento de Mensagens, expanda a mensagem e selecione grossvalue.
  6. Na área de janela da expressão, digite: esql:calcGrossvalue($source/comp:addev5in/value1, $source/comp:addev5in/operator, $source/comp:addev5in/value2).
  7. Selecione o destino netvalue e, na área de janela da expressão, digite: esql:calcNetvalue($source/comp:addev5in/value1, $source/comp:addev5in/operator, $source/comp:addev5in/value2, $source/comp:addev5in/rate).
  8. Expanda a árvore de Propriedades e configure: MessageType | 'addev5out'.
  9. Crie as seguintes mensagens da instância (com os cabeçalhos RFH2 apropriados):
    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 da etapa 9: Mensagens addev5in e addev5out criadas na definição de mensagem COMPLEX. Fluxo de mensagens addev5 criado contendo o arquivo de mapeamento addev5_Mapping.msgmap e o arquivo ESQL addev5.esql. Arquivos contendo mensagens de instâncias.

Etapa 10. Implementar o Conjunto de Mensagens e o Fluxo e Executar Mensagens da Instância por Meio do Intermediário

  1. Crie um arquivo bar, addev5.
  2. Inclua o conjunto de mensagens 'MAPPING3_COMPLEX_messages' e o fluxo de mensagens 'addev5' no arquivo bar.
  3. Implemente o arquivo bar no intermediário.
  4. Coloque os documentos da instância na fila de entrada.
Resultados da etapa 10: As mensagens de saída devem estar no 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>
Nenhuma mensagem de saída, mas o registro de eventos deve conter uma entrada:
BIP2949 ( BRK.default ) Foi emitida uma exceção ESQL gerada pelo usuário. As informações adicionais fornecidas com esta exceção são: ''Invalid Operator'' ''MOD'' 'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11' 
Esta exceção foi emitida por uma instrução THROW EXCEPTION. Este é o comportamento normal da instrução THROW. Como esta é uma exceção gerada pelo usuário, a ação do usuário é determinada pelo fluxo de mensagens e pelo tipo de exceção emitida.

Etapa 11. Desenvolver um Fluxo Utilizando um Procedimento Java Definido pelo Usuário, Desenvolver Modelos de Mensagem e Documentos da Instância Correspondentes

  1. Na definição de mensagem COMPLEX, no espaço de nomes www.complex.net, crie mensagens addev6in e addev6out com as estruturas:
    addev6in
        hexdata                (xsd:hexBinary) elemento local
    addev6out
        decval                  (xsd:decimal) elemento local
        fltval                     (xsd:float) elemento local
        intval                    (xsd:int) elemento local
  2. Crie um fluxo de mensagens, addev6, contendo: MQInput > Mapping > MQOutput.
  3. Abra o mapa e selecione addev6in como a origem e addev6out como o destino.
  4. No projeto MAPPING3_COMPLEX_flows, crie um arquivo ESQL chamado addev6 e coloque estas funções nele:
    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. Crie um arquivo de origem Java addev6.java com o seguinte conteúdo:
    import java.lang.*;
    import java.math.*;
    
    public class addev6 {
        //
        // Retorne o elemento decimal da cadeia binária
        //
        public static BigDecimal decFromBinary( byte[] hexval) {
        // Procure o elemento nomeado decval
        String search = "decval";
        String snval = findElement(hexval ,search );
        // Converta o valor em tipo decimal
        BigDecimal numval = new BigDecimal(snval);
        return numval;
        }
        //
        // Retorne o elemento float da cadeia binária
        //
        public static Double fltFromBinary( byte[] hexval) {
        // Procure o elemento denominado fltval
        String search = "fltval";
        String snval = findElement(hexval ,search );
        // Converta o valor em tipo float
        Double numval = new Double(snval);
        return numval;
        }
        //
        // Retorne o elemento integer da cadeia binária
        //
        public static Long intFromBinary( byte[] hexval) {
        // Procure o elemento denominado intval
        String search = "intval";
        String snval = findElement(hexval ,search );
        // Converta o valor em tipo integer
        Long numval = new Long(snval);
        return numval;
        }
        //
        // Localize o elemento nomeado e seu valor nos dados binários
        //
        private static String findElement( byte[] hexval, String search ) {
        // Converter bytes em cadeia
        String hexstr = new String(hexval);
        // Pares etiqueta/valor de comprimento fixo (length=14)
        int nvals = hexstr.length() / 14;
        String numval = "";
        String[] label = new String[nvals];
        String[] value = new String[nvals];
        // Loop sobre o número de pares etiqueta/valor
        para ( int i=0; i < nvals; i ++ ) {
            // obter posição inicial
            int st = i * 14;
            // a etiqueta tem comprimento 6
            int endl = st + 6;
            // o valor tem comprimento 8
            int endv = endl + 8;
            // extrair etiqueta e valor da cadeia
            label[i] = hexstr.substring( st, endl);
            value[i] = hexstr.substring( (endl+1), endv);
            // Verificar se o par atual possui a etiqueta solicitada
            se ( label[i].compareTo( search) == 0 ) {
            // ajustar preenchimento do valor
            numval = value[i].trim();
            }
        }
        return numval;
        }
    }
  6. Compile java e inclua o local do arquivo de classe no caminho de classe do sistema (pode ser necessário reinicializar o Windows se você editar o CLASSPATH).
  7. Na área de janela da planilha do Editor de Mapeamento de Mensagens, expanda a mensagem de destino e configure o destino decval como Valor: esql:decFromBinary($source/comp:addev6in/bval).
  8. Configure o destino fltval como: esql:fltFromBinary($source/comp:addev6in/bval).
  9. Configure o destino intval como: esql:intFromBinary($source/comp:addev6in/bval).
  10. Expanda o destino de Propriedades e configure: MessageType | 'addev6out
  11. Crie a seguinte mensagem da instância (com os cabeçalhos RFH2 apropriados):
    <comp:addev6in xmlns:comp="http://www.complex.net">
    <bval>
    <![CDATA[64656376616c20202031342e3238666c7476616c2020312e34452b32696e7476616c2020202020313230]]>
    </bval>
    </comp:addev6in>
Resultados da etapa 11: Mensagens addev6in e addev6out criadas na definição de mensagem COMPLEX. Fluxo de mensagens addev6 criado contendo o arquivo de mapeamento addev6_Mapping.msgmap e o arquivo ESQL addev6.esql. Origem Java addev6.java e arquivo de classe compilado addev6.class em um local no qual o CLASSPATH do sistema o localizará. Arquivos contendo mensagens de instâncias.

Etapa 12. Implementar o Conjunto de Mensagens e o Fluxo e Executar Mensagens da Instância por Meio do Intermediário

  1. Crie um arquivo bar, addev6.
  2. Inclua o conjunto de mensagens 'MAPPING3_COMPLEX_messages' e o fluxo de mensagens addev6 no arquivo bar.
  3. Implemente o arquivo bar no intermediário.
  4. Coloque os documentos da instância na fila de entrada.
Resultados da etapa 12: A mensagem de saída deve estar no formato:
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>

Resumo das Etapas 1 a 12

  1. Conjunto de mensagens MAPPING3_COMPLEX_messages criado e ocupado com mensagens addev1, addev1s e addev1n. Fluxo de mensagens addev1 criado no projeto MAPPING3_COMPLEX_flows contendo os arquivos de mapeamento addev1_Mapping.msgmap e addev1._Mapping1.msgmap. Arquivos contendo mensagens da instância para teste.
  2. As mensagens de saída devem estar no 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. Mensagem addev2 criada na definição de mensagem COMPLEX e mensagem addev2out criada na definição de mensagem COMP2. Fluxo de mensagens addev2 criado contendo o arquivo de mapeamento addev2_Mapping.msgmap. Arquivos contendo mensagens da instância para teste.
  4. As mensagens de saída devem estar no 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. Mensagem addev3 criada na definição de mensagem COMPLEX e fluxo de mensagens addev3 criado contendo o arquivo de mapeamento addev3_Mapping.msgmap. Arquivos contendo mensagens da instância para teste.
  6. As mensagens de saída devem estar no 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. Mensagem addev4in criada na definição de mensagem COMPLEX e mensagem addev4out criada na definição de mensagem COMP. Fluxo de mensagens addev4 criado contendo o arquivo de mapeamento addev4_Mapping.msgmap. Arquivos contendo mensagens de instâncias.
  8. As mensagens de saída devem estar no 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. Mensagens addev5in e addev5out criadas na definição de mensagem COMPLEX. Fluxo de mensagens addev5 criado contendo o arquivo de mapeamento addev5_Mapping.msgmap e o arquivo ESQL addev5.esql. Arquivos contendo mensagens de instâncias.
  10. As mensagens de saída devem estar no 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>
    Nenhuma mensagem de saída, mas o registro de eventos deve conter uma entrada:
    BIP2949 ( BRK.default ) Foi emitida uma exceção ESQL gerada pelo usuário. As informações adicionais fornecidas com esta exceção são: ''Invalid Operator'' ''MOD'' 'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11' 
    Esta exceção foi emitida por uma instrução THROW EXCEPTION. Este é o comportamento normal da instrução THROW. Como esta é uma exceção gerada pelo usuário, a ação do usuário é determinada pelo fluxo de mensagens e pelo tipo de exceção emitida.
  11. Mensagens addev6in e addev6out criadas na definição de mensagem COMPLEX. Fluxo de mensagens addev6 criado contendo o arquivo de mapeamento addev6_Mapping.msgmap e o arquivo ESQL addev6.esql. Origem Java addev6.java e arquivo de classe compilado addev6.class em um local no qual o CLASSPATH do sistema o localizará. Arquivos contendo mensagens de instâncias.
  12. A mensagem de saída deve estar no formato:
    <comp:addev6out xmlns:comp="http://www.complex.net">
    <decval>14.28</decval>
    <fltval>1.4E+2</fltval>
    <intval>120</intval>
    </comp:addev6out>
Tarefas relacionadas
Exemplo: Criando, Configurando e Implementando um Mapeamento de Mensagens
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2005 Última Atualização: 04/11/2005
ar25251_