Convertendo NL EBCDIC em LF CR ASCII

Este tópico descreve uma tarefa de exemplo que altera os caracteres NL (Nova Linha) em uma mensagem de texto para os pares de caracteres CR (Retorno de Carro) e LF (Avanço de Linha).

Essa conversão pode ser útil se as mensagens de uma plataforma EBCDIC (por exemplo, utilizando CCSID 1047) forem enviadas para uma plataforma ASCII (por exemplo, utilizando o CCSID 437). Podem surgir problemas porque o caractere NL EBCDIC hex '15' é convertido no caractere ASCII não definido hex '7F'. Não existe nenhum ponto de código correspondente para o caractere NL na página de código ASCII.

Neste exemplo, é criado um fluxo de mensagens que interpreta a mensagem de entrada como uma mensagem no domínio BLOB. Isto é transmitido para um nó ResetContentDescriptor para redefinir os dados para uma mensagem no domínio MRM. A mensagem é chamada de msg_nl (um conjunto de elementos de cadeia repetitivos delimitados por caracteres EBCDIC NL). Um nó Compute é utilizado para criar uma saída com base em outra mensagem no domínio MRM denominado msg_crlf (um conjunto de elementos de cadeia repetitivos delimitados por pares de CR LF). O domínio da mensagem é alterado novamente para BLOB em outro nó ResetContentDescriptor. Este fluxo de mensagens é ilustrado abaixo.


Diagrama que mostra um fluxo de mensagens linear, composto de nós: MQInput1 com o terminal de Saída conectado a ResetContentDescriptor1, com o Terminal de Saída conectado a Compute1, com o terminal de Saída conectado a ResetContentDescriptor2, com o terminal de Saída conectado a MQOutput1. Nenhum outro terminal conectado.

As seguintes instruções mostram como criar as mensagens e configurar o fluxo de mensagens.

  1. Crie os modelos de mensagem para as mensagens no domínio MRM:
    1. Crie um projeto de conjunto de mensagens chamado myProj.
    2. Crie um conjunto de mensagens chamado myMessageSet com um formato físico TDS (o nome padrão é TDS1).
    3. Crie um elemento string1 do tipo xsd:string.
    4. Crie um tipo complexo chamado t_msg_nl e especifique as seguintes propriedades de tipo complexo:
      • Composição = Conjunto Ordenado
      • Validação de Conteúdo = Fechado
      • Separação do Elemento de Dados = Todos os Elementos Delimitados
      • Delimitador = <U+0085> (hex '0085' é a representação UTF-16 de um caractere NL)
      • Repetir = Sim
      • Mín Ocorrências = 1
      • Máx Ocorrências = 50 (supõe-se que o texto da mensagem consista em até 50 linhas)
    5. Inclua o Elemento string1 e defina a seguinte propriedade:
      • Delimitador do Elemento de Repetição = <U+0085>
    6. Crie uma Mensagem msg_nl e defina seu tipo complexo associado ao t_msg_nl
    7. Crie um tipo complexo chamado t_msg_crlf e especifique as seguintes propriedades de tipo complexo:
      • Composição = Conjunto Ordenado
      • Validação de Conteúdo = Fechado
      • Separação do Elemento de Dados = Todos os Elementos Delimitados
      • Delimitador <CR><LF> (<CR> e <LF> são mnemônicos dos caracteres CR e LF)
      • Repetir = Sim
      • Mín Ocorrências = 1
      • Máx de Ocorrências = 50
    8. Inclua o Elemento string1 e defina a seguinte propriedade:
      • Delimitador do Elemento de Repetição = <CR><LF>
    9. Crie uma Mensagem msg_crlf e defina o tipo complexo como t_msg_crlf.
  2. Configure o fluxo de mensagens mostrado na figura acima:
    1. Inicie com o nó MQInput1:
      • Defina Domínio de Mensagem = BLOB
      • Configura Nome da Fila = <O nome da sua fila de mensagens de entrada>
    2. Adicione o nó ResetContentDescriptor1, conectado ao terminal de saída de MQInput1:
      • Defina o Domínio de Mensagem = MRM
      • Selecione Redefinir Domínio de Mensagem
      • Configure Conjunto de Mensagens = <Seu ID de conjunto de mensagens> (com no máximo 13 caracteres)
      • Selecione Redefinir Conjunto de Mensagens
      • Defina Tipo de Mensagem = msg_nl
      • Selecione Redefinir Tipo de Mensagem
      • Defina Formato de Mensagem = TDS1
      • Selecione Redefinir Formato de Mensagem
    3. Adicione o nó Compute1, conectado ao terminal de saída de ResetContentDescriptor1:
      • Digite um nome para o Módulo ESQL desse nó ou aceite o padrão (<nome do fluxo de mensagens>_Compute1).
      • Clique com o botão direito do mouse no nó Compute1 e selecione Abrir ESQL.Codifique o seguinte ESQL neste módulo:
        -- Declare local working variables
                                 DECLARE I INTEGER 1;
        DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
        
        -- Loop to copy all message headers from input to output message
                                 WHILE I < J DO
         	SET OutputRoot.*[I] = InputRoot.*[I];
         	SET I=I+1;
        END WHILE;
        
        -- Set new output message type which uses CRLF delimiter
        SET OutputRoot.Properties.MessageType = 't_msg_crlf';
        
        -- Loop to copy each instance of string1 child within message body
        SET I = 1;
        SET J = CARDINALITY("InputBody"."string1"[]);
        WHILE I <= J DO
          SET "OutputRoot"."MRM"."string1"[I] = "InputBody"."string1"[I];
          SET I=I+1;
        END WHILE;

        Observe a utilização de uma variável J, 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
    4. Adicione o nó ResetContentDescriptor2, conectado ao terminal de saída do nó Compute1:
      • Defina Domínio de Mensagem = BLOB
      • Selecione Reconfigurar o Domínio de Mensagem.
    5. Finalmente, inclua o nó MQOutput1, conectado ao terminal de saída do nó ResetContentDescriptor2. Configure suas propriedades para direcionar a mensagem de saída para a fila ou filas requeridas.
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ó MQInput
Nó MQOutput
Nó ResetContentDescriptor
Referência de ESQL
Instrução DECLARE
Instrução SET
Instrução WHILE
Mnemônicos TDS
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac11630_