WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Convertendo Página de Código e Codificação da Mensagem

É possível usar ESQL em um nó Compute para converter dados para página de códigos e codificação de mensagens.

Se seu fluxo de mensagens estiver processando as mensagens do WebSphere MQ, você poderá utilizar os recursos do WebSphere MQ (incluindo as opções get e put e a conversão de dados do WebSphere MQ sairá) para fornecer essas conversões. Se não estiver processando mensagens do WebSphere MQ, ou se optar por não usar recursos do WebSphere MQ, você poderá usar recursos do WebSphere Message Broker, codificando a ESQL apropriada em um nó Compute em seu fluxo de mensagens.

O conteúdo de MQMD, de MQRFH2 e do corpo da mensagem de uma mensagem no domínio MRM, que foi modelado com um formato físico CWF, pode estar sujeito à conversão de página de códigos e de codificação. O conteúdo do corpo de uma mensagem nos domínios XML, XMLNS e JMS e as mensagens no domínio MRM que foram modeladas com um formato físico XML ou TDS são tratados como cadeias. Apenas a conversão de página de códigos é aplicável; nenhuma conversão de codificação é necessária.

Para mensagens no domínio MRM modeladas com um formato físico CWF, é possível definir os campos MQMD CCSID e de Codificação da mensagem de saída, além de CCSID e Codificação de quaisquer cabeçalhos adicionais, para o valor de destino requerido.

Para mensagens no domínio MRM modeladas com um formato físico XML ou TDS, você pode definir o campo MQMD CCSID da mensagem de saída, além do CCSID de quaisquer cabeçalhos adicionais. Os dados XML e TDS são tratados como cadeias e, portanto, estão sujeitos apenas à conversão de CCSID.

Uma mensagem de exemplo do WebSphere MQ possui um cabeçalho MQMD, um cabeçalho MQRFH2 e um corpo de mensagem. Para converter esta mensagem em um CodedCharSetId e Encoding de mainframe, codifique a seguinte ESQL no nó Compute:

SET OutputRoot.MQMD.CodedCharSetId = 500; 
SET OutputRoot.MQMD.Encoding = 785; 
SET OutputRoot.MQRFH2.CodedCharSetId = 500; 
SET OutputRoot.MQRFH2.Encoding = 785;

