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

Você pode utilizar 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 escolher não utilizar recursos do WebSphere MQ, poderá utilizar recursos do WebSphere Message Broker, codificando o ESQL apropriado 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 Codificação de mainframe, codifique o 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 você deve fazer para modificar uma mensagem CWF de forma que possa ser transmitida do WebSphere Message Broker ao 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 para o IMS deve ter o cabeçalho MQIIH e 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 forem binários de tipo lógico, 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 está definida no MRM e é chamada de IMS2. Defina os campos PIC X dessa mensagem como cadeia de tipo lógico para que ocorram conversões entre EBCDIC e ASCII. Se forem binários de tipo lógico, 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 o ESQL no nó Compute1 (saída) da seguinte maneira, especificando o ID relevante do MessageSet. 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.StrucId = 'IIH ';
    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.MessageDomain = 'MRM';
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS1';
    SET OutputRoot.Properties.MessageFormat = 'CWF1';

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

    WHILE I < CARDINALITY(InputRoot.*[]) DO
  7. Crie o ESQL no nó Compute2 (entrada) da seguinte forma, especificando o id relevante do MessageSet. 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 intermediário 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.MessageDomain = 'MRM';
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS2';
    SET OutputRoot.Properties.MessageFormat = 'CWF1';

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.

Você deve definir valor para o domínio, conjunto, tipo e formato de mensagem 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 você pode converter dados em uma página de códigos para outra é quando as mensagens contêm indicadores de novas linhas e estão sendo transmitidas entre sistemas EBCDIC e ASCII. A conversão requerida para esta situação é descrita em Convertendo NL EBCDIC em LF CR ASCII

Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Visão Geral do ESQL
Modelagem de Mensagens
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Gerenciando Arquivos ESQL
Referências relacionadas
Suporte ao Idioma Nacional
Nó Compute
Nó Database
Nó Filter
Referência de ESQL
Função CARDINALITY
Instrução DECLARE
Instrução SET
Instrução WHILE
Páginas de Códigos Suportadas
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac11620_