Convertir la página de códigos y la codificación de mensajes

Puede utilizar ESQL dentro de un nodo Compute para convertir datos de la página de códigos y la codificación de mensajes. Si el flujo de mensaje procesa mensajes WebSphere MQ, puede utilizar recursos WebSphere MQ (incluidas las opciones de obtener y transmitir y las rutinas de salida de conversión de datos de WebSphere MQ) para efectuar estas conversiones. Si no no está procesando mensajes WebSphere MQ o decide no usar recursos de WebSphere MQ, podrá utilizar recursos de WebSphere Message Broker codificando el ESQL apropiado en un nodo Compute del flujo de mensajes.

El contenido del MQMD, el MQRFH2 y el texto del mensaje de un mensaje del dominio del MRM que se haya modelado con un formato físico CWF puede estar sujeto a la conversión de la página de códigos y la codificación. El contenido del texto de un mensaje en los dominios XML, XMLNS y JMS, y los mensajes del dominio MRM que se hayan modelado con un formato físico XML o TDS, se tratarán como series de caracteres. Únicamente se aplica la conversión de la página de códigos; no es necesaria la conversión de la codificación.

Para los mensajes del dominio MRM modelados con un formato físico CWF, se pueden establecer, con del valor de destino requerido, los campos MQMD CCSID y Encoding del mensaje de salida más el CCSID y la codificación (Encoding) de las cabeceras adicionales que pueda haber.

Para los mensajes del dominio MRM modelados con un formato físico XML o TDS, se puede establecer el campo CCSID de MQMD del mensaje de salida más el CCSID de las cabeceras adicionales que pueda haber. Los datos XML y TDS se manejan como series de caracteres y, por lo tanto, están sujetos únicamente a la conversión del CCSID.

Un ejemplo de mensaje WebSphere MQ tiene una cabecera de MQMD, una cabecera de MQRFH2 y un texto del mensaje. Para convertir este mensaje a un CodedCharSetId y Encoding del sistema principal, codifique el siguiente ESQL en el nodo Compute:

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

El ejemplo siguiente muestra qué debe hacer para modificar un mensaje CWF para que éste se pueda pasar de WebSphere Message Broker a IMS en z/OS.

  1. Ha definido el mensaje de entrada en XML y está utilizando una cabecera MQRFH2. Elimine la cabecera antes de pasar el mensaje a IMS.
  2. El mensaje pasado a IMS ha de tener una cabecera MQIIH y ha de estar en página de códigos de z/OS. Este mensaje se ha modelado en el MRM y tiene el nombre IMS1. Defina los campos PIC X de este mensaje como una serie de caracteres de tipo lógico para que las conversiones entre EBCDIC y ASCII tengan lugar. Si son de tipo lógico binario, la conversión de datos no se producirá: los datos binarios se ignoran cuando el analizador MRM analiza un mensaje CWF.
  3. El mensaje recibido del IMS se ha definido también en el MRM y tiene el nombre IMS2. Defina los campos PIC X de este mensaje como una serie de caracteres de tipo lógico para que las conversiones entre EBCDIC y ASCII tengan lugar. Si son de tipo lógico binario, la conversión de datos no se producirá: los datos binarios se ignoran cuando el analizador MRM analiza un mensaje CWF.
  4. Convierta el mensaje de respuesta a la página de códigos de Windows. La cabecera MQIIH se retiene en este mensaje.
  5. Ha creado un flujo de mensajes que contiene los siguientes nodos: :
    1. El flujo de mensajes de salida, MQInput1 --> Compute1 --> MQOutput1.
    2. El flujo de mensajes de entrada, MQInput2 --> Compute2 --> MQOutput2.
  6. Codifique el ESQL del nodo Compute1 (de salida) como se indica a continuación, especificando el ID de MessageSet adecuado. Este código muestra el uso del nombre de la capa física CWF por omisión. Ha de utilizar un nombre que coincida con las definiciones de modelo. Si especifica un valor incorrecto, el intermediario fallará y se recibirá el mensaje BIP5431.
    -- Bucle para copiar cabeceras de mensajes
    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';

    Tenga en cuenta la utilización de una variable, J, que se inicializa para el valor de la cardinalidad de las cabeceras existentes en el mensaje. Esto es más eficaz que calcular la cardinalidad en cada iteración del bucle, cosa que sucede si se codifica la siguiente sentencia WHILE:

    WHILE I < CARDINALITY(InputRoot.*[]) DO
  7. Cree ESQL en el nodo Compute2 (entrada) como sigue, especificando el ID MessageSet adecuado. Este código muestra el uso del nombre de la capa física CWF por omisión. Ha de utilizar el nombre que coincida con la definición de modelo. Si especifica un valor incorrecto, el intermediario fallará y se recibirá el mensaje BIP5431.
    -- Bucle para copiar cabeceras de mensajes
    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';

No es necesario establecer ningún valor específico para las propiedades del nodo MQInput1 puesto que el mensaje y el conjunto de mensajes están identificados en la cabecera MQRFH2 y que no se requiere ninguna conversión.

En el nodo MQInput, es necesario establecer valores para el dominio, conjunto, tipo y formato del mensaje para el flujo de mensajes de entrada (MQInput2). No es necesario establecer parámetros de conversión.

Una situación específica en la que puede ser necesario convertir datos que estén en una página de códigos a otra, es aquella en la que los mensajes contienen indicadores de nueva línea y se están pasando entre sistemas EBCDIC y ASCII. La conversión necesaria en esta situación está descrita en el apartado Convertir EBCDIC NL en ASCII CR LF.

Conceptos relacionados
Visión general de flujos de mensajes
Visión general de ESQL
Modelado de mensajes
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Gestión de archivos ESQL
Referencia relacionada
Soporte de idiomas nacionales
Nodo Compute
Nodo Database
Nodo Filter
Referencia de ESQL
Función CARDINALITY
Sentencia DECLARE
Sentencia SET
Sentencia WHILE
Páginas de códigos soportadas
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac11620_