O exemplo a seguir ilustra o que deve ser feito para modificar uma mensagem CWF para que ela possa ser passada do WebSphere Message Broker para o IMS no z/OS.

  1. Você definiu a mensagem de entrada em XML e está utilizando um cabeçalho MQRFH2. Remova o cabeçalho antes de transmitir a mensagem para o IMS.
  2. A mensagem transmitida ao IMS deve ter o cabeçalho MQIIH e deve estar na página de código do z/OS. Essa mensagem é modelada no MRM e tem o nome de IMS1. Defina os campos PIC X dessa mensagem como cadeia de tipo lógico para que ocorram conversões entre EBCDIC e ASCII. Se os campos forem do tipo lógico binário, não ocorrerá nenhuma conversão de dados; os dados binários são ignorados quando uma mensagem CWF é analisada pelo analisador MRM.
  3. A mensagem recebida do IMS também é definida no MRM e tem o nome IMS2. Defina os campos PIC X dessa mensagem como cadeia de tipo lógico para que ocorram conversões entre EBCDIC e ASCII. Se os campos forem do tipo lógico binário, não ocorrerá nenhuma conversão de dados; os dados binários são ignorados quando uma mensagem CWF é analisada pelo analisador MRM.
  4. Converta a mensagem de resposta na página de códigos do Windows. O cabeçalho MQIIH é mantido nesta mensagem.
  5. Você criou um fluxo de mensagens que contém os seguintes nós: :
    1. O fluxo de saída, MQInput1 --> Compute1 --> MQOutput1.
    2. O fluxo de entrada, MQInput2 --> Compute2 --> MQOutput2.
  6. Codifique a ESQL no nó Compute1 (saída) conforme a seguir, especificando o ID do MessageSet relevante. Esse código mostra o uso do nome de camadas físicas padrão do CWF. É necessário utilizar o nome que corresponde a suas definições de modelo. Se você especificar um valor incorreto, o intermediário falhará com a mensagem BIP5431.
    -- Loop to copy message headers
    DECLARE I INTEGER 1;
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    
    WHILE I < J - 1 DO
      SET OutputRoot.*[I] = InputRoot.*[I];
      SET I=I+1;
    END WHILE;
    
    SET OutputRoot.MQMD.CodedCharSetId = 500;
    SET OutputRoot.MQMD.Encoding = 785;
    SET OutputRoot.MQMD.Format = 'MQIMS   ';
    SET OutputRoot.MQIIH.Version = 1;
    SET OutputRoot.MQIIH.StrucLength = 84;
    SET OutputRoot.MQIIH.Encoding = 785;
    SET OutputRoot.MQIIH.CodedCharSetId = 500;
    SET OutputRoot.MQIIH.Format = 'MQIMSVS ';
    SET OutputRoot.MQIIH.Flags = 0;
    SET OutputRoot.MQIIH.LTermOverride = '        ';
    SET OutputRoot.MQIIH.MFSMapName = '        ';
    SET OutputRoot.MQIIH.ReplyToFormat = 'MQIMSVS ';
    SET OutputRoot.MQIIH.Authenticator = '        ';
    SET OutputRoot.MQIIH.TranInstanceId = X'00000000000000000000000000000000';
    SET OutputRoot.MQIIH.TranState = ' ';
    SET OutputRoot.MQIIH.CommitMode = '0';
    SET OutputRoot.MQIIH.SecurityScope = 'C';
    SET OutputRoot.MQIIH.Reserved = ' ';
    SET OutputRoot.MRM.e_elen08 = 30;
    SET OutputRoot.MRM.e_elen09 = 0;
    SET OutputRoot.MRM.e_string08 = InputBody.e_string01;
    SET OutputRoot.MRM.e_binary02 = X'31323334353637383940';
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS1';
    SET OutputRoot.Properties.MessageFormat = 'Binary1';

    O uso de uma variável, J, inicializada para o valor da cardinalidade dos cabeçalhos existentes na mensagem, é mais eficiente que o cálculo da cardinalidade em cada iteração do loop, que ocorre se você codificar a seguinte instrução WHILE:

    WHILE I < CARDINALITY(InputRoot.*[]) DO
  7. Crie a ESQL no nó Compute2 (entrada) conforme a seguir, especificando o ID do MessageSet relevante. Esse código mostra o uso do nome de camadas físicas padrão do CWF. É necessário utilizar o nome que corresponde a sua definição de modelo. Se você especificar um valor incorreto, o broker falhará com a mensagem BIP5431.
    -- Loop to copy message headers
    DECLARE I INTEGER 1;
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    
    WHILE I < J DO
      SET OutputRoot.*[I] = InputRoot.*[I];
      SET I=I+1;
    END WHILE;
    
    SET OutputRoot.MQMD.CodedCharSetId = 437;
    SET OutputRoot.MQMD.Encoding = 546;
    SET OutputRoot.MQMD.Format = 'MQIMS   ';
    SET OutputRoot.MQIIH.CodedCharSetId = 437;
    SET OutputRoot.MQIIH.Encoding = 546;
    SET OutputRoot.MQIIH.Format = '        ';
    SET OutputRoot.MRM = InputBody;
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS2';
    SET OutputRoot.Properties.MessageFormat = 'Binary1';

Não é necessário definir valores específicos para as propriedades do nó MQInput1, porque a mensagem e o conjunto de mensagens são identificados no cabeçalho MQRFH2 e nenhuma conversão é requerida.

É necessário configurar valores para domínio de mensagem, conjunto, tipo e formato no nó MQInput para o fluxo de mensagens de entrada (MQInput2). Não é necessário definir parâmetros de conversão.

Uma situação específica na qual pode ser necessário converter dados em uma página de códigos para outra é quando as mensagens contêm caracteres de nova linha e são passadas entre sistemas EBCDIC e ASCII. A conversão requerida para esta situação é descrita em Convertendo NL EBCDIC em LF CR ASCII

Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:28:21


Tópico de TarefaTópico de Tarefa | Versão 8.0.0.5 | ac11620